写点什么

醍醐灌顶 Nginx 原理和架构

用户头像
hanaper
关注
发布于: 5 小时前
醍醐灌顶Nginx 原理和架构

Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。

Nginx 的整体架构



Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处理网络请求与响应。

master 进程主要用来管理 worker 进程,具体包括如下 4 个主要功能:

  • 1.接收来自外界的信号。

  • 2.向各 worker 进程发送信号。

  • 3.监控 woker 进程的运行状态。

  • 4.当 woker 进程退出后(异常情况下),会自动重新启动新的 woker 进程。

woker 进程主要用来处理基本的网络事件:

  1. 多个 worker 进程之间是对等且相互独立的,他们同等竞争来自客户端的请求。

  2. 一个请求,只可能在一个 worker 进程中处理,一个 worker 进程,不可能处理其它进程的请求。

  3. worker 进程的个数是可以设置的,一般我们会设置与机器 cpu 核数一致。同时,nginx 为了更好的利用多核特性,具有 cpu 绑定选项,我们可以将某一个进程绑定在某一个核上,这样就不会因为进程的切换带来 cache 的失效。

Ngnix 是如何实现高性能的?

事件驱动模型

基于异步及非阻塞的事件驱动模型,可以说是 Nginx 得以获得高并发、高性能的关键因素。这一点上和 Netty 类似,底层都是使用的 BSD kqueue、Linux epoll 及 Solaris event ports。

多进程机制

使用多进程的好处有两点:

  • 进程之间不共享资源,不需要加锁,减少了使用锁对性能造成的影响,同时降低编程的复杂度,降低开发成本。

  • 采用独立的进程,可以让进程互相之间不会影响,如果一个进程发生异常退出时,其它进程正常工作,master 进程则很快启动新的 worker 进程,确保服务不会中断,从而将风险降到最低。

内存池

为了避免出现内存碎片,减少向操作系统申请内存的次数、降低各个模块的开发复杂度,Nginx 设计了简单的内存池,它的作用主要是把多次向系统申请内存的操作整合成一次,这大大减少了 CPU 资源的消耗,同时减少了内存碎片。

模块化设计

高度模块化的设计是 Nginx 的架构基础。Openresty 就是在 Nginx 上引入了 lua 等第三方模块,使得扩展更加方便了。



更多 Nginx 免费视频教学资源

epoll的网络模型,从redis, memcached到nginx

如何来阅读nginx源码,填充技术来征服面试官

聊聊nginx深入了解的3个功能

聊聊大家都在用的nginx,源码从这里开始

抗击疫情,技术大复习,聊聊nginx的故事

网站被攻击了,nginx是不是该背这个锅

网络服务器模型,redis, memcached, nginx对比

公司服务器攻击了, nginx要不要背锅

从Nginx的“惊群”问题来看高并发锁方案

发布于: 5 小时前阅读数: 7
用户头像

hanaper

关注

还未添加个人签名 2018.05.07 加入

还未添加个人简介

评论

发布
暂无评论
醍醐灌顶Nginx 原理和架构