在讨论如何随着达到预定里程碑而扩展系统时,我想分享一个之前看到的很棒的建议,这是一位匿名作者提出的一个简单直接的扩展计划。虽然这些建议是针对特定场景的,但其中的原则和思想可以普遍应用于不同的系统和应用程序。
系统扩展的阶段性规划
阶段1:单服务器启动
- 硬件配置:单台服务器,双四核2.66GHz, 8GB内存, 500GB磁盘Raid 10。
- 操作系统:Fedora 8,或其他Linux发行版。
- 代理缓存:使用Varnish,相比Squid有更好的性能。
- Web服务器:Lighttpd,相较于Apache 2有更快的响应速度和更简单的配置。
- 对象缓存:Memcached,具有良好的可扩展性。
- PHP缓存:APC,易于配置。
- 编程语言:PHP 5,避免使用臃肿的框架。
- 数据库:MySQL 5,未考虑PostgreSQL,因为作者对它不熟悉,MySQL有更多的工具和资源。
阶段2:最大化内存
- 内存升级:将服务器内存扩展到64GB,尽可能多地缓存数据。
阶段3:负载均衡和前端扩展
- 购买负载均衡器:添加两台前端服务器用于Varnish/Memcached/Lighttpd。
- 原始服务器作为数据库服务器:将原始服务器专用于MySQL数据库。
阶段4:根据需求水平扩展数据库
- 数据库水平扩展:根据负载和使用模式,可能需要额外的数据库服务器。
- 静态内容使用CDN:如果必要,将Varnish / Memcached / Lighttpd层分离成独立层,并考虑使用CDN来托管静态内容。
阶段5:最大化资源和缓存
- 资源扩展:将所有服务器的内存扩展到64GB,重点是缓存。
阶段6:持续扩展和更新
- 持续更新:如果项目发展到这一阶段,意味着已经非常成功,此时可以更换最新的硬件设备,继续扩展。
其他关键考虑点
性能监控与预测
- 使用监控工具:如Munin,帮助预测何时需要升级系统。
- 分离数据库服务器:将MySQL移至单独的服务器,释放资源。
- 分布式内存缓存:使用memcached。
- MySQL主从配置:增加数据库的可用性和负载能力。
- 增加更多Web服务器:如果需要,使用LVS作为前端的负载均衡器。
监控的重要性
- 预见性能限制:利用监控工具预见性能瓶颈,并在问题变严重之前采取行动。
- 监控选项:关注不同的监控工具和方法,如Feedburner、Flickr和Ebay的架构。
结论
大多数问题是可以预测的,特别是当你经常关注相关领域的最新动态。为你的成长制定计划,不必立即实施所有计划,但通过现在开始朝着正确的方向迈出第一步,可以使路径变得更加容易。在问题爆发时,你也会感到更少的压力。