关于大规模Web应用程序架构的建议?

这是一个很大的问题:)我们正在运行一个LAMP不大的网站,5个具有LVS负载平衡的Web服务器,3个具有复制和读写分离的 MySQL服务器,我们使用Memcached进行缓存和一些全文搜索工具.到目前为止,它运作良好,因为我们目前没有大量的流量.

但是当用户快速增长时,我们将不得不扩展我们的架构以满足需求.可能会引入分布式文件系统和数据库(以及并行计算?),还有一些集群和维护技术(如Gearman和Pshell).

网上有一些我可以通过的文章.但我真的需要一些实践经验来切实有效地为这个问题做好准备.

解决方法

有许多方法可用于扩展Web应用程序和支持基础结构. Cal Henderson写了一本关于这个主题的好书,名为“构建可扩展的网站”.这是基于他与Flickr的经历.除非你慢慢成长,否则你会遇到许多其他人看到的同样的增长问题.与许多其他科目一样,缩放比例不是目的地.

第一步是使一切都可重复,可测量和可管理.通过可重复,我的意思是使用诸如FAI或kickstart之类的工具来安装操作系统,例如puppet或cfengine,以便在安装基本操作系统后配置机器.通过可测量,我的意思是使用像仙人掌,板球或神经节这样的东西来监控你的集群现在的表现.不仅可以测量加载平均值,还可以测量呈现页面或服务请求所需的时间.这些在开始时似乎都不重要,但应该在系统从负载下降之前告诉你,并且可以简单地一次添加10或100台机器.将您的增长计划建立在数据而非猜测上.

可管理意味着将工具放在适当的位置,以允许您自动生成和测试尽可能多的配置.从你拥有的东西开始并发展它.如果您将机器信息存储在数据库中,那很好.如果没有,您可能有一个电子表格,您可以导出.如果您还没有将配置置于某种源代码控制中.从数据库自动创建配置可以让您在压力更小的情况下成长.在它们在您的服务器上运行之前对它们进行测试可以避免由于拼写错误或其他错误导致服务无法启动.

水平方法假设您可以适当地重复.想想你的应用程序.拆分哪些区域有意义?许多机器可以并行处理哪些区域?延迟会影响您的应用程序.您有多大可能遇到连接限制或其他瓶颈?您是否要求您的Web服务器也处理邮件传递,数据库或其他杂务?

我曾在拥有数百个Web服务器的环境中工作过.对于不同类型的负载,事物应该以不同方式分割.如果您拥有很少变化的大量数据文件,那么将它们从主动变化的“东西”中分离出来可能会为提供静态和动态数据提供更多的空间.不同的工具可以更好地适应不同的负载. Apache和Lighttpd在某些方面效果很好,Nginx对其他人的效果更好.

查看代理和缓存.用户和应用程序之间以及应用程序的各个部分之间.我读到你已经在使用memcache了,这有帮助.在负载均衡器和Web服务器之间放置像perlbal或pound这样的反向代理可能有意义,具体取决于您的应用程序流量.

在某些时候,您可能会发现MysqL master< - > (N * slave)复制没有跟上,你需要对数据库进行分区.对数据库进行分区可能涉及设置另一层数据管理.很多人使用另一个带memcache的数据库进行管理.在我工作的一个地方,我们使用了主< - >主要用于大多数数据的复制对,另一对用于10个读取从属用于指向数据的指针.

这只是我在使用数百台机器的网站上遇到的一些问题的一个非常简单的描述.从几台机器到几百台机器的增长是无止境的.我相信成千上万的成长也是如此.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些