对于高性能网站 ,请求量大,如何支撑?大体分为两个部分。一部分是尽量减少对服务器的请求,另一方面是提高服务器的相应能力。减少服务器的请求能力,我这里列举一下几个方面,大家可以参考。
1:对于开发人员,尽量做到能够合并css, 把多张背景图片合并, 减少mysql查询等。
2: 对于运维人员, nginx的expires 设置,利用浏览器缓存等,减少查询。
3: 利用第三方的cdn来响应请求,以此来减少自身服务器的压力。
4: 最终剩下的,不可避免的请求----服务器集群+负载均衡来支撑。
所以,来到第4步后,就不要再考虑减少请求这个方向了.而是思考如何更好的响应高并发请求。那么这也是我们今天着重要讲的。
对于Nginx来说,客户来请求Nginx 来响应,怎么响应,无非是读取mysql 或者是直接读取磁盘上的index.html 等等。两个方向,第一是要建socket 连接,第二是要打开文件。这就牵扯到两个硬性的限制。第一,你的socket 连接能不能建那么多。你的内存是不是足够大,因为建立socket 连接都要内存维护着他们的信息的。你打开文件,操作系统允许不允许你一次打开那么多的文件。因为在默认情况下一个进程同时只能打开1024个文件。所以你想建立高并发,高并发无非就是建立的socket 连接多,打开的文件多。只有你这两个方面能承的住。当然对你的网卡也是有要求的,起码你的网卡能够同时跑通那么多的流量。
知道了这两个大的方向之后,我们排查问题就需要从这两点入手。然后通过观察系统的dmesg 和 nginx 的error.log 来逐步解决问题。其实在真实的生产环境里面,做东西都是哪里出错了,跟着错误轨迹一点点去摸索的优化的。没有一个固定的路子说照着什么做就能达到多大的并发。
以上是架构一个高并发 Nginx 服务器的大体思路和方案。在下一篇文章中,我将会拿一个实例,运用今天所讲到的理论,从实操的角度来说明一下如何一步一步的把一个大并发的服务器架构起来。