Nginx之初识

1.Nginx概述

        Nginx是一个高性能的反向代理和Web服务器软件,因其系统资源消耗低、运行稳定且具有高性能的并发处理能力等特性,在互联网企业中得到广泛的应用。

2.Nginx特性

        1.访问路由

                现今大型网站的请求量早已不是单一Web服务器可以支撑的了。单一入口、访问请求被分配到不同的业务功能服务器集群,是目前大型网站的通用应用架构。Nginx可以通过访问路径、URL关键字、客户端IP、灰度分流等多种手段实现访问路由的分配。

        2.反向代理

                就反向代理功能而言,Nginx本身并不产生响应数据,只是应用自身的异步非阻塞事件驱动架构,高效、稳定地将请求反向代理给后端的目标应用服务器,并把响应数据返回给客户端。其不仅可以代理HTTP协议,还可以支持HTTPS、HTTP/2、FastCGI、uWSGI、SCGI、gRPC及TCP/UDP等目前大部分协议的反向代理。

        3.负载均衡

                Nginx在反向代理的基础上集合自身的上游(upstream)模块支持多种负载均衡算法,使后端服务器可以非常方便的进行横向扩展,从而有效提升应用的处理能力,使整体应用架构可以轻松应对高并发的应用场景。

        4.内容缓存

                动态处理与静态内容分离是应用架构优化的主要手段之一,Nginx的内容缓存技术不仅可以实现预制静态文件的高速缓存,还可以对应用响应的动态结果实现缓存,为响应结果变化不大的应用提供高速的响应能力。

        5.可编程

                Nginx模块化的代码架构方式为其提供了高度可定 制的特性,但可以用C语言开发Nginx模块以满足自身 使用需求的用户只是少数。Nginx在开发之初就具备了 使用Perl脚本语言实现功能增强的能力。Nginx对JavaScript语言及第三方模块对Lua语言的支持,使得其可编程能力更强。

3.Nginx源码架构浅析

        Nginx低资源消耗、高稳定、高性能的并发处理能力,来源于其优秀的代码架构。它采用了多进程模型,使自身具有低资源消耗的特性。以事件驱动的异步非阻塞多进程请求处理模型,使Nginx的工作进程通过异步非阻塞的事件处理机制,实现了高性能的并发处理能力,让每个连接的请求均可在Nginx进程中以工作流的方式得到快速处理。Nginx代码架构充分利用操作系统的各种机制,发挥了软硬件的最大性能,使它在普通硬件上也可以处理数十万个并发连接。

        Nginx支持在多种操作系统下部署运行,为发挥Nginx的最大性能,需要对不同的平台进行细微的调整。

        3.1 多进程模型

                进程是操作系统资源分配的最小单位,由于CPU数量有限,多个进程间通过被分配的时间片来获得CPU的使用权,系统在进行内核管理和进程调度的时候,要执行保存当前进程上下文、更新控制信息、选择另一就绪进程、恢复就绪进程上下文等一系列操作,而频繁切换进程会造成资源消耗。

                Nginx采用的是固定数量的多进程模型,如下图:

                由一个主进程(Master Process)和数量与主机CPU核数相同的工作进程协调处理各种事件。主管理进程负责工作进程的配置加载、启停等操作,工作进程负责处理具体请求。进程间的资源都是独立的,每个工作进程处理多个连接,每个连接由一个工作进程全权处理,不需要进行进程切换,也就不会产生由进程切换引起的资源消耗问题。默认配置下,工作进程的数量与主机CPU核数相同,充分利用CPU和进程的亲缘性(affinity)将工作进程与CPU绑定,从而最大限度地发挥多核CPU的处理能力。

        3.2 工作流机制

                Nginx在处理客户端请求的时候,每个连接仅由一个进程进行处理,每个请求仅运行在一个工作流中,工作流被划分为多个阶段,如下图:

                请求在不同阶段由功能模块进行数据处理,处理结果异常或结束则将结果返回客户端,否则将进入下一阶段。工作流程维护工作流的执行,并通过工作流的状态推动工作流完成请求操作的闭环。下图为异步非阻塞机制流程图:

        3.3 模块化

                Nginx一直秉持模块化的理念,其模块化的架构中,除了少量的主流程代码,都是模块。模块化的设 计为Nginx提供了高度的可配置、可扩展、可定制特性。模块代码包括核心模块和功能模块两个部分:核 心模块负责维护进程的运行、内存及事件的管理;功 能模块则负责具体功能应用的实现,包括路由分配、 内容过滤、网络及磁盘数据读写、代理转发、负载均衡等操作。Nginx的高度抽象接口使用户很容易根据开 发规范进行模块开发,有很多非常实用的第三方模块被广泛使用。模块大致分为以下几类:

                ·核心模块(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官方开发的 功能模块,据统计,在开源社区发布的第三方模块已经达到100多个,其中lua-resty、nginx-module-vts 等模块的使用度非常高。 

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

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

相关文章

微服务+分库分表的自增主键ID该如何设计?

一. 前言 分布式ID 是分布式系统里面非常重要的一个组成部分,那么我们在设计分布式ID的时候,需要考虑什么问题呢? ❓简单结构下是怎么实现 ID 的控制的? 单实例系统 :通过时间戳,系统内自增,上…

[Algorithm][动态规划][两个数组的DP][正则表达式匹配][交错字符串][两个字符串的最小ASCII删除和][最长重复子数组]详细讲解

目录 1.正则表达式匹配1.题目链接2.算法原理详解3.代码实现 2.交错字符串1.题目链接2.算法原理详解3.代码实现 3.两个字符串的最小ASCII删除和1.题目链接2.算法原理详解3.代码实现 4.最长重复子数组1.题目链接2.算法原理详解3.代码实现 1.正则表达式匹配 1.题目链接 正则表达…

《令狐带你阅读JDK源码之简单集合ArrayList》

文章目录 Java简单集合ArrayList继承体系源码解析 总结 大家好哈,欢迎来到令狐小哥本期专栏,这期专栏主要是带着大家阅读JDK源码,我会分几期篇幅来介绍这个jdk源码、会进行剖析、梳理,欢迎大家指正阅读。后面我会配套自己的视频进…

计算机网络 期末复习(谢希仁版本)第2章

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。4 个特性: 机械特性:指明接口所用接线器的形状和尺寸、引线数目和排列、固定和锁定装置等。 电气特性:指明在接口电缆的各条线上出现…

【python进阶】python图形化编程之美--tkinter模块初探

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

白酒:茅台镇白酒的地域特色与环境优势

茅台镇,位于中国贵州省仁怀市,因其与众不同的自然环境和酿酒工艺而成为世界著名的白酒产区。作为茅台镇的品牌,云仓酒庄豪迈白酒以其卓着的品质和口感赢得了广大消费者的喜爱。而这一切,都离不开茅台镇的地域特色和环境优势。 茅台…

Python 知识图谱补全,Knowledge Graph Completion,基于大模型的知识图谱补全,基于LLMs的KGC任务

今天讲一篇文章《Exploring Large Language Models for Knowledge Graph Completion》 ,这篇文章主题:基于大模型做知识图谱补全 1.文章主要思想: 本章描述知识图谱补全中的三个任务:三元组分类、关系预测和实体(链接)预测&…

C++初阶学习第十一弹——探索STL奥秘(六)——深度刨析list的用法和核心点

前言: 在前面,我们已经学习了STL中的string和vector,现在就来讲解STL中的最后一个部分——list的使用及其相关知识点,先说明一点,因为我们之前已经讲过了string和vector的接口函数等用法,list的这些用法与它…

python_将二维列表转换成HTML格式_邮件相关

python_将二维列表转换成HTML_邮件相关 data[["理想","2"],["理想2","3"]]def list_to_html_table(data):"""将二维列表转换为HTML表格格式的字符串。参数:data -- 二维列表,表示表格的数据。返回:一个字符…

美财长耶伦警告:金融行业广泛应用AI带来潜在“重大风险”

内容概述 耶伦承认,人工智能用在金融领域可降低交易成本、提高效率、检测欺诈和增加服务可及性,但也伴随风险。AI模型的复杂性和不透明度、供应商高度集中、产生数据缺陷或偏见等AI相关风险,已成为美国金融监管机构的首要议题。 6月6日周四&…

2024年全国青少信息素养大赛图形化编程挑战赛集训第一天编程题分享

大家如果不想阅读前边的比赛内容介绍,可以直接跳过:拉到底部看集训第一天题目 (一)比赛内容: 【小学低年级组】 1、图形化编程软件的使用:熟悉图形化编程软件中舞台区、角色列表区、功能区、脚本编 -3- 辑区的功能及使用。 2、基础功能模块的使用: a.运动模块:角…

Spring Boot 开发 -- 集成 Prometheus 进行高效监控

引言 随着微服务架构的流行,对服务的监控和管理变得尤为重要。Prometheus作为一个开源的监控和告警工具,以其强大的数据采集、存储和查询能力,受到了众多开发者的青睐。Spring Boot作为Java领域快速构建微服务的框架,与Prometheu…

单轮对话和多轮对话

参考:数据集对应关系说明 - 千帆大模型平台 | 百度智能云文档 (baidu.com) 什么是单轮对话 单轮对话和多轮对话是两种不同的对话形式,它们分别指的是在一次对话中只涉及一个问题和对应的回答,以及在一次对话中涉及多个问题和对应的回答。 …

暑假打工兼职首选——千行赏金

考虑暑假打工兼职该怎么选?加入千行赏金这样的平台确实是一个值得考虑的选择。以下是一些关于此问题的分析: 首先,暑假打工兼职的好处是显而易见的。它不仅可以为学生提供一定的经济收入,减轻家庭的经济负担,还可以帮…

【教程】从0开始搭建大语言模型:文本预处理

从0开始搭建大语言模型:文本预处理 参考仓库:LLMs-from-scratch 理解Word embedding 深度神经网络模型,包括LLM,不能直接处理原始文本,因此需要一种方法将它转换为连续值的向量,也就是embedding。如下图…

1782java英语陪学记词系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java英语陪学记词系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助采用了java设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&…

AI大底座核心平台:百度百舸AI异构计算平台(AI IaaS)与AI中台(AI PaaS)

AI大底座正是整合了以上端到端全要素技术能力,将基础架构IaaS与应用平台PaaS能力深度融合,面向企业和产业AI生 产与应用的全生命周期提供完整解决方案。 百舸AI异构计算平台是AI IaaS层的核心平台,包括AI计算、AI存储、AI加速、AI容器四层套件…

shell(一)

shell 既是脚本语言又是应用程序 查看自己linux系统的默认解析:echo $SHELL 创建第一个shell 文件 touch 01.sh编辑 vi 01.sh01.sh 文件内容 #!/bin/bash echo felicia保存 按Esc 然后输入:wq 定义以开头:#!/bin/bash #!用来声明脚本由什么shell解释…

idea maven 执行 控制台乱码

这是没加出现的问题 上方案

【HTTP系列】TCP/IP协议

文章目录 一、是什么二、划分五层体系应用层传输层网络层数据链路层物理层 四层体系 三、总结参考文献 一、是什么 TCP/IP,传输控制协议/网际协议,是指能够在多个不同网络间实现信息传输的协议簇 TCP(传输控制协议) 一种面向连…