下文主要介绍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的负载均衡,但是以我的层面还没有接触到,有机会了解到再和大家聊。
分享技术
享受生活
一方素笺丶萦思念
领取专属 10元无门槛券
私享最新 技术干货