当前位置:首页 > 教程 > 正文内容

nginx工作实战(nginx工作原理)

2023-04-18 20:50:05教程1

nginx工作原理

Nginx

Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的 HTTP 和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。

Nginx 因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是 Apache2.2+mod_proxy_balancer 的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块数量达到 Apache 的近 2/3。对 proxy 和 rewrite 模块的支持很彻底,还支持 mod_fcgi、ssl、vhosts ,适合用来做 mongrel clusters 的前端 HTTP 响应。

目前 Nginx 在国内很多大型企业都有应用,且普及率呈逐年上升趋势。选择 Nginx 的理由也很简单:

第一,它可以支持 5W 高并发连接;

第二,内存消耗少;

第三,成本低。

Apache

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。 [2]

Apache HTTP服务器是一个模块化的服务器,源于NCSAhttpd服务器,经过多次修改,成为世界使用排名第一的Web服务器软件。

它可以运行在几乎所有广泛使用的计算机平台上。

区别与联系

两者最核心的区别在于 apache 是同步多进程模型,一个连接对应一个进程,而 nginx 是异步的,多个连接(万级别)可以对应一个进程。

一般来说,需要性能的 web 服务,用 nginx 。如果不需要性能只求稳定,更考虑 apache ,后者的各种功能模块实现得比前者,例如 ssl 的模块就比前者好,可配置项多。epoll(freebsd 上是 kqueue ) 网络 IO 模型是 nginx 处理性能高的根本理由,但并不是所有的情况下都是 epoll 大获全胜的,如果本身提供静态服务的就只有寥寥几个文件,apache 的 select 模型或许比 epoll 更高性能。当然,这只是根据网络 IO 模型的原理作的一个假设,真正的应用还是需要实测了再说的。

nginx的作用

nginx如果设置了静态文件缓存时间,那么在这个时间段内,nginx不会重新去被代理的服务器获取新的文件,从而减少对服务器的压力。

nginx原理和架构

Nginx 跟 Haproxy 其实他们两个的定位是有所不同的,Nginx的定位是一个server,Haproxy的定位是一个load balancer。

Nginx通过各种plugin module可以支持Load balance的功能,而且性能不弱于haproxy太多,所以总有人拿来将两个东西比较。其实Apache也可以通过相关模块做load balancer,只不过性能差得多而已所以没人用而已。当然了Nginx的LB功能现在是其支柱主打功能而已。

看到有很多答案对于haproxy多进程有误解,这里特别说下,haproxy早就支持多进程模型,但是并不是Nginx的Worker Master结构,而是平等多进程结构,同时也支持REUSE PORT选项,所以在这里Nginx跟Haproxy对于多核利用上都是一样的并没有本质区别。

haproxy从1.8之后,添加了多线程的模式,现在它更推荐的也是这个模型,在一些平台上能够更好的利用多核。而Nginx从来没有多线程模型。而且看起来社区也没打算支持。

Nginx其实基于server的功能来说,是Haproxy不具备的,让Haproxy像一个普通Web server那样回复一个普通的HTTP请求是很难的,不大规模修改源码根本做不到。Haproxy是围绕转发模型设计的,整个流程就是围绕如何快速把一个请求或者回复转发到另一端。并不是像Server一样接受请求然后回复。

但是Nginx作为一个纯粹的LB来说,尤其是针对Web LoadBalancer来说,功能没有haproxy那么细致。Haproxy支持的ACL对象非常广泛,很多情况并不需要脚本辅助就可以完成复杂的功能,而Nginx稍微复杂的LoadBalance功能都需要使用脚本才能完成,这样性能就会差很多。

从功能角度上来讲,Nginx其实功能比Haproxy要多(当然并不都是免费的),因为他的开发社区和定位方向都比Haproxy要大和宽泛。在Nginx上面的各种解决方案也要多的多。比如WAF,haproxy一致都没有比较好的原生解决方案。还有包括最近针对Service Mesh的支持,haproxy都是很难跟得上。

但是基础功能,包括HTTP2,TLS 1.3,Script, SSL/TLS offload,ocsp,SNI preload,其实haproxy最新版本早就已经支持,甚至比Nginx还更早些(HTTP2比较晚,但是现在也支持了)。另外,关于硬件SSL offload支持其实主要是OpenSSL的engine的支持,所以这个大家都差不多,只要兼容最新OpenSSL都没什么问题。

Haproxy的优点其实是转发性能稍高,因为haproxy追求zero copy的forward流程,所以代码都倾向于优化在这一点上。但是这个优势现在被广泛的TLS/SSL应用抹平了,对比0 copy节省的时间来说加解密的消耗的性能占绝大多数,所以haproxy基本上在现在的广泛SSL环境下没有什么优势了。除非你想用纯HTTP,而且还想使用比较复杂的基于HTTP头部的Load Balance功能,那么Haproxy是个好选择,否则只是单纯LB的话,LVS性能其实更更高,毕竟人家在Kernel里面。

从代码层面来说,Nginx的结构化代码和模块化都比Haproxy好太多。Haproxy代码模块化一直是个大问题,内部结构模块化不足,二次开发困难,最近到1.9了才有些改善,但是仍然有很多内部trick的hack和让人发懵的FLAG。相比Nginx做到的彻底的模块化,可以轻易的通过开发自己的模块来改变或者实现相关功能,这个haproxy是不具备的。

从开发社区来说,Nginx也比Haproxy好太多,Haproxy虽然社区历史更久,但是一直都是不愠不火,贡献者因为原作者的严格的控制,一直都很少,再加上没有module开发功能,所以吸引的开发者一直都不多。带来的问题就是版本更新慢,支持的新功能慢。HTTP2的开发完全靠原作者一个人,所以支持进度严重拖后。

这篇文章看起来好像是变成了对haproxy吐槽,但是因为在工作中接触这两个东西实在太多,而且是进行深度二次开发,所以自认为还是有一定的了解的。从目前来看,如果haproxy不能更开放招募更多的贡献者,不能彻底修改架构支持module开发,是无法比拟NGINX的。

另外Haproxy优势一点的就是免费版的功能比Nginx免费版的更实惠。对于小又穷的站点的确是个好处。

nginx的原理

轮询(Polling)是一种CPU决策如何提供周边设备服务的方式,又称"程序输入"(Programmed I/O)。轮询法的概念是:由CPU定时发出询问,依询问每一个周边设备是否需要其他服务,由即给予服务,服务结束后在问一个周边,接着不断周而复始。

通俗来讲,轮询是为了负载均衡让不是一个的服务器一起工作,有点像是个组合一起出动,提高做事效率,然而也要合理分工(比如种树,有挖坑的,有放树的,有埋坑的,有浇水的分工合作缺一不可,也可以一个人把这些都做了,那就有些累了。有资源可用为什么不用呢是吧。)我是这样理解的也不知道合不合理,理解尚浅,欢迎知道的大神指点一二。

nginx是怎么工作的

简单地说,云计算其实就是一种通过虚拟化技术实现大规模计算的架构和方法。在云计算中,资源和功能都以服务的方式提供出来供用户使用。举个例子来讲,amazon这样的电子商务网站每天需要处理数百万计的请求和事务,如何保证处理能力,如何保证存储,又如何保证这些能够以简单的方式以及良好的性能来完成呢?

虚拟化是关键。其实虚拟化并不局限于VMware或者Xen提供的这种运行虚拟机的服务器虚拟化技术。大家熟悉的Java Virtual Machine, Hadoop Distributed File System, 虚拟内存等其实都是不同种类的虚拟化技术。将资源以抽象的方式或者逻辑的方式进行表示就是虚拟化。单个服务器的资源终归有限,通过虚拟化可以将不同服务器的资源以统一的整体的形式进行提供,从而让用户感觉拥有一个超大超强的服务器。举一个例子,现在热火朝天的Hadoop其实就是一个计算能力虚拟化的绝佳例子。Hadoop通过Map将一个大的任务分解为许许多多个小的任务,这些小的任务分配给在不同服务器上面的Hadoop服务实例来计算,计算出来中间结果,最后通过reduce方法将结果集进行合并。对于计算任务的请求者而言,他不需要看到背后有多少个Hadoop实例集中了多少台服务器的计算能力执行计算任务,感觉到是那个”强大无比“的电脑的超高处理能力。

信息技术其实一直围绕着3个主题在转,那就是”计算“、”存储“和”通信“。对应着这些主题已经有很多的云计算产品了:在计算方面,有Amazon EC2, Google App Engine等;在存储领域,有Amazon S3, mozy等;在消息通信方面有Amazon SQS等。

那么在中国到底谁需要云计算呢? 我觉得资金紧张的小公司需要,因为用了云计算就可以节约设备的采购成本;数据中心需要,电能消耗是数据中心成本的一个大块,通过云计算可以有效提高资源利用率,减少电能浪费;大公司也需要,因为像IBM这样的公司内部有着数以万计的服务器,同样存在资源利用率的问题。其实,我们普通人的日常生活也离不开云计算,比如越来越多的人通过手机访问搜索、导航等各种各样的互联网服务,云计算可以保证服务质量,让我们真正乐在其中。

nginx实现原理

Nginx负载均衡的原理是根据请求的负载大小及服务器的可用性,将客户端请求分发到多个服务器上进行处理,以提高资源利用率和系统的可用性。具体来说,Nginx作为反向代理服务器,通过配置upstream模块进行负载均衡,根据配置的算法(如轮询、权重、IP hash等)将请求分发到指定的服务器上。同时,Nginx还可以实现基于健康检查机制的动态负载均衡,通过定期检查服务器的可用性,将请求分发到可用的服务器上,提高系统的可用性。此外,Nginx还支持对HTTP请求进行流量控制和限速,以及基于HTTP协议的会话保持等功能,为高负载、高并发情况下的服务提供高效、稳定的解决方案。

本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.

本文链接:https://www.xibujisuan.cn/98785034.html