首先我们来看一张图
图中一共有A、B、C、D四个应用,对外分别提供4种服务,此时B应用与C应用之间直接调用,A、B、C、D4个应用与操作系统之间直接交互,随着应用数量越来越多,就会导致层次化的应用不够隔离,服务之间耦合程度高,因此我们需要有一个东西来为我们代理和处理相关的一些通用请求,而只让应用处理相关的业务逻辑,这时就出现了一个叫做中间件的东西,如下图
当web请求进来,首先由中间件接收和处理请求,再分发给对应的应用进行逻辑业务处理,或者由中间件直接调用操作系统将结果返回给请求,多个应用之间有依赖关系时,也是通过中间件去接收和分发请求处理,这样在大型网站中,由中间件将各应用串联起来,使得网站业务层次很高,维护起来也较为方便。
以下内容来源于百度百科:
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
从上面这段话的描述中可以看出,Nginx是一个web服务器,同时也一个反向代理服务器,并发能力强且开源,在国内有很多大厂都在使用,众所周知,作为web服务器,除了Nginx以外,还有比如Apache、IIS、GWS等,为什么现在大厂都比较青睐使用Nginx作为中间件服务呢?
通常客户端发起请求,web服务器则会响应对应请求,对于Web服务器接收层面来说,实际就是需要处理一个socket流,当有多个客户端发起请求时,web服务器就需要处理多条socket流,与之伴随的就是要处理多条IO流,当线程或者进程对IO流处理不及时时,就会出现阻塞的现象,而Nginx就是采用epoll模型用来实现IO复用,消除IO阻塞,提高并发效率。
当我们请求一个文件时,整个流程会经过操作系统的内核空间和用户空间,最终达到socket,再传递response给到用户,对于上述处理过程,需要经过内核空间和用户空间,对操作系统而言会发生多次的切换操作,我们知道对于静态文件而言其实是不需要经过用户空间的大量逻辑处理操作,直接就可以通过内核空间进行传输,而Linux在2.2版本后支持零拷贝传输这种模式,sendfile正是利用了这种模式,整个处理流程如下图
这样静态文件传输直接通过内核空间,传递到socket,然后再response给到用户,提高了处理效率。
从上面提到的Nginx作为HTTP中间件服务的优势不难看出,Nginx可以胜任以下几种场景
通过以上分析和介绍,相信大家对Nginx的优势和应用场景有了更进一步了解,在以后业务架构的HTTP中间件选型中,能正确、合理的进行选择。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。