我正在构建一个将处于荒谬负载下(每秒数千到数万个查询)的web服务。我的Apache,PHP,memcache和一些数据库的正常堆栈将能够处理它与一个很好的负载平衡器infront和大量的机器,但我想知道是否有更好的解决方案。高可伸缩性技术堆栈
端点将被一个信标(通过客户端上的javascript)命中,我将读取用户的cookies,从数据库中提取一些小信息,缓存它,做一些小的计算,发送响应和如果需要,写入数据库并使缓存无效。
好的技术选择和/或硬件建议?
我正在构建一个将处于荒谬负载下(每秒数千到数万个查询)的web服务。我的Apache,PHP,memcache和一些数据库的正常堆栈将能够处理它与一个很好的负载平衡器infront和大量的机器,但我想知道是否有更好的解决方案。高可伸缩性技术堆栈
端点将被一个信标(通过客户端上的javascript)命中,我将读取用户的cookies,从数据库中提取一些小信息,缓存它,做一些小的计算,发送响应和如果需要,写入数据库并使缓存无效。
好的技术选择和/或硬件建议?
这不是一个问题,可以在其他任何地方回答这个问题,而不是一个广泛的概述。一些一般性的指针:
至于你的普通堆栈,我会坚持下去,除非你有特别的要求,你没有提到禁止它。毕竟,PHP是一种经过验证的技术,可以运行互联网(Facebook,维基百科,Flickr和我认为雅虎)前20个网站中的4个左右。如果对他们来说足够好,那对你来说已经足够了。
更重要的是,你知道它。技术堆叠你知道王牌技术堆栈,几乎在任何情况下都不会。注意最新的炒作技术堆栈的“绿色牧场”陷阱。
Memcache很好。另一件你可能想考虑添加到混合中的beanstalkd是一个分布式工作队列处理器。
要回答的一个重要问题是:您可以如何很好地分配您的应用程序?轻松实现分区的应用程序更容易扩展。那些不倾向于以某种方式进行修改以使其更易于分区的方式。
一个很好的例子就是一个简单的sharetrading应用程序。您可以根据股票代码(一台服务器上的A-C,另一台服务器上的D-F等)划分市场信息。对于很多这样的应用程序来说,这将运行良好
http://highscalability.com/这里有很多东西需要学习,你会很可能找到你的答案。
龙卷风看起来像什么东西我会试试这种问题http://bret.appspot.com/entry/tornado-web-server至少你知道这是一个久经考验的解决方案。
我可以为您的堆栈贡献一个好的组件:MemCache。
PHP,memcached + DB总的来说可以很好地扩展,但是可能有更低成本的方法,即能够处理每台机器更多并发请求的堆栈。
鉴于您的评论在这里...
我的目标不是一个大的可扩展的系统,只是一个简单的技术堆栈。我没有增长数据库,搜索,爬虫等。只是简单的请求,查询,响应和存储。对于我的目的,技术堆栈的任何建议?
..这听起来像DB的一部分可能是亚马逊的S3([什么?!?] [1])解决,假设你只需要通过密钥找到项目。如果你不介意eventual consistency,那么这也会给你Cloudfront的读数。
同时,服务器端使用async IO来处理请求应该会显着提高每台机器可以处理的并发请求数。另一个海报已经说龙卷风(bret.appspot.com/entry/tornado-web-server)值得一看 - 没有看到异步IO的API更友好。
您可能仍然需要memcached来保持快速读取,但是您要注意,memcached客户端在尝试发出并发请求时不会阻止服务器进程--PHP通常不会这个问题在每个PHP(或Apache)进程都有自己的memcached连接,并且一次只做一件事。 This python client - 应该支持异步IO - 底层的libmemcached支持异步请求。
同样适用于从服务器到S3的HTTP请求 - 您如何处理并发请求? boto似乎使用连接池,每个连接持有不同的套接字打开。内存使用?
声明:我在这里成为一名扶手椅架构师 - 并没有真正做到这一点,最聪明的建议可能会按时完成项目,而且你知道的并且不会失败。
很抱歉的链接
您也可以考虑使用BigPipe来提高你的表现。 Facebook也在大量使用它,这就是他们对此的看法:“为了利用Web服务器和浏览器之间的并行性,BigPipe首先将网页分成多个小块,称为小页面,正如流水线微处理器将指令的生命周期分成多个阶段(例如“取指令”,“指令解码”,“执行”,“寄存器回写”等),BigPipe将页面生成过程分成几个阶段:
请求解析:web服务器解析和健康检查HTTP请求 数据获取:Web服务器从存储层获取数据 标记生成:Web服务器为响应生成HTML标记。 网络传输:响应从Web服务器传输到浏览器。 CSS下载:浏览器下载页面所需的CSS。 DOM树构造和CSS样式:浏览器构造文档的DOM树,然后在其上应用CSS规则。 JavaScript下载:浏览器下载页面引用的JavaScript资源。 JavaScript执行:浏览器执行页面的JavaScript代码。
前三个阶段由Web服务器执行,最后四个阶段由浏览器执行。每个小页面必须顺序遍历所有这些阶段,但BigPipe允许在不同阶段同时执行几个小页面。“
我的目标不是一个大的可扩展系统,只是一个简单的技术堆栈。搜索,爬虫等仅仅是一个简单的请求,查询,响应和存储任何关于我的目的的技术堆栈建议? – 2009-09-14 06:46:10
从我所看到的,你可以用任何技术堆栈构建可伸缩的系统。每秒数以千计的查询“是非常高的,因此对我来说这是一个”大型可扩展系统“,任何技术栈都有其成功的故事,如果你想支持这个收费,你需要阅读这个网站(也许考虑使用键/值存储为CouchDB而不是关系数据库) – 2009-09-14 07:07:37