前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >初识Nginx(更新中)

初识Nginx(更新中)

作者头像
Homqyy
发布2023-03-06 13:24:01
2760
发布2023-03-06 13:24:01
举报
文章被收录于专栏:知行合一知行合一

Nginx是谁?它是反向代理服务器的代表之一,是高性能和模块化开发的典范,更是我的老师。

认识它,你将免费获得“最佳的代理体验”、“优雅的代码规范”、“极致的性能设计”和“优秀的模块思想”,还有无数个值得品味的编程细节。

那么在正式介绍Nginx给大家认识前,我简单介绍一下整个相亲过程,我们将从以下4个角度认识Nginx:

  • 进程模型
  • 体系结构
  • 安装和部署
  • 基本使用

进程模型

Nginx进程模型图

如上所示,Nginx设计上将程序分为4类,分别为:

  • Master:主进程,是其他3类程序的父进程,负责监控并管理其他进程的运行状态。比如:
    • 发现“Worker 1”进程挂死后,重新拉起“Worker 1”进程。
    • “系统管理员”发送退出命令给“Master”,“Master”去指示所有受控的程序退出。
  • 管理进程:控制面程序,向上提供北向管理接口,向下负责控制“工作进程”。
  • 工作进程:数据面程序,负责执行特定任务的进程,
  • 自定义进程:Nginx提供一种方法供开发者以模块的形式去自定义自己的程序,从而不再被局限于Nginx提供的固定进程。

这样就很清晰了,“系统管理员”通过“Master”来控制Nginx的启动、停止、重载、升级等,而“管理员”或“管理程序”则通过“管理进程”来管理业务行为。换言之,“Master”是老板,“管理进程”是管理层领导,而“工作进程”则是基层员工,最后的“自定义进层”则有点像是外包。

看到这里,相信会引发一定的争议。因为看过源代码的人可能会说:““Nginx”没有“管理进程”,更没有管控数三面分离这一说,有的只是“Master-Worker”模型”。

其实,如果我们想真正的去看清一件事物,是不能仅留存于过去的状态,而应当适当的带入未来的思想,否则只会人云亦云,永远寄于事物之下。换言之,Nginx也是经过发展后的产物,它也是有过程和变化的属性的,如果你不能充分认识其历史性并时刻思考其发展趋势,那么就永远也无法掌控它,将永远停留在使用中。

我们将管控数三面分离带入到Nginx中是顺滑的,完全可行的一步:

  1. ”工作进程“中的各个Worker是工作对等体(worker跟worker之间没有区别,一个worker所作的事情,在另一个worker都能完整复刻和承担),仅是根据配置或指令去处理数据。正因这个性质,worker在异常退出后的重启是无需特殊处理的,这也符合了”数据面“定义和要求。
  2. 我们只需要在”工作进程”与“管理进程”中引入IPC,并将控制过程移交给“管理进程“就可以实现”管理进程“控制”工作进程“的效果,也就是”控制面“与”数据面“的分离。
  3. 紧接着,”管理进程“只要提供北向API即可实现管控分离,从而达到管控数三面分离。这时我们便可以轻而易举的实现对Nginx进行实时控制,比如:获取统计信息、调整负载均衡算法等。

体系结构

从进程模型中我们能看清楚worker的”姿色“,但无法看到worker的”资产“,接着我们以如下的体系结构图来认识Nginx:

Nginx体系结构图

如上所示,Nginx可分为“业务”、“增强能力”、“基础能力”和“管理面”四个部分:

  • 业务:提供业务能力的一个集合。其中“HTTP(代理)”是Nginx最出众的业务能力,表现在功能模块众多,业务流程清晰,扩展能力强。同时提供了HTTP代理和HTTP服务两种业务。
  • 增强能力:提供处置复杂的开发需求和特殊的功能需求的一个集合。
  • 基础能力:提供实现代理业务需求所需的基础能力的一个集合。
  • 管理面:提供用于管理Nginx能力的一个集合。图中“自定义参数”是源于Nginx整个开发思想就是,高可配置,因此会以配置文件的形式暴露出各种参数,供使用者基于部署环境和设备去定制自己的Nginx。

从这里可以清晰的看出,Nginx的业务能力主要有三大块(源生能力,但在此架构上是可以继续扩展代理能力的),分别为:“Stream代理”、“HTTP代理”和“Mail代理”。

STREAM代理

顾名思义“流代理”,即流量代理。其代理应用层以下的业务流量,是应用代理能力的补充。最直接就是传输层的TCP和UDP代理,同时也支持“Proxy protocol”(v1和v2)。如何理解流代理,最简约的表达就是“传输层”代理,不考虑数据的应用特征,只进行数据代理/转发,同时在需要时提供“会话层”和“表示层”的支撑,比如TLS加密,这也是源生Nginx的“Stream代理”中携带的能力,基于此思想,我们也能在需要的时候去扩展其“传输能力”、“会话能力”和“表示能力”,完成自身的定制化开发。其协议栈如下所示:

Stream协议栈图

从图中可以直接看出“Stream代理”的完整协议栈,正如前面所说,我们可以根据需要去开阔能力,比如在“传输协议”中加入“SOCK5协议”即可丰富Stream的协议代理能力;在UDP之上中加入“KCP(会话协议框架)”即可增强UDP的代理能力,提供重视时效性的传输需求的流代理业务。

HTTP代理(0%)

Mail代理(0%)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年3月18日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 进程模型
  • 体系结构
    • STREAM代理
      • HTTP代理(0%)
        • Mail代理(0%)
        相关产品与服务
        负载均衡
        负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档