架构设计 - nginx 的核心机制与主要应用场景

一、nginx 的核心机制:

1. 事件驱动模型(epoll 多路复用)

  • 事件循环

        Nginx的核心组件是一个事件循环,它不断地监听事件(如新连接的到来、请求数据的可读性等)。

        当有事件发生时,事件循环会调用相应的事件处理器来处理这些事件。

  • 非阻塞I/O

        Nginx使用非阻塞I/O来处理输入和输出,这意味着当一个连接等待数据时,它不会阻塞整个线程,而是可以继续处理其他连接。

        通过利用操作系统的I/O多路复用机制(如epoll、kqueue),Nginx可以在单个线程中有效地处理大量的并发连接。

2. master worker 多进程模型

  • 主进程(Master Process)

        负责读取和解析配置文件。

        启动、管理和监控工作进程(Worker Process)。

        不直接处理网络请求,而是作为管理和调度的中心。

  • 工作进程(Worker Process)

        负责处理来自客户端的连接和请求。

        工作进程数量可配置,一般设置为与CPU核心数相等,以充分利用CPU资源。

        工作进程之间相互独立,可以并行处理请求,提高性能和吞吐量。

二、nginx 的主要应用场景

鉴于 nginx 具有以上高性能机制,可以用于以下业务场景。

1. 反向代理

  • 反向代理是Nginx最常用的功能之一。它允许Nginx接受来自外部网络的连接请求,并将这些请求转发到内部网络上的服务器。然后,Nginx将从服务器上获取到的结果返回给外部网络的客户端。这种机制使得真实的服务器不能直接被外部网络访问,提高了安全性和隐私性。
  • 反向代理的关键配置指令是 proxy_pass,用于指定请求应该被转发到的目标服务器地址。

2. 负载均衡

  • 当有两台或两台以上服务器时,Nginx可以根据配置的规则将请求随机分发到指定的服务器上处理。这种负载均衡功能可以提高系统的可用性和性能,确保在高并发场景下,系统仍然能够保持稳定的响应速度。
  • 负载均衡配置通常与反向代理一起使用,通过反向代理将请求转发到负载均衡模块,再由负载均衡模块根据策略将请求分发到不同的后端服务器。

3. 动静分享服务器

静态资源服务器

  • Nginx可以直接返回请求的文件,从而减轻Web服务器的负担。这种场景通常用于提供静态文件下载或者视频等大文件的访问。Nginx的高性能和低内存占用使得它成为处理静态资源的理想选择。
  • 通过配置Nginx的 location 指令,可以指定不同的目录映射和请求处理逻辑,以满足各种静态资源的访问需求。

动态内容缓存

  • Nginx具备强大的HTTP缓存功能,可以缓存静态和动态内容,提高响应速度,减轻后端服务器的压力。通过配置Nginx的缓存策略,可以根据需求灵活调整缓存的大小和过期时间。

6. Websocket支持

  • Nginx可以与Websocket技术结合使用,搭建实时通讯应用。通过配置Nginx的Websocket模块,可以实现浏览器和服务器之间的长连接通信,满足实时消息推送、在线聊天等应用需求。

总结来说,Nginx凭借其高性能、高可靠性、高可扩展性和易用性等特点,在Web服务器领域有着广泛的应用。无论是作为反向代理、负载均衡器、静态资源服务器还是Websocket支持平台,Nginx都能够提供出色的性能和稳定性,满足各种业务需求。

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

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

相关文章

深入解析TF-IDF算法:文本分析的基石与力量

在信息爆炸的时代文本数据无处不在,从新闻报道到社交媒体帖子,从学术论文到产品评论,大量的文本信息需要被有效地分析和利用。在这样的背景下TF-IDF(Term Frequency-Inverse Document Frequency)算法作为一种简单而有效…

【动态规划算法题记录】70. 爬楼梯——递归/动态规划

题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 题目分析 递归法(超出时间限制) 递归参数与返回值 void reversal(int i, int k) 每次我们处理第i个台阶到第k个…

redis 一些笔记1

redis 一、redis事务二、管道2.1 事务与管道的区别 三、主从复制3.13.2 权限细节3.3 基本操作命令3.4 常用3.4.1 一主几从3.4.2 薪火相传3.4.3 反客为主 3.5 步骤3.6 缺点 一、redis事务 放在一个队列里,依次执行,并不保证一致性。与mysql事务不同。 命…

一文讲清:bom管理系统是什么?在生产管理中有什么作用?

在制造业中,物料清单(Bill of Materials,简称BOM)扮演着至关重要的角色。物料清单(BOM)是制造或维修产品所需的材料、组件和零件的结构化综合列表,以及所需材料的数量、名称、描述和成本。简而言…

4.3 Python 元组类型常用操作及内置方法

文章目录 1. Tuple元组1.1 元组1.2 获取元素1.3 修改元素 2. 类型转换3. 索引取值与切片4. 遍历元组5. 获取长度6. 拼接与复制6.1 元组的拼接6.2 元组元素复制 7. 成员运算8. 统计元素9. 获取索引10. 练习 1. Tuple元组 1.1 元组 特征: 使用小括号括起来, 内部可以存放多个数…

【C++进阶】RBTree封装map与set

1.红黑树的迭代器 1.1 begin() begin()就是红黑树的开头,那么对于红黑树来说按照中序序列是该树的最左节点。 Iterator Begin(){Node* leftMin _root;while (leftMin->_left){leftMin leftMin->_left;}return Iterator(leftMin);} 1.2 end() begin()就是…

【启明智显分享】个位数价格工业HMI芯片:720P@60fps,配备2D加速

我们生活在一个“屏”的时代,工业自动化、智能生活的实现都离不开屏幕的帮助,而对于消费者而言,最大的痛点就是显示屏的画质,一个优质的人机交互界面影响着用户体验,流畅清晰的图像呈现与屏幕的分辨率、刷新率都息息相…

VScode ssh远程连接代码开发XHR failed

一、问题描述 在vscode下载插件Remote-SSH远程连接进行代码开发时,提示 XHR failed 无法建立连接。 二、解决方案 1. 离线下载vscode-server 第一步:vscode菜单栏----帮助----关于----提交后面的一串数字字母即为vscode的 commit_id 第二步&#xff…

uniapp地图导航

我们只需要给图标加一个点击事件 我这里的数据都是动态的,想测试的朋友可以写固定值 然后跳转之后首先会调到选择软件导航 点击导航之后会显示使用哪个app 最后我们选择之后将会直接跳转到app进行导航

Git基础指令(图文详解)

目录 Git概述Git基础指令Linux系统操作指令 Git软件指令1.配置信息2.名称和邮箱3.初始化版本库4.向版本库中添加文件5.修改版本库文件6. 查看版本库文件历史 7.删除文件8.恢复历史文件 Git概述 Git基础指令 Linux系统操作指令 Git是一款免费、开源的分布式版本控制系统&…

028、工具_Pipeline

Redis客户端执行一条命令分为如下四个过程: 1)发送命令 2)命令排队 3)命令执行 4)返回结果 其中1)+4)称为Round Trip Time(RTT,往返时间)。 Pipeline(它能将一组Redis命令进 行组装,通过一次RTT传输给Redis,再将这组Redis命令的执行结果按顺序返回给客户端,图3-…

早知 121私人导航升级新版本, 第一次使用原生dialog标签。

早知121项目介绍说明 早知121 - 一个快速创建私人导航网站。 用途: 创建个人的工作导航,收集常用网址,可贡献给同事。创建个人垂直领域导航 优点: - 不需懂技术,不用维护服务器,维护私人导航收藏站。 网…

express入门03增删改查

目录 1 搭建服务器2 静态文件托管3 引入bootstrap4 引入jquery5 编写后端接口5.1 添加列表查询方法5.2 添加路由5.3 添加数据表格 总结 我们前两篇介绍了如何利用express搭建服务器,如何实现静态资源托管。那利用这两篇的知识点,我们就可以实现一个小功能…

公司面试题总结(五)

25.谈一谈箭头函数与普通函数的区别,箭头函数主要解决什么问题? 箭头函数与普通函数的区别: ⚫ 语法简洁性: ◼ 箭头函数使用>符号定义,省略了 function 关键字,使得语法更为紧凑。 ◼ 对于单行函…

事件、方法实现 on_radioGreen_clicked ,on_chkBoxUnder_clicked,Qfont,QPalette

Vertical Layout 、Horizontal Layout 实验窗体自适应布局 接上篇界面布局, 实验checkBox、radioBox 的事件槽, 使用Qfont组件变更纯文本框QPlainTextEdit中字体的下划线、加粗、斜体效果 使用调色板组QPalette变更纯文本框QPlainTextEdit中文本颜色 UI…

三、网络服务协议

目录 一、FTP:文件传输协议 二、Telnet:远程登录协议 三、AAA认证 四、DHCP 五、DNS 六、PPP协议 七、ISIS协议 一、FTP:文件传输协议 C/S架构,现多用于企业内部的资料共享和网络设备的文件传输,企业内部搭建一…

element table 点击某一行中按钮加载

在Element UI中,实现表格(element-table)中的这种功能通常涉及到数据处理和状态管理。当你点击某一行的按钮时,其他行的按钮需要动态地切换为加载状态,这可以通过以下步骤实现: 1.表格组件:使用…

手机流畅运行470亿参数大模型,上交大发布PowerInfer-2推理框架,性能提升29倍

苹果一出手,在手机等移动设备上部署大模型迅速成为行业焦点。 目前,移动设备上运行的模型相对较小(苹果的是3B,谷歌的是2B),并且消耗大量内存,这在很大程度上限制了其应用场景。 即使是苹果&…

【西瓜书】9.聚类

聚类任务是无监督学习的一种用于分类等其他任务的前驱过程,作为数据清洗,基于聚类结果训练分类模型 1.聚类性能度量(有效性指标) 分类任务的性能度量有错误率、精度、准确率P、召回率R、F1度量(P-R的调和平均)、TPR、FPR、AUC回归…

20240613解决飞凌的OK3588-C的核心板的USB3.0接口不读U盘的问题

20240613解决飞凌的OK3588-C的核心板的USB3.0接口不读U盘的问题 2024/6/13 15:21 缘起,由于USB3.0的CC芯片在飞凌的OK3588-C的开发板的底板上,一切正常。 如果你单独使用核心板,很容易出现这个问题【省成本没有使用CC芯片】:不读U…