前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP中间件服务优先选择Nginx,why?

HTTP中间件服务优先选择Nginx,why?

原创
作者头像
Hellboycc
修改2020-12-28 11:39:15
4550
修改2020-12-28 11:39:15
举报

一、什么是中间件服务

首先我们来看一张图

没有中间件.png
没有中间件.png

图中一共有A、B、C、D四个应用,对外分别提供4种服务,此时B应用与C应用之间直接调用,A、B、C、D4个应用与操作系统之间直接交互,随着应用数量越来越多,就会导致层次化的应用不够隔离,服务之间耦合程度高,因此我们需要有一个东西来为我们代理和处理相关的一些通用请求,而只让应用处理相关的业务逻辑,这时就出现了一个叫做中间件的东西,如下图

引入中间件.png
引入中间件.png

当web请求进来,首先由中间件接收和处理请求,再分发给对应的应用进行逻辑业务处理,或者由中间件直接调用操作系统将结果返回给请求,多个应用之间有依赖关系时,也是通过中间件去接收和分发请求处理,这样在大型网站中,由中间件将各应用串联起来,使得网站业务层次很高,维护起来也较为方便。

二、什么是Nginx

以下内容来源于百度百科:

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

从上面这段话的描述中可以看出,Nginx是一个web服务器,同时也一个反向代理服务器,并发能力强且开源,在国内有很多大厂都在使用,众所周知,作为web服务器,除了Nginx以外,还有比如Apache、IIS、GWS等,为什么现在大厂都比较青睐使用Nginx作为中间件服务呢?

三、Nginx作为HTTP中间件服务优势

  • 采用IO多路复用epoll模型 Nginx作为一个web服务,是运行在操作系统层之上的,对于每一次Nginx需要处理的前端请求或者任务都会通过操作系统的内核去驱动对应的硬件进行工作,而epoll模型就是Linux操作系统中一个较新的、高效处理IO复用的内核模型,整个架构如下图所示
nginx使用epoll模型.png
nginx使用epoll模型.png

通常客户端发起请求,web服务器则会响应对应请求,对于Web服务器接收层面来说,实际就是需要处理一个socket流,当有多个客户端发起请求时,web服务器就需要处理多条socket流,与之伴随的就是要处理多条IO流,当线程或者进程对IO流处理不及时时,就会出现阻塞的现象,而Nginx就是采用epoll模型用来实现IO复用,消除IO阻塞,提高并发效率。

  • CPU亲和 目前大多数服务器都支持多核cpu,Nginx会将worker进程和cpu核心进行绑定,把每个worker进程固定在一个cpu核上执行,减少cpu自动切换带来的Cache Miss,从而获取更好的性能。
nginx cpu亲和.png
nginx cpu亲和.png
  • sendfile机制 在早期的HTTP服务器中传输静态文件,整个请求处理流程如下图
未使用sendfile机制.png
未使用sendfile机制.png

当我们请求一个文件时,整个流程会经过操作系统的内核空间和用户空间,最终达到socket,再传递response给到用户,对于上述处理过程,需要经过内核空间和用户空间,对操作系统而言会发生多次的切换操作,我们知道对于静态文件而言其实是不需要经过用户空间的大量逻辑处理操作,直接就可以通过内核空间进行传输,而Linux在2.2版本后支持零拷贝传输这种模式,sendfile正是利用了这种模式,整个处理流程如下图

使用sendfile机制.png
使用sendfile机制.png

这样静态文件传输直接通过内核空间,传递到socket,然后再response给到用户,提高了处理效率。

四、Nginx应用场景

从上面提到的Nginx作为HTTP中间件服务的优势不难看出,Nginx可以胜任以下几种场景

  • 静态资源服务器,CDN
  • 动态web服务器
  • 缓存服务

五、总结

通过以上分析和介绍,相信大家对Nginx的优势和应用场景有了更进一步了解,在以后业务架构的HTTP中间件选型中,能正确、合理的进行选择。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是中间件服务
  • 二、什么是Nginx
  • 三、Nginx作为HTTP中间件服务优势
  • 四、Nginx应用场景
  • 五、总结
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档