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

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

这是一个好方法吗?

最佳答案

模块化



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

一些快速提示:


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


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


  • 如果尚未设置,我想另一个大/容易的改进就是使用APC(操作码缓存)来缓存编译后的代码。这将为您带来巨大的插入力(对于转换为HipHop的零件而言不是必需的)。
  • 如果您想扩展您的网站,则必须遵循这一口头禅:



    !缓存,缓存,缓存! ,例如APC,memcachedredis
  • 首先配置您的PHP代码,然后优化低落的果实。我发现Rasmus Lerdorf的audio文件确实有用。阅读博客文章时,您会发现很多提高性能的好技巧。
  • 同样,我会考虑离开关系数据库,而转而使用Cassandra。这是我最近看到的许多大型公司(例如,twitter,digg,facebook,reddit)都采取的措施。您将不得不以这种完全不同的心态去做,但是我敢打赌,这将完全值得您付出努力。
  • Queue everything and delight every one,例如beanstalkdgearman或google app引擎的taskqueue
  • 10-06 07:36
    查看更多