新闻动态

Nginx:nginx服务器的整体架构详解

发布日期:2021-01-07 22:25 | 文章来源:YINGSOO

  【温馨提醒】文章内容仅供参考,海外服务器租用\托管方案,请咨询YINGSOO客服,24小时免费电话400-630-3752

  【热门主机】YINGSOO云服务器韩国云服务器推荐香港云服务器租用云服务器 日本

  【热搜问题】海外云主机租用哪家好?海外云主机好在哪?

Nginx

  引言:众所周知,nginx 服务器是一个高性能的 web 和反向代理服务器。nginx 在激烈的 web 服务器竞争中依旧保持良好的发展势头,一度成为 web 服务器市场的后期之秀,这一切跟 nginx 的架构设计是分不开的。

  一、nginx 模块化设计

  高度模块化的设计是 nginx 的架构基础。nginx 服务器被分解为多个模块,每个模块就是一个功能模块,只负责自身的功能,模块之间严格遵循“高内聚,低耦合”的原则。

  核心模块

  核心模块是 nginx 服务器正常运行必不可少的模块,提供错误日志记录、配置文件解析、事件驱动机制、进程管理等核心功能。

  标准 Http 模块

  标准 Http 模块提供 Http 协议解析相关的功能,如:端口配置、网页编码设置、Http 响应头设置等。

  可选 Http 模块

  可选 Http 模块主要用于扩展标准的 Http 功能,让 nginx 能处理一些特殊的服务,如:Flash 多媒体传输、解析 geoip 请求、ssL 支持等。

  邮件服务模块

  邮件服务模块主要用于支持 nginx 的邮件服务,包括对 pop3 协议、imAp 协议和 smtp 协议的支持。

  第三方模块

  第三方模块是为了扩展 nginx 服务器应用,完成开发者自定义功能,如:Json 支持、Lua 支持等。

  二、nginx 请求处理方式

  nginx 是一个高性能的 web 服务器,能够同时处理大量的并发请求。它结合多进程机制和异步机制,异步机制使用的是异步非阻塞方式,接下来就给大家介绍一下 nginx 的多线程机制和异步非阻塞机制。

  多进程

  服务器每当收到一个客户端时。就有服务器主进程(master process)生成一个子进程(worker process)出来和客户端建立连接进行交互,直到连接断开,该子进程就结束了。使用进程的好处是各个进程之间相互独立,不需要加锁,减少了使用锁对性能造成影响,同时降低编程的复杂度,降低开发成本。其次,采用独立的进程,可以让进程互相之间不会影响,如果一个进程发生异常退出时,其它进程正常工作,master 进程则很快启动新的 worker 进程,确保服务部中断,将风险降到最低。缺点是操作系统生成一个子进程需要进行内存复制等操作,在资源和时间上会产生一定的开销;当有大量请求时,会导致系统性能下降。

  异步非阻塞

  每个工作进程使用异步非阻塞方式,可以处理多个客户端请求。当某个工作进程接收到客户端的请求以后,调用 io 进行处理,如果不能立即得到结果,就去处理其他的请求(即为非阻塞);而客户端在此期间也无需等待响应,可以去处理其他事情(即为异步);当 io 返回时,就会通知此工作进程;该进程得到通知,暂时挂起当前处理的事务去响应客户[台湾服务器租用]端请求。

  三、nginx 事件驱动模型

  在 nginx 的异步非阻塞机制中,工作进程在调用 io 后,就去处理其他的请求,当 io 调用返回后,会通知该工作进程。对于这样的系统调用,主要使用 nginx 服务器的事件驱动模型来实现。

  如上图所示,nginx 的事件驱动模型由事件收集器、事件发送器和事件处理器三部分基本单元组成。其中,事件收集器负责收集 worker 进程的各种 io 请求,事件发送器负责将 io 事件发送到事件处理器,而事件处理器负责各种事件的响应工作。

  事件发送器将每个请求放入一个待处理事件的列表,使用非阻塞 i/o 方式调用“事件处理器”来处理该请求。其处理方式称为“多路 io 复用方法”,常见的包括以下三种:select 模型、poll 模型、epoll 模型。

  针对上面的技术我特意整理了一下,有很多技术不是靠几句话能讲清楚,所以干脆找朋友录制了一些视频,很多问题其实答案很简单,但是背后的思考和逻辑不简单,要做到知其然还要知其所以然。如果想学习Java工程化、高性能及分布式、深入浅出。微服务、spring,mybatis,netty源码分析的朋友可以加我的Java进阶群:433540541,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

  四、nginx 设计架构

  nginx 服务器使用 master/worker 多进程模式。多线程启动和执行的流程如下:主程序 master process 启动后,通过一个 for 循环来接收和处理外部信号;主进程通过 fork() 函数产生子进程,每个子进程执行一个 for 循环来实现 nginx 服务器对事件的接收和处理。

  一般推荐 worker 进程数与 cpu 内核数一致,这样一来不存在大量的子进程生成和管理任务,避免了进程之间竞争 cpU 资源和进程切换的开销。而且 nginx 为了更好的利用多核特性,提供了 cpu 亲缘性的绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来 cache 的失效。

  对于每个请求,有且只有一个工作进程对其处理。首先,每个 worker 进程都是从 master 进程 fork 过来,在 master 进程里面,先建立好需要 listen 的 socket(listenfd)之后,然后再 fork 出多个 worker 进程。所有 worker 进程的 listenfd 会在新连接到来时变得可读,为保证只有一个进程处理该连接,所有 worker 进程在注册 listenfd 读事件前抢 accept_mutex,抢到互斥锁的那个进程注册 listenfd 读事件,在读事件里调用 accept 接受该连接。当一个 worker 进程在 accept 这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。我们可以看到,一个请求,完全由 worker 进程来处理,而且只在一个 worker 进程中处理。

  在 nginx 服务器的运行过程中,主进程和工作进程需要进程交互。交互依赖于 socket 实现的管道来实现。

  master-worker 交互

  这条管道与普通的管道不同,它[法国独立服务器]是由主进程指向工作进程的单向管道,包含主进程向工作进程发出的指令,工作进程 id 等;同时主进程与外界通过信号通信;每个子进程具备接收信号,并处理相应的事件的能力。

  worker-worker 交互

  这种交互是和 master-worker 交互是基本一致的,但是会通过主进程。工作进程之间是相互隔离的,所以当工作进程 w1 需要向工作进程 w2 发指令时,首先找到 w2 的进程 id,然后将正确的指令写入指向 w2 的通道。w2 收到信号采取相应的措施。

  五、总结

  通过这篇文章,我们对 nginx 服务器的整体架构有了一个整体的认识。包括其模块化的设计、

  多进程和异步非阻塞的请求处理方式、事件驱动模型等。通过这些理论知识,对于我们以后学习 nginx 的源码有很大的帮助;也推荐大家多看看 nginx 的源码,才能更好地领悟 nginx 的设计思想。

  

  香港服务器网速&下载速度解析

  最近经常有些客户问我,我租的香港服务器带宽是3M,是不是下载速度就应该是3M/s,本公司在此只想告诉你,不是,你完全不了解香港服务器宽带与下载速度之间的关系及换算方法,下面我教大家一个换算的方法。

  香港服务器宽带与下载速度的换算方法:宽带*1024/8,也就是说,如果你的带宽是5M,那么理论上的下载的速度就应该为,5*1024/8=640KB/s,可是事实上,由于在传输的过程中会有一些损耗,一般都只能达到80%-85%左右,当然如果你测试后的下载速[美国cn2高防服务器]度如果能是上面换算方法的20%-30%的话,那就说明你的带宽有问题,跑不满,不是独享的。如果是在高峰期测试就更加直观了,共享的带[香港机房服务器]宽会变得非常慢,所以大家尽量在选择香港服务器租用或者香港服务器托管的时候,尽量先对服务器进行各种测试,以确保能满足自己的需求,当然,带宽越大,速度就越快,这点是毋庸置疑的。

  下面我再来给大家解释带宽的概念:

  共享峰值10M:一般在机柜交换机总口限制为10M,用户端口不做限制。独享3M:机柜交换机总口不做限制,用户端口做限制3M。打个比方:一个机柜一般一个24口交换机,按20台服务器计算,峰值10M,每台只能保证0.5M带宽,在实际使用中个别服务器由于业务量大或中毒造成挤占带宽,就无法保证其他服务器正常使用,如果按独享每台3M带宽算,一个交换机最大要提供60M给客户使用,这样可以保证每台服务器都正常使用。

  YINGSOO免费热线:400-630-3752

  热门文章:【英国云主机在配置上该如何选择】【衡阳高防服务器】【vps海外服务器】【香港游戏测试服务器怎么样】【国内免备案服务器是怎么一回事】【外贸软件服务器如何选择】【新加坡游戏服务器】【IDC行情】【便宜高防服务器】【湖北武钢大数据】【云服务器有什么好处】【游戏行业对台湾服务器的要求有哪些】【传奇服务器端】【云计算在医疗行业的六大重要优势】【站长主机】【ip租用】【Datanode节点】【站群怎么做看完别再说你不会做站群】【跨境电商】【YINGSOO云的高可用性指什么】【传奇手游gm服务器】【韩国高速服务器租用技巧】【维护香港服务器的方法】【云主机试用三天】【物理机优惠】【特价云服务器】【CC高防服务器】【高防主机是什么】【100M大带宽】【共享虚拟主机不利于seo吗

  韩国主机,选知名品牌YINGSOO

  9年韩国主机业务运营经验,1200家企业客户共同选择.韩国Korea Telecom机房核心合作伙伴,机房带宽资源充足,到国内速度平均在80ms左右.

  https://www.yingsoo.com/products/cloud-kr.html

  YINGSOO独享美国主机3天免费试用. 海外云主机品牌

  好网络,不怕晒!独享美国主机免费试用,自主平台更可靠,海外云服务品牌2019年度独享美国主机销量再度破表,超过1200家企业共同的选择

  https://www.yingsoo.com/products/cloud-us.html

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部