构建高度可扩展的Web服务 - php

我和我的团队正在开发一个应用程序,该应用程序必须能够处理非常大的流量。不是facebook级别,但是在将来,我希望能够在不重写大量代码的情况下扩展到该级别。

我的想法是使用自己的接口将所有内容模块化到单独的服务中。因此,例如,消息传递将具有一个消息传递接口,该接口可能具有send和getMessages()作为方法,然后PHP Web应用程序将仅通过soap或curl或类似的东西查询该接口。然后,消息传递应用程序可以是任何类型的应用程序,因此可以是Java应用程序或Python或任何适合于具有其自己的单独数据库分片的特定功能的应用程序。

这是一个好方法吗?

参考方案

模块化

我的想法是模块化
一切都与单独的服务
自己的界面。所以举个例子
消息将有一条消息
可能具有发送和
getMessages()作为方法,然后
PHP Web应用程序只需查询一下
通过肥皂或卷发或
这样的东西

我喜欢将每个服务模块分开的想法(良好的编码原理)。我不喜欢SOAP :(.。我认为这很复杂。我会选择JSON-RPC之类的东西。

一些快速提示:

我和我的团队处于
开发需要的应用程序
能够应付很重的人
交通。不是facebook级别,而是
将来我希望能够
无需大量代码即可扩展
重新编写。

像其他人一样,我也建议您查看High Scalability blog。
首先使用YSlow / google page speed专注于前端。此优化易于实现,可以极大地提高您的效率。来自Yslow网页的报价:

最终用户响应时间的80%是
花在前端上。这大部分
时间花在下载所有
页面中的组件:图像,
样式表,脚本,Flash等
减少组件数量
转减少HTTP的数量
呈现页面所需的请求。
这是加快页面速度的关键。

我还建议您查看php的HipHop,它将您的php代码转换为C代码,这对facebook来说是一个巨大的推动力。文章引用:

使用HipHop,我们减少了CPU
Web服务器上的平均使用量
大约百分之五十,这取决于
页。更少的CPU意味着更少的服务器,
这意味着更少的开销

我想,如果尚未设置的话,另一个很大/容易的改进就是使用APC(操作码缓存)来缓存您的编译代码。这将为您带来巨大的推动力(对于转换为HipHop的零件而言不是必需的)。
如果您想扩大网站规模,则必须遵循以下原则:

RAM is the new Disk

快取,快取,快取!例如APC,memcached,redis。
首先分析您的PHP代码,然后优化低落的果实。我发现Rasmus Lerdorf的audio文件确实有用。阅读博客文章时,您会发现很多提高性能的好技巧。
另外,我会考虑脱离关系数据库,而推荐使用例如Cassandra。这是我最近看到的许多大型公司(例如,twitter,digg,facebook,reddit)都采取的措施。您将必须以这种完全不同的心态去做,但是我敢打赌,这将完全值得付出。
Queue everything and delight every one,例如beanstalkd,gearman或google app引擎的taskqueue。

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数

PHP-如何获取类的成员函数列表? - php

如果我知道班级的名字。有没有办法知道类的成员函数列表? 参考方案 get_class_methods()是你的朋友

PHP-我们应在会话中包含哪些数据? - php

这是一个初学者的问题...在网站中,会话中应该包含或不应该包含什么类型的数据?我了解我不应该包含任何需要保持安全的信息。我对编程最佳实践更感兴趣。例如,有可能在会话中包括一些数据,否则这些数据将作为依赖项注入从一个页面发送到另一个页面。这不等于创建全局变量吗?一般来说,哪种数据在会话表中已经存在或没有?谢谢,JDelage 参考方案 您应该将会话视为一次写入…

php ziparchive类源代码 - php

Improve this question 我如何获取ziparchive类本身的源代码。 参考方案 假设您在谈论PHP ZipArchive class:下载PHP source code并查找适当的文件。如果您希望源代码是PHP代码,您可能会感到失望,因为源代码是用C语言编写的。或者,也可以在PHP Github Development Reposito…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…