深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 深入浅出学习透析Nginx服务器的架构分析及原理分析「底层技术原理+运作架构机制」

Nginx再次回顾

也许你已经忘记了Nginx是做什么的?我来再次给你夯实一下概念。

多协议反向代理

Nginx是个高性能的Web和反向代理服务器及HTTP服务器,它能反向代理HTTP,HTTPS和邮件相关(SMTP,POP3,IMAP)的协议链接,还可以提供了负载均衡以及HTTP缓存。

它的功能特点

  • 功能丰富:优秀的反向代理功能和灵活的负载均衡策略
  • 异步事件模型:削减上下文调度的开销,提高服务器并发能力,官方数据每秒支持 5 万并发。
  • 模块化:具有良好的扩展性,可以通过模块方式进行功能扩展。
  • 高可靠性:主控进程和 worker 是同步实现的,一个 worker 出现问题,会立刻启动另一个 worker。
  • 内存低损耗:10000个keep-alive长连接,大致会消耗3MB左右的内存。

Ngnix高可用服务架构

分布式系统中,应用只部署一台服务器会存在单点故障,负载均衡同样有类似的问题。一般可采用主备或负载均衡设备集群的方式节约单点故障或高并发请求分流。

Ngnix 高可用,至少包含两个 Ngnix 服务器,一台主服务器,一台备服务器,之间使用 Keepalived 做健康监控和故障检测。开放 VIP 端口,通过防火墙进行外部映射。

主从模式

大多数场景下,Nginx采用一主多从的主从架构,如下图所示。


Nginx服务节点

Master节点负责范围
  • Master节点主要负责的作用只是启动worker,加载配置文件,负责系统的平滑升级。
  • Master节点不负责具体的工作,而是调用 worker 工作,他只是负责读取配置文件,因此当一个模块修改或者配置文件发生变化,是由 master 进行读取,因此此时不会影响到 worker 工作。
Worker节点负责范围
  • Worker节点被启动之后,负责一些Web最简单的工作,而其他的工作都是有worker 中调用的模块来实现的。模块之间是以流水线的方式实现功能的。
  • Master节点进行读取配置文件之后,不会立即的把修改的配置文件告知Worker。而是让被修改的Worker继续使用老的配置文件工作,当Worker工作完毕之后,直接当掉这个子进程,更换新的子进程,使用新的规则。

流水线,指的是一个用户请求,由多个模块组合各自的功能依次实现完成的。比如:第一个模块只负责分析请求首部,第二个模块只负责查找数据,第三个模块只负责压缩数据,依次完成各自工作。来实现整个工作的完成。

Nginx 通信模型采用 I/O 复用机制

  • 开发模型:epoll和kqueue。
  • 事件机制:kqueue、epoll、rt signals、/dev/poll 、event ports、select 以及 poll。

事件模型

Nginx支持如下处理连接的方法(I/O复用方法),这些方法可以通过use指令指定。

  • select - 标准方法。 如果当前平台没有更有效的方法,它是编译时默认的方法。你可以使用配置参数 —with-select_module 和 —without-select_module 来启用或禁用这个模块。
  • poll - 标准方法。 如果当前平台没有更有效的方法,它是编译时默认的方法。你可以使用配置参数 —with-poll_module 和 —without-poll_module 来启用或禁用这个模块。
  • kqueue - 高效的方法,使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X. 使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃。
  • epoll - 高效的方法,使用于Linux内核2.6版本及以后的系统。在某些发行版本中,如SuSE 8.2, 有让2.4版本的内核支持epoll的补丁。

支持的kqueue特性包括 EV_CLEAR、EV_DISABLE、NOTE_LOWAT、EV_EOF,可用数据的数量,错误代码.

支持sendfile、sendfile64 和 sendfilev文件AIO;DIRECTIO,支持Accept-filters 和 TCP_DEFER_ACCEP.

Nginx支持sendfile机制

一般情况下的数据处理模型和流程,如下所示。


  1. 用户将请求发给内核。
  2. 内核根据用户的请求调用相应用户进程,用户进程在处理时需要申请对应的资源。
  3. 用户进程需要把请求再次发给内核(进程没有直接IO的能力),由内核加载数据。
  4. 内核查找到数据之后,会把数据复制给用户进程,由用户进程对数据进行封装,交给内核。
  5. 内核在进行 tcp/ip 首部的封装,最后再发给客户端。

这个功能用户进程只是发生了一个封装报文的过程,却要绕一大圈, 所以有了Sendfile,它的总体工作流程,如下所示。



因此,Nginx引入了sendfile 机制,使得内核在接受到数据之后,不再依靠用户进程给予封装,而是自己查找自己封装,减少了一个很长一段时间的浪费,这是一个提升性能的核心点。

目前高并发的处理,一般都采用 sendfile 模式。通过直接操作内核层数据,减少应用与内核层数据传递

Nginx 场景

Ngnix 一般作为入口负载均衡或内部负载均衡,结合反向代理服务器使用。

入口负载均衡架构

Ngnix 服务器在用户访问的最前端。根据用户请求再转发到具体的应用服务器或二级负载均衡服务器(LVS)。


内部负载均衡架构

LVS 作为入口负载均衡,将请求转发到二级 Ngnix 服务器,Ngnix 再根据请求转发到具体的应用服务器。



相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
29天前
|
存储 安全 算法
服务器数据恢复—Raid磁盘阵列的安全性分析及常见故障
出于尽可能避免数据灾难的设计初衷,RAID解决了3个问题:容量问题、IO性能问题、存储安全(冗余)问题。从数据恢复的角度讨论RAID的存储安全问题。 常见的起到存储安全作用的RAID方案有RAID1、RAID5及其变形。基本设计思路是相似的:当部分数据异常时,可通过特定算法将数据还原出来。以RAID5为例:如果要记录两个数字,可以通过再多记录这两个数字的和来达到记录冗余性的目的。例如记录3和5,同时再记录这2个数字的和8。在不记得到底是几和5的情况下,只需要用8-5就可以算出这个丢失的数字了,其余情况依此类推。
|
2月前
|
Ubuntu 应用服务中间件 Linux
在Linux中,如何配置Web服务器(如Apache或Nginx)?
在Linux中,如何配置Web服务器(如Apache或Nginx)?
|
2月前
|
负载均衡 应用服务中间件 Linux
"揭晓nginx的神秘力量:如何实现反向代理与负载均衡,拯救服务器于水火?"
【8月更文挑战第20天】在Linux环境下,nginx作为高性能HTTP服务器与反向代理工具,在网站优化及服务器负载均衡中扮演重要角色。本文通过电商平台案例,解析nginx如何解决服务器压力大、访问慢的问题。首先介绍反向代理原理,即客户端请求经由代理服务器转发至内部服务器,隐藏真实服务器地址;并给出配置示例。接着讲解负载均衡原理,通过将请求分发到多个服务器来分散负载,同样附有配置实例。实践表明,采用nginx后,不仅服务器压力得到缓解,还提升了访问速度与系统稳定性。
56 3
|
2月前
|
前端开发 大数据 数据库
🔥大数据洪流下的决战:JSF 表格组件如何做到毫秒级响应?揭秘背后的性能魔法!💪
【8月更文挑战第31天】在 Web 应用中,表格组件常用于展示和操作数据,但在大数据量下性能会成瓶颈。本文介绍在 JavaServer Faces(JSF)中优化表格组件的方法,包括数据处理、分页及懒加载等技术。通过后端分页或懒加载按需加载数据,减少不必要的数据加载和优化数据库查询,并利用缓存机制减少数据库访问次数,从而提高表格组件的响应速度和整体性能。掌握这些最佳实践对开发高性能 JSF 应用至关重要。
45 0
|
2月前
|
存储 设计模式 运维
Angular遇上Azure Functions:探索无服务器架构下的开发实践——从在线投票系统案例深入分析前端与后端的协同工作
【8月更文挑战第31天】在现代软件开发中,无服务器架构因可扩展性和成本效益而备受青睐。本文通过构建一个在线投票应用,介绍如何结合Angular前端框架与Azure Functions后端服务,快速搭建高效、可扩展的应用系统。Angular提供响应式编程和组件化能力,适合构建动态用户界面;Azure Functions则简化了后端逻辑处理与数据存储。通过具体示例代码,详细展示了从设置Azure Functions到整合Angular前端的全过程,帮助开发者轻松上手无服务器应用开发。
16 0
|
2月前
|
应用服务中间件 Linux 网络安全
在Linux中,如何配置Apache或Nginx Web服务器?
在Linux中,如何配置Apache或Nginx Web服务器?
|
2月前
|
存储 负载均衡 应用服务中间件
FastDFS+Nginx:轻松搭建本地文件服务器
【8月更文挑战第19天】在现今互联网快速发展的时代,文件服务器作为支撑各种在线服务的重要基础设施,其稳定性和性能显得尤为关键。FastDFS作为一款开源的轻量级分布式文件系统,凭借其高效的文件管理功能,特别适合用于构建相册网站、视频网站等以文件为载体的在线服务。本文将详细介绍如何利用FastDFS和Nginx快速搭建一个本地文件服务器,为您的工作和学习提供技术支持。
134 0
|
16天前
|
缓存 前端开发 JavaScript
终极 Nginx 配置指南(全网最详细)
本文详细介绍了Nginx配置文件`nginx.conf`的基本结构及其优化方法。首先通过删除注释简化了原始配置,使其更易理解。接着,文章将`nginx.conf`分为全局块、events块和http块三部分进行详细解析,帮助读者更好地掌握其功能与配置。此外,还介绍了如何通过简单修改实现网站上线,并提供了Nginx的优化技巧,包括解决前端History模式下的404问题、配置反向代理、开启gzip压缩、设置维护页面、在同一IP上部署多个网站以及实现动静分离等。最后,附上了Nginx的基础命令,如安装、启动、重启和关闭等操作,方便读者实践应用。
206 84
终极 Nginx 配置指南(全网最详细)
|
4天前
|
JavaScript 应用服务中间件 开发工具
vue尚品汇商城项目-day07【53.nginx反向代理配置】
vue尚品汇商城项目-day07【53.nginx反向代理配置】
14 4
|
4天前
|
缓存 应用服务中间件 nginx
nginx如何配置?配置项都是什么意思?
nginx如何配置?配置项都是什么意思?
15 1
下一篇
无影云桌面