文/郝淑惠
Nginx虽然开发的时间不长,但是由于其低内存消耗、高稳定性和代码开源,很快受到许多公司和开发人员的喜爱,大量的研究人员对Nginx进行研究。
ngxpagespeed模块是谷歌基于Nginx开发的,大大提高了网页的加载速度,并且降低了用户访问延迟。
Nginx在中国也有大量用户和研究人员,并开发了不同的项目。比如,Tengine是由阿里巴巴基于Nginx开发的,它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。
负载均衡多年来一直是研究的热点,并且不断有新的算法被提出。负载均衡不仅在同构集群系统和异构集群系统中得到广泛应用,而且在分布式系统和云系统中也得到了广泛应用。通常,人们用节点的负载与性能比来衡量负载权重,值越大,权重越大。
Nginx有多种负载均衡算法,负载均衡的主要目的是将大量并发请求合理地分布到集群中的服务器上,根据算法是否内置,分为内置算法和扩展算法两种类型,加权轮询算法就属于内置算法,而一致性哈希算法则属于扩展算法。
如果没有配置任何负载均衡算法时,负载均衡算法会默认是加权轮询算法。
下文是Nginx中加权轮询算法的部分配置:
加权轮询算法存在的缺点是:加权轮询算法会根据配置经验进行权重配置,服务器的真实性能难以得到体现,并且由于客户端对每个请求的处理时间不同,会产生不均衡问题。当某个服务器的权重相对较大,并且正在用时较长的用户请求时,假如又有新的请求需要处理,由于该服务器的权重相对较大,新的请求会被分配给该服务器。该服务器会因为处理的请求过多而超载,其他服务器却没有处理请求。
一致性哈希算法就是将服务器地址按照一定规则(比如路由分配情况,服务器承载服务种类等)分配到一张哈希表中。当有新的数据请求时,会根据哈希表中的顺序,选择最近的一个服务器来处理该请求。
优点是,所选服务器是缓存服务器时,可以快速找到存储该类型数据的服务器。缺点是,一般的哈希算法是根据路由状况生成哈希表的,当该服务器不是缓存服务器时,如果遇到一个IP段出现大量请求,则会将这些请求都分配到同一台服务器。
Nginx支持正则表达式,是一款配置灵活的高性能Web服务器。在对Nginx性能进行调优时,可以一次只改一个配置项,如果更改后性能没有变化,就改回原来的值。
在全局块中,需要配置一些项。以下是一些需要特别关注的几个:
(1)设置创建的工作进程数。Nginx可以运行多个工作进程,每个都能处理大量连接。Nginx通过主进程创建工作进程。具体的数值设置由Nginx配置文件中的worker_connectons决定。设置的值太低,可能导致无法有效地处理高并发请求。如果设置的值太高,将导致工作进程之间的连续切换,增加系统损耗。
(2)每个工作进程设置固定的CPU内核。这样做可以避免同一个工作进程选择不同的CPU内核。
(3)设置nginx进程可以打开的最大文件数。如果设置的数值太低,当同时的连接数过多时,将会出现“打开的文件太多”问题。
events块为Nginx中的连接处理进行相应的设置。
(1)设置工作进程的最大连接数。这一数值的设置应该与全局块中提到的值相同。
(2)设置事件驱动模型。不同操作系统的事件驱动模型不同,因此该参数的设定一般根据操作系统来决定。如果是linux2.6+,使用epoll;如果是BSD,如Mac,使用Kqueue。
作为Web服务器,http块是Nginx最核心的一个模块,配置项也比较多,需要根据硬件信息进行适当的配置,常规情况下,使用默认配置即可。
有关Nginx性能调优,还有很多内容,比如,启用缓存可以显著地降低响应时间,同时能显著减轻后端服务器的负载;压缩响应可以大大减小响应的大小,减少带宽占用。
随着国内外研究人员对Nginx的深入研究,Nginx的稳定性、安全性和高效性在未来将会大大提高,并且会给用户带来更好的体验。