如何减less在Linux的Web服务器负载?

我们有一个高stream量的dynamic网站,生成大量的数据库查询每个请求和两个或三个Linux服务器,现在我想减less服务器负载我知道鱿鱼反向caching可以帮助,但它会是足够的? 我还有什么其他解决scheme?

步骤1)修复他妈的代码。

为什么每个请求都有这么多的查询? 在将更多移动部件投入混合之前,代码是否可以优化? 安装类似NewRelic的东西来了解应用程序瓶颈的位置。

步骤2)分类数据库。

你在使用索引吗? 你正确使用它们吗?

你使用正确的数据库引擎(MyISAM vs INNODB)?

能够更有效地存储在键值存储中吗?

步骤3)

caching所有的东西。

从最底层开始:你的服务器在磁盘上有一个支持闪存的caching吗?

你的服务器是否有足够的RAM来避免交换?

增加服务器上可用的RAM数量,以便您可以:

  • 使用memcached来存储数据库查询结果(这通常也需要更改代码库)。
  • 使用memcached来存储预先生成的页面片段。
  • 增加数据库内存限制,以便将更多的查询结果存储在内存中。
  • 安装Varnish反向代理,它将caching大量的页面数据,将负载从后端卸下。

将服务器拆分为基于angular色的集群。 有一个主/从数据库对。 编辑代码库,以便读取/写入分离(读取到从站,写入主站)。

前端caching/负载平衡器可能会有所帮助。 Nginx和Varnish都是很好的select(个人而言,我发现NginX更容易设置和更高的性能,但只有三个后端服务器就足够了)。

但要真正有所作为,您需要攻击问题的根源。

既然你不是程序员,你可以从分析数据库查询开始。 MySQL和PostgreSQL都有一个“慢查询”日志选项。 打开它,并尝试获得真正的交通几个小时(或几天)。 您可能会发现一些(2-10)非常类似的查询,大部分时间都会消耗。 打开一个数据库pipe理员控制台并对其运行EXPLAIN 。 在大多数情况下,只需确定要添加的正确索引就可以获得100倍的性能。 这不需要触摸代码!

我build议使用http://en.wikipedia.org/wiki/Nginx

这将涉及到其他事情的caching。

像memcached一样部署一个集成的caching,以从数据库中取出一些负载。