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

news2024/10/7 8:28:21

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工作完毕之后,直接当掉这个子进程,更换新的子进程,使用新的规则。
流水线,指的是一个用户请求,由多个模块组合各自的功能依次实现完成的。比如:第一个模块只负责分析请求首部,第二个模块只负责查找数据,第三个模块只负责压缩数据,依次完成各自工作。来实现整个工作的完成。

更多C++后台开发技术点知识内容包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,MongoDB,ZK,流媒体,音视频开发,Linux内核,TCP/IP,协程,DPDK多个高级知识点。

C/C++Linux服务器开发高级架构师/C++后台开发架构师免费学习地址

【文章福利】另外还整理一些C++后台开发架构师 相关学习资料,面试题,教学视频,以及学习路线图,免费分享有需要的可以点击领取

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,它的总体工作流程,如下所示。

86a1b7327abd5478ae65f9df7f304f4c.jpeg

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

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

Nginx 场景

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

入口负载均衡架构

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

内部负载均衡架构

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/195613.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四十、Kubernetes1.25中安全认证详解

1、访问控制概述Kubernetes作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。所谓的安全性其实就是保证对Kubernetes的各种客户端进行认证和鉴权操作。客户端在Kubernetes集群中,客户端通常有两类:User Account&#xff1a…

视频剪辑必备的6个免费素材库~

视频剪辑必备素材,那自然是视频、配乐、音效啦,但最重要的还是内容,这些素材只是点缀。 那要如何获取素材?很多朋友应该都知道,网上很多素材版权不明确,使用不当就会造成侵权,找素材成为了一大…

电脑重装系统装不了如何解决

重装系统装不了如何解决?当电脑出现故障时,大部分人都会选择重装系统来解决这个问题,但是有人出现系统重装不了,下面小编就来为大家解决系统重装不了的问题。 工具/原料: 系统版本:win7 品牌型号&#xff…

为什么 B 站的弹幕可以不挡人物?

那天在 B 站看视频的时候,偶然发现当字幕遇到人物的时候就被裁切了,不会挡住人物,觉得很神奇,于是决定一探究竟。 高端的效果,往往只需要采用最朴素的实现方式,忙碌了两个小时,陈师傅打开了 F1…

Spring Boot(二):第一种导入依赖方式的实战案例

文章目录 第一种导入依赖方式的实战案例 一、导入依赖 二、依赖传递结构图 三、开发案例代码 第一种导入依赖方式的实战案例 一、导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0…

Android开发——HOOK技术【解析】

1. 什么是 Hook Hook 英文翻译过来就是「钩子」的意思&#xff0c;那我们在什么时候使用这个「钩子」呢&#xff1f;在 Android 操作系统中系统维护着自己的一套事件分发机制。应用程序&#xff0c;包括应用触发事件和后台逻辑处理&#xff0c;也是根据事件流程一步步地向下执…

前端算法之二分查找

在数组中查找指定元素,如果存在就返回它的位置,如果不存在,就返回-1。 这是一道非常经典的算法题&#xff0c;考的就是二分查找算法&#xff0c;首先分析二分查找的思路&#xff1a; 假设一个数组为 [3,5,19,22,25,33,45,47,57,66,71,78]&#xff08;已经从小到大排好序&…

dapr本地托管的服务调用体验与Java SDK的Spring Boot整合

1 简介 之前在文章《dapr入门与本地托管模式尝试》中介绍了dapr和本地托管&#xff0c;本文我们来介绍如果在代码中使用dapr的服务调用功能&#xff0c;并把它整合到Spring Boot中。 Dapr服务调用的逻辑如下&#xff1a; 本次实验会创建两个服务&#xff1a; pkslow-data&am…

2023华数杯B题社会稳定预警首版思路

文章目录2023华数杯B题社会稳定预警首版思路B题题目如下&#xff1a;2023华数杯B题社会稳定预警首版思路 这个思路对下面这五问有了非常详细的思路&#xff0c;并且提供了支持材料。对本次的比赛进度有很大的帮助。 思路下载&#xff1a; https://math.jobpig.top/?p237 B题题…

CentOS7升级OpenSSH9.2编译rpm包

以下步骤在联网的Centos 7环境下执行 1、 下载用于编译openssh的rpm包的工具 yum install -y rpm-build gcc gcc-c glibc glibc-devel openssl-devel openssl prce pcre-devel zlib zlib-devel make wget krb5-devel pam-devel libX11-devel xmkmf libXt-devel initscripts lib…

二、第二天

977.有序数组的平方力扣题目链接给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;…

jackon.date-format 不生效

文章目录前言一、可能原因二、解决方案2.1、升级nacos&#xff08;可忽略&#xff09;2.2. 自定义日期反序列化格式总结前言 springboot 默认json 序列化使用jackon 正常配置jackon.date-formatyyyy-MM-dd HH:mm:ss 即可格式化日期格式&#xff0c;但是由于项目引用各种jar和拦…

直播 | StarRocks 实战系列第一期--部署导入

你今年的 Flag 定了吗&#xff1f;兔年开工&#xff0c;仪式感就从立 Flag 开始&#xff01;在技术上&#xff1a;兔飞猛进&#xff0c;能力吊打同行&#xff1b;在工作上&#xff1a;兔步青云&#xff0c;升职加薪获得领导赏识&#xff1b;在学习上&#xff1a;前兔无量&#…

总结继承和多态的一些问题

在学习了继承和多态后&#xff0c;本人有以下容易造成混乱的点以及问题&#xff1a; 1.区分虚表和虚基表 虚表即虚函数表&#xff0c;存储的是虚函数的地址。另外&#xff1a;虚表是在编译阶段就生成的&#xff0c;一般存在于常量区&#xff08;代码段&#xff09;。 虚基表…

Apache Spark 机器学习 特征转换 2

PCA&#xff08;Principal Component Analysis&#xff09; 该转换器是主成分分析方法&#xff0c;是统计学领域中对数据样本的正相关的转换与分析方法&#xff0c;在一批具有相关性的数据样本的数据集中&#xff0c;删除多余的重复的相关变量&#xff0c;得到少量具有信息代表…

一刷代码随想录——贪心算法

1.理论基础通过局部最优&#xff0c;推出整体最优。2.分发饼干 455题目描述&#xff1a;假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们…

Softmax Classifier 多分类问题

文章目录8、Softmax Classifier 多分类问题8.1 Revision8.2 Softmax8.2.1 Design8.2.2 Softmax Layer8.2.3 NLLLoss vs CrossEntropyLoss8.2.4 Mini-Batch8.3 MNIST dataset8.3.1 Import Package8.3.2 Prepare Dataset8.3.3 Design Model8.3.4 Construct Loss and Optimizer8.3…

农业气象站—提供多元化数据

中国气象局应急减灾与公共服务司司长王志华曾表示&#xff0c;“农业气象灾害风险预警是守住粮食安全底线的关键一环。”在全球新冠肺炎疫情常态化的形势下&#xff0c;我国将粮食安全摆在了更突出的位置。 粮食在我国具有重要的战略地位&#xff0c;自从建国以来&#xff0c;…

功能测试(环境搭建)

目录 1.功能测试流程&#xff1a; 2.环境搭建&#xff08;源码&#xff09; 2.1.环境说明&#xff08;后台&#xff09;&#xff1a; 2.2.代码仓库获取代码 2.3.项目环境搭建 2.4后台部署 3.环境搭建&#xff08;war包&#xff09; 1.功能测试流程&#xff1a; 2.环境搭建…

【C++初阶】八、STL---list(总)|list的介绍|list的使用

目录 一、list的介绍 二、list的使用 2.1 Construct 2.2 operator 2.3 Iterators 2.4 Capacity 2.5 Element access 2.6 Modifiers 2.7 Operations 一、list的介绍 有数据结构作为基础&#xff0c;STL 上手很快&#xff0c;学习成本也低&#xff0c;本文也是讲解 list…