我们有一个高stream量的dynamic网站,生成大量的数据库查询每个请求和两个或三个Linux服务器,现在我想减less服务器负载我知道鱿鱼反向caching可以帮助,但它会是足够的? 我还有什么其他解决scheme?
步骤1)修复他妈的代码。
为什么每个请求都有这么多的查询? 在将更多移动部件投入混合之前,代码是否可以优化? 安装类似NewRelic的东西来了解应用程序瓶颈的位置。
步骤2)分类数据库。
你在使用索引吗? 你正确使用它们吗?
你使用正确的数据库引擎(MyISAM vs INNODB)?
能够更有效地存储在键值存储中吗?
步骤3)
caching所有的东西。
从最底层开始:你的服务器在磁盘上有一个支持闪存的caching吗?
你的服务器是否有足够的RAM来避免交换?
增加服务器上可用的RAM数量,以便您可以:
将服务器拆分为基于angular色的集群。 有一个主/从数据库对。 编辑代码库,以便读取/写入分离(读取到从站,写入主站)。
前端caching/负载平衡器可能会有所帮助。 Nginx和Varnish都是很好的select(个人而言,我发现NginX更容易设置和更高的性能,但只有三个后端服务器就足够了)。
但要真正有所作为,您需要攻击问题的根源。
既然你不是程序员,你可以从分析数据库查询开始。 MySQL和PostgreSQL都有一个“慢查询”日志选项。 打开它,并尝试获得真正的交通几个小时(或几天)。 您可能会发现一些(2-10)非常类似的查询,大部分时间都会消耗。 打开一个数据库pipe理员控制台并对其运行EXPLAIN 。 在大多数情况下,只需确定要添加的正确索引就可以获得100倍的性能。 这不需要触摸代码!
我build议使用http://en.wikipedia.org/wiki/Nginx
这将涉及到其他事情的caching。
像memcached一样部署一个集成的caching,以从数据库中取出一些负载。