初探Nginx

下文主要介绍Nginx的概念,以及基本的原理,并对Nginx和F5做了一个简单的对比。

先来说说Nginx:

相信很多人都听过Nginx,知道他是一个HTTP和反向代理服务器。那么说起Nginx的同时,我们也会关联到F5和A10。我们也会简单比较一下Nginx和F5。

Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器。Nginx 以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。目前有很多国内网站采用 Nginx 作为 Web 服务器。

Nginx 的几项基本特性:

1.处理静态文件,索引文件以及自动索引;打开文件描述符缓冲。

2.无缓存的反向代理加速,简单的负载均衡和容错。

3.FastCGI,简单的负载均衡和容错。

4.模块化的结构。包括 gzipping, byte ranges, chunked responses,以及 SSI-filter 等 filter。如果由 FastCGI 或其它代理服务器处理单页中存在的多个 SSI,则这项处理可以并行运行,而不需要相互等待。

5.支持 SSL 和 TLSSNI。

这个是摘录的比较官方的Nginx的特点。

简单的说一下自己的理解,Nginx作为负载均衡服务器,就相当于是一个中介平衡物质。其它 HTTP 服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器,比如我们常用的tomcat,一旦上到200个以上进程的时候,再访问就会变得异常缓慢,而Nginx采取了分阶段资源分配技术,使得内存和CPU的消耗变得非常低,官方实验说明,如果有1000个不活跃的连接,只占2.5M的内存。

而且Nginx支持热部署,这个对于环境的稳定性来说非常重要,即可以不停Nginx服务来升级版本。

Nginx架构初识:

Nginx的高性能是与架构分不开的,Nginx 在启动后,在 unix 系统中会以 daemon 的方式在后台运行,后台进程包含一个 master 进程和多个 worker 进程。master 进程主要用来管理 worker 进程,包含:接收来自外界的信号,向各 worker 进程发送信号,监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动重新启动新的 worker 进程。而基本的网络事件,则是放在 worker 进程中来处理了。多个 worker 进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个 worker 进程中处理,一个 worker 进程,不可能处理其它进程的请求。worker 进程的个数是可以设置的,一般我们会设置与机器cpu核数一致,这里面的原因与 Nginx 的进程模型以及事件处理模型是分不开的。Nginx 的进程模型,可以由下图来表示:

上述是Nginx的工作原理。

当启动Nginx后,我们如果需要重启Nginx,Nginx是怎么操作的呢?理解了这个,也就知道了为什么Nginx可以热部署环境。重启命令是kill -HUP pid 或者 ./nginx -s reload(0.8版本后),因为master 来管理 worker 进程,所以我们只需要与 master 进程通信就行了,当master 进程在接收到信号后是怎么做的呢?首先 master 进程在接到信号后,会先重新加载配置文件,然后再启动新的 worker 进程,并向所有老的 worker 进程发送信号,告诉他们可以光荣退休了。新的 worker 在启动后,就开始接收新的请求,而老的 worker 在收到来自 master 的信号后,就不再接收新的请求,并且在当前进程中的所有未处理完的请求处理完成后,再退出。

浅谈nginx负载均衡和F5的区别:

负载均衡器F5作为处理外界请求的第一道“墙”,将请求分发到web服务器后,web服务器上的Nginx再进行处理,静态内容直接访问本地门户,动态数据则通过反向代理指向内网服务。

Nginx:高性能的HTTP和反向代理服务器,同时支持作为IMAP/POP3/SMTP代理服务器。目前被很多网站应用为其HTTP软负载均衡器。高效的性能、良好的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗正逐渐被大型互联网公司所青睐。

二者对比:

F5,硬件

优点:能够直接通过智能交换机实现,处理能力更强,而且与系统无关,负载性能强,更适用于一大堆设备、大访问量、简单应用。

缺点:成本高,除设备价格高昂,而且配置冗余,很难想象后面服务器做一个集群,但最关键的负载均衡设备却是单点配置,无法有效掌握服务器及应用状态。

硬件负载均衡,一般都不管实际系统与应用的状态,而只是从网络层来判断,所以有时候系统处理能力已经不行了,但网络可能还来得及反应(这种情况非常典型,比如应用服务器后面内存已经占用很多,但还没有彻底不行,如果网络传输量不大就未必在网络层能反映出来)

Nginx,软负载

优点:基于系统与应用的负载均衡,能够更好地根据系统与应用的状况来分配负载。这对于复杂应用是很重要的,性价比高,实际上如果几台服务器,用F5之类的硬件产品显得有些浪费,而用软件就要合算得多,因为服务器同时还可以跑应用、做集群等。

缺点:负载能力受服务器本身性能的影响,性能越好,负载能力越大。

有关Nginx和F5、A10就先说这么多,这个已经是有关运维层面的知识了,本人的储备实在太少,边接触边学习,慢慢和大家分享。

F5 和 A10都属于硬件的负载,我们在项目中用的是A10的负载均衡,但是以我的层面还没有接触到,有机会了解到再和大家聊。

分享技术

享受生活

一方素笺丶萦思念

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180128G010GF00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券