https://cloud.tencent.com/developer/article/1886166?areaSource=&traceId=

这些天呐,实在是给我看晕了。起因自然还是对 nginx 不是很了解哈。那我是来看什么的?一开始就从细节出发,有点管中窥豹,不得全貌了。

图来自网络


架构设计

进程模型

预定:后边专门出一篇关于 nginx进程模型源码分析。这些概念都好记,也好理解,但是里面有的地方我想不到该怎么写,好吧,就是异步,异步不会写,所以要去看一下大神是怎么写的。

1、nginx在启动后,在unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。 2、nginx采用了异步非阻塞的方式来处理请求。

3、线程只有一个,所以同时能处理的请求只有一个,只是在请求间进行不断地切换而已,切换也是因为异步事件未准备好,而主动让出的。这里的切换是没有任何代价。 与多线程相比,这种事件处理方式是有很大的优势的,不需要创建线程,每个请求占用的内存也很少,没有上下文切换,事件处理非常的轻量级。并发数再多也不会导致无谓的资源浪费(上下文切换)。更多的并发数,只是会占用更多的内存而已。


模块化结构体系

预定:这个要出好几篇了,核心模块、事件模块、Stream模块,以及它们下属的技术点可能也要铺开,估计五六篇吧。

其他模块视情况而定吧。

(被遮住的是 ngx_conf_module)

① 核心模块(core)

该模块提供了 Nginx 服务运行的基本功能,如 Nginx 的进程管理、CPU 亲缘性、内存管理、配置文件解析、日志等功能。

② 事件模块(event)

该模块负责进行连接处理,提供对不同操作系统的 I/O 网络模型支持和自动根据系统平台选择最有效 I/O 网络模型的方法。

③ HTTP模块(http)

该模块提供 HTTP 处理的核心功能和部分功能模块,HTTP 核心功能维护了 HTTP 多个阶段的工作流,并实现了对各种 HTTP 功能模块的管理和调用。

④ Mail模块(mail)

该模块实现邮件代理功能,代理 IMAP、POP3、SMTP 协议。

⑤ Stream模块(stream)

该模块提供 TCP/UDP 会话的代理和负载相关功能。

⑥ 第三方模块


nginx的框架设计就这么简单,一目了然。 nginx的框架设计就这么难,这一点点东西居然要撑起数万乃至数十万的并发。


工作流程

晓得个框架设计明显是不够的,框架设计可以说是骨架,皮肉就是里面那些模块了,那这些骨架和皮肉又是怎么盘活的呢?

Master 初始化

worker初始化

upstream工作流程

大概也就门清儿了,先学习进程模型、再进入几个核心模块看框架,最后再收了设计比较好的数据结构、内存池、缓冲区以及一些问题解决方案。

话说我该去处理一下我的source insight了,又过期了。

[转帖]Nginx(2):架构设计与工作流程的更多相关文章

  1. Apache Druid 的集群设计与工作流程

    导读:本文将描述 Apache Druid 的基本集群架构,说明架构中各进程的作用.并从数据写入和数据查询两个角度来说明 Druid 架构的工作流程. 关注公众号 MageByte,设置星标点「在看」 ...

  2. Nginx及其架构设计

    1.1. 什么是 Nginx Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/P ...

  3. 宜信开源|分布式任务调度平台SIA-TASK的架构设计与运行流程

    一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背 ...

  4. RDIFramework.NET开发框架在线表单设计整合工作流程的使用

    1.概述 在RDIFramework.NET开发框架在线表单设计助力可视化快速开发文章中,我们介绍了不使用编码的方式进行表单的在线设计并挂接在对应的模块下,加速应用的落地与实现.同样,通过在线设计的表 ...

  5. lvs、nginx、HAProxy、keepalive工作原理

    1. lvs.nginx.HAProxy.keepalive工作原理 1.1. 前言 遇到了负载均衡和高可用选型问题,我觉的有必要好好理解下lvs,nginx,haproxy和keepalive的区别 ...

  6. 【Nginx】Nginx基础架构

    调用HTTP模块的流程: Worker进程会在一个for循环语句中反复调用事件模块检测网络事件.当事件模块检测到某个客户端发起的TCP请求时(接收到SYN包),将会为它建立TCP连接,成功建立连接后根 ...

  7. 架构设计(四):CDN

    架构设计(四):CDN 作者:Grey 原文地址: 博客园:架构设计(四):CDN CSDN:架构设计(四):CDN CDN 全称 Content delivery network ,即:内容分发网络 ...

  8. MyBatis 工作流程及插件开发

    1. MyBatis 框架分层架构 2. MyBatis 工作流程 获取 SqlSessionFactory 对象: 解析配置文件(全局映射,Sql映射文件)的每一个信息,并保存在Configurat ...

  9. Struts2的工作流程分析

    Struts2的工作流程分析 Posted on 2011-02-22 09:32 概述 本章讲述Struts2的工作原理. 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验, ...

  10. 架构设计:负载均衡层设计方案(2)——Nginx安装

    来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) 目录(?)[-] Nginx重要算法介绍 1一致性Hash算法 2轮询与加权轮询 Nginx的安装 1 ...

随机推荐

  1. ModelArts的雪中送炭,让我拿下CCF BDCI华为Severless工作负载预测亚军

    摘要: 中国计算机学会大数据与计算智能大赛(CCF BDCI)华为Severless工作负载预测亚军方案和ModelArts使用体验分享 本文分享自华为云社区<免费薅ModelArts算力资源- ...

  2. GaussDB(DWS)发生数据倾斜不要慌,一文教你轻松获取表倾斜率

    摘要:GaussDB(DWS)是MPP并行架构,若表的数据存在倾斜情况,会引起一系列性能问题,影响用户体验,严重时可能会引起系统故障.因此能快速获取倾斜的表并整改是GaussDB(DWS)运维管理人员 ...

  3. 云图说丨初识数据工坊DWR

    摘要:数据工坊DWR是一款近数据处理服务,通过易用的工作流编排和开放生态的数据处理算子,能够在云上实现图像.视频.文档.图片等数据处理业务. 本文分享自华为云社区<[云图说]第236期 初识数据 ...

  4. k8s源码Client-go中Reflector解析

    摘要:通过本文,可以了解Reflector通过ListWatcher从Kubernetes API中获取对象的流程,以及存储到store中,后续会对DeltaFIFO进行源码研读,通过结合inform ...

  5. Solon2 接口开发: 熟悉 Gateway

    Gateway 是 Solon 框架的特殊控制器(也是Handler 的一个实现类).它通过注册收集之后,在局部范围内提供:二级路由.拦截.过滤.融断.异常处理等功能,并统一到网关处理. 另一个作用: ...

  6. Solon 开发进阶

    Solon 开发进阶 一.插件扩展机制 二.体外扩展机制 三.常用配置说明 四.启动参数说明 五.全局异常订阅 本系列在内核知识的基础上做进一步延申.主要涉及: 插件扩展体系 体外扩展体系 常用配置 ...

  7. 在Flutter中使用SetState无效?可能是忽略了这个!

    这次是Flutter开发技术分享,解决的问题点来自本人实际的开发经历. 首先描述一下问题:在某个组件中调用setState()方法更新该组件状态,结果是无法做到更新效果,组件仍然维持原状. 下面我们用 ...

  8. CNCF大使预测:2024年云原生面临倦怠、离职及云成本精简

    本文由 CNCF 大使 Eric D. Schabell 撰写,预测2024年云原生领域最可能发生的3大变化,并与其对云原生可观测性领域的见解结合. 关注云原生倦怠 毫无疑问,在 2023 年中云原生 ...

  9. 阿里云云通信作为 CPaaS 全球代表服务商,上榜 Gartner 报告

    近日,国际知名研究机构Gartner发布2022年<CPaaS市场指南(Market Guide for Communications Platform as a Service, 2022)& ...

  10. Gcc内置原子操作__sync_系列函数

    Gcc内置原子操作__sync_系列函数简述及例程 Gcc 4.1.2版本之后,对X86或X86_64支持内置原子操作.就是说,不需要引入第三方库(如pthread)的锁保护,即可对1.2.4.8字节 ...