首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >构建高度可伸缩的web服务

构建高度可伸缩的web服务
EN

Stack Overflow用户
提问于 2010-04-02 22:46:55
回答 4查看 10.7K关注 0票数 12

我和我的团队正在开发一个应用程序,它需要能够处理相当大的流量。不是facebook级别的,但在未来,我希望能够在不重写大量代码的情况下进行扩展。

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

这是一种好的方法吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-03 02:22:48

模块化

我的想法是把所有东西模块化成具有自己接口的独立服务。例如,消息传递将有一个消息传递接口,该接口可能具有作为方法的send和getMessages(),然后PHP web应用程序将简单地通过soap或curl或类似的东西来查询此接口

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

一些小贴士:

我和我的团队正在开发一个应用程序,它需要能够处理相当大的流量。不是facebook级别的,但在未来,我希望能够在不重写大量代码的情况下进行扩展。

像其他人一样,谷歌

  • 也暗示我会建议你使用YSlow /page speed查看High Scalability blog.
  • First focus在前端。这种优化很容易实现,并且可以给您带来显著的提升。引自Yslow网页:

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

  • ,我也建议你看看HipHop,它可以把你的php代码转换成C代码,这对facebook来说是一个巨大的推动。引述自本文:

使用HipHop,我们已经将

服务器上的CPU使用率平均降低了约50%,具体取决于页面。更少的CPU意味着更少的服务器,这意味着更少的开销

  • 我猜另一个大的/容易的改进是使用APC(操作码缓存)来缓存编译后的代码。这将给你一个巨大的提升(对于转换成HipHop的部分来说不是必要的)。
  • 如果你想让你的网站变得更大,你必须遵循这个咒语:

RAM is the new Disk

!Cache,cache,cache!,例如APC,memcachedredis

PHP

  • 首先分析你的PHP代码,然后优化容易挂起的果实。我发现Rasmus Lerdorf的这个audio文件非常有用。当你阅读这篇博文时,你会发现很多改进performance.

  • Also的好技巧,我会考虑离开关系型数据库,转而使用例如Cassandra。这是我最近看到很多大公司都在做的事情(比如twitter,digg,facebook,reddit)。你将不得不以一种完全不同的心态,但我敢打赌,这将是完全值得的effort.

  • Queue everything and delight every one,例如beanstalkdgearman或谷歌应用程序引擎的taskqueue.
票数 20
EN

Stack Overflow用户

发布于 2010-04-02 22:59:36

作为第一步,这听起来很合理,但请记住,PHP层和消息传递层之间的通信会增加一些延迟。您还可以考虑:

  • 在PHP层上缓存数据,使用(例如) memcached。您还可以考虑使用Web Proxy Cache,例如,通过将会话数据存储在数据库中,将web服务器squid
  • Scaling到多台计算机。一旦你可以支持2台web服务器,添加第三台(第四台、第五台等)应该很简单。请记住,您最终可能还需要将消息传递图层扩展到多台计算机。
  • 使用PHP加速器等工具来缓存已编译的脚本;应有助于提高web图层

的性能

High Scalability上也有一些很棒的文章,你可能会发现它们对你有帮助。

最后,请记住,过度设计解决方案是很容易的。最好的办法是在整个过程中持续测量负载、性能、资源利用率等,然后根据需要使用这些数据进行调整。

票数 5
EN

Stack Overflow用户

发布于 2010-04-02 23:05:27

缓存、缓存和更多缓存。SQL查询缓存,操作码缓存,避免多次查询相同的东西。然后在你跑步的时候使用一个分析器来跟踪你的弱点在哪里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2567254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档