系统性能调优必知必会
陶辉
智链达 CTO,前阿里云 P8 高级技术专家
36367 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
系统性能调优必知必会
15
15
1.0x
00:00/00:00
登录|注册

23 | 负载均衡:选择Nginx还是OpenResty?

OpenResty添加了近20个第三方C模块
OpenResty默认加入了四层负载均衡和TLS协议处理功能
Mainline、Stable和Legacy版本
七层负载均衡获取用户信息
七层负载均衡
三层、四层负载均衡
开源软件构建生态的充分条件
模块间的差异
版本差异
版本发布频率低于官方Nginx
与Nginx的关系
通过C模块支持Lua语言
嵌入Lua语言
支持各类协议的适配
支持C10M级别的并发连接
开放的源码许可协议
模块化设计
Z轴扩展系统
Y轴扩展系统
X轴扩展系统
分发流量给新增的服务器
提升系统性能
Nginx和OpenResty通常是首选
吞吐量要大于上游应用服务器
思考题
Nginx与OpenResty的差异
OpenResty的特点
Nginx的特点
负载均衡的扩展方式
负载均衡的作用
负载均衡基本要求
负载均衡:选择Nginx还是OpenResty?

该思维导图由 AI 生成,仅供参考

你好,我是陶辉。
[第 21 讲] 介绍 AKF 立方体时,我们讲过只有在下游添加负载均衡后,才能沿着 X、Y、Z 三个轴提升性能。这一讲,我们将介绍最流行的负载均衡 Nginx、OpenResty,看看它们是如何支持 AKF 扩展体系的。
负载均衡通过将流量分发给新增的服务器,提升了系统的性能。因此,我们对负载均衡最基本的要求,就是它的吞吐量要远大于上游的应用服务器,否则扩展能力会极为有限。因此,目前性能最好的 Nginx,以及在 Nginx 之上构建的 OpenResty,通常是第一选择。
系统接入层的负载均衡,常通过 Waf 防火墙承担着网络安全职责,系统内部的负载均衡则通过权限、流量控制等功能承担着 API 网关的职责,CDN 等边缘节点上的负载均衡还会承担边缘计算的任务。如果负载均衡不具备高度开放的设计,或者推出时间短、社区不活跃,我们就无法像搭积木一样,从整个生态中低成本地构建出符合需求的负载均衡。
很幸运的是,Nginx 完全符合上述要求,它性能一流而且非常稳定。从 2004 年诞生之初,Nginx 的模块化设计就未改变过,这样 16 年来累积下的各种 Nginx 模块都可以复用。它的2-clause BSD-like license 源码许可协议极其开放,即使修改源码后仍然可作商业用途,因此 Nginx 之上延伸出了 TEngine、OpenResty、Kong 等生态,这大大扩展了 Nginx 的能力边界。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Nginx与OpenResty是两种流行的负载均衡工具,它们支持系统的扩展和性能提升。负载均衡通过将流量分发给新增的服务器,提升了系统的性能。Nginx以其出色的性能和稳定性成为首选,而OpenResty则是在Nginx基础上构建的,支持嵌入Lua语言,大幅提升了开发效率。负载均衡在系统扩展时,需要根据不同的轴来进行功能分发,包括X轴、Y轴和Z轴。Nginx作为七层负载均衡,能够根据功能来分发请求,而OpenResty则通过嵌入Lua代码实现更高效的开发。Nginx支持C10M级别的并发连接,同时具备良好的模块化设计,可以适配各类协议,包括专有协议如Redis、MySQL等。OpenResty则通过扩展的C模块支持在Nginx中嵌入Lua语言,提高了开发效率。总的来说,Nginx和OpenResty都是强大的负载均衡工具,能够支持系统的扩展和性能提升,而OpenResty则在Nginx的基础上提供了更高效的开发方式。文章还介绍了Nginx和OpenResty之间的差异,包括版本差异、模块间的差异以及如何在二者中进行选择。最后,文章提出了一个思考题,探讨了开源软件构建庞大生态的充分条件。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《系统性能调优必知必会》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(5)

  • 最新
  • 精选
  • 罐头瓶子
    我的建议直接用OR即可。nginx 配置文件与lua的编程表达能力还是有挺大差距的!rewrite access 等阶段做URL跳转 还是lua比较好用。另外我认为nginx基本不具备自己生成业务响应的能力(能自己写nginxC模块的另算),而OR则可以完全胜任这个工作。

    作者回复: 如果不需要实现动态Server,那么Nginx稳定性上要好许多。Lua语言+Nginx是有学习成本的,如果简单的按照Lua语言写法,很容易破坏Nginx的高并发,或者造成Nginx coredump

    2020-07-01
    8
  • 石小
    使用nginx 作为grpc的负载均衡,采用http2的方式总是60s就自动和上游服务器断开连接,grpc_socket_keepalive、grpc_connect_timeout、grpc_read_timeout、grpc_send_timeout参数都设置过了,这种情况正常吗?采用stream的方式不会出现断开的情况

    作者回复: 先抓下包,看看断连接(先发FIN或者RST)的是哪方: 1、下游的客户端; 2、上游的服务器; 3、Nginx。

    2020-07-17
    6
  • 浩仔是程序员
    老师推荐APISIX新一代网关吗?

    作者回复: 它放弃了C模块,仅用Nginx作为网络容器,业务、过滤器皆用lua实现,实现了动态化的配置修改!而且基于etcd实现了SLB集群,如果你对上述功能有需求,可以考虑它,生态也比较活跃,能节省很多时间!

    2021-06-06
    2
    1
  • 安排
    nginx的配置文件中为什么可以配置两个并列的http块儿呢,好像还不报错。

    作者回复: 会报错啊,nginx: [emerg] "http" directive is duplicate。你用的是什么版本?

    2020-07-01
    1
  • Run
    能落地都好
    2020-07-30
    2
收起评论
显示
设置
留言
5
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部