找回密码
 立即注册
搜索

[运维] openresty是干嘛的

[复制链接]
智慧谋略 发表于 2023-1-12 18:05:02 | 显示全部楼层 |阅读模式
OpenResty解决的是高并发的痛点。现在服务的后台大部分是java写的,但是用java写出稳定的高并发服务是很复杂的一件事,首先是服务器的选择,web服务器有几个选型,tomcat,apache,weblogic,还有商用webphere. 1、tomcat官方宣称的并发量是1000,厉害点的做点参数调优,也不过3000并发,如果要开发一个并发百万的服务,1000000/3000,需要1000台服务器,想想都不可能。 2、apache的并发比tomcat更不堪,200-300 3、weblogic的并发稍好,平均能达到3000左右,但是也没有达到好一个数量级


但是nginx就不一样了,处理几万的请求很轻松,内存占用也不高,之前我们只是把它用作负载均衡,没想过当做一个web服务器,OpenResty的出现解决了享受nginx高并发优势的拦路虎,因为nginx是使用异步 事件模型,跟传统的编程思想不一样,而lua是用c解释执行的脚本语言(执行效率很高),可以用传统的同步编程思想上,在nginx请求接进来后处理稍复杂的逻辑。
对于高并发的系统来说,都是基于内存的,或者说是基于缓存的,题主说的用mysql支撑高并发是不现实的,mysql的并发量在4000-8000,超过这个量mysql性能就会急剧下降。一次内存读取的时间是几十纳秒,一次缓存读取是几毫秒,大家可能对纳秒比较陌生,一纳秒等于1秒的1000000000分之一,一毫秒等于1秒的1000分之一,请求过来之后直接走内存读取,在需要和数据库交互的时候把数据写入内存,然后再批量入库,快速响应。
web流量也符合二八原则,百分之八十的流量集中在百分之二十的页面,比如电商的首页,产品详情页,使用openResty支撑产品详情页的高并发访问,在处理订购单,购物车等环节用其他的高并发框架处理,比如java的NIO网络框架netty。
java的netty也是处理高并发的利器,不过我做过测试,整体性能可以达到nginx的80%,所以,脏活累活都让nginx做吧,关键业务用netty。
当然,每个人对高并发的理解可能不太一样,有人说1000并发就是高并发了,有人说1万的并发才是高并发,有人说并发百万才是高并发,OpenResty是可以做到百万并发的(当然需要各种调优),现在大部分业务OpenResty都可以胜任,但是像腾讯10亿用户,1亿的并发,OpenResty就搞不定了。
不同的并发量要应对的东西不一样,比如1000并发,用tomcat,springmvc框架加缓存就可以应对,1万的并发在关键节点使用内存处理也很容易,百万并发就需要linux内核调优,socket缓冲区,文件句柄数,内存池,RPS/RFS SMP等优化也可以达到。千万并发就需要考虑用户态协议dpdk了


openresty本身是集成了lua组件的nginx,等于是把一部分后端服务的功能用lua集成到反向代理里面了。
数据库慢,你需要加缓存,拆分,看你哪个业务逻辑拖慢了整体的返回速度。业务逻辑复杂,拆域,中间层聚合,很多手段可以用。超时还可以用nginx上的静态持久化页面返回。
lvs -> nginx -> server -> database,后端哪一个环节慢,都不是反向代理应该解决的事情,
openresty就是一把利刃。另外openresty 实现一些高并发但逻辑不复杂的业务也是非常优秀的。复杂业务,由于lua语言的关系,开发难度会比较高(当然也可能只是对我来说,因为我比较菜)。
想多聊聊MySQL,时至今日, MySQL 依旧是一个优秀的关系型数据库。能够解决国内绝大部分中小公司的需求,和头部公司的超过一半以上的业务需求。
 楼主| 智慧谋略 发表于 2023-1-12 18:05:16 | 显示全部楼层
高性能的 Web 服务器 Nginx,它资源占用少,处理能力高,是搭建网站的首选。
虽然 Nginx 成为了 Web 服务器领域无可争议的“王者”,但它也并不是没有缺点的,毕竟它已经 15 岁了。
“一个人很难超越时代,而时代却可以轻易超越所有人”,Nginx 当初设计时针对的应用场景已经发生了变化,它的一些缺点也就暴露出来了。
Nginx 的服务管理思路延续了当时的流行做法,使用磁盘上的静态配置文件,所以每次修改后必须重启才能生效。这在业务频繁变动的时候是非常致命的(例如流行的微服务架构),特别是对于拥有成千上万台服务器的网站来说,仅仅增加或者删除一行配置就要分发、重启所有的机器,对运维是一个非常大的挑战,要耗费很多的时间和精力,成本很高,很不灵活,难以“随需应变”。
那么,有没有这样的一个 Web 服务器,它有 Nginx 的优点却没有 Nginx 的缺点,既轻量级、高性能,又灵活、可动态配置呢?
这就是我今天要说的 OpenResty,它是一个“更好更灵活的 Nginx”。
OpenResty 是什么?
OpenResty 诞生于 2009 年。它的创造者是当时就职于某宝的“神级”程序员章亦春,网名叫“agentzh”。
OpenResty 并不是一个全新的 Web 服务器,而是基于 Nginx,它利用了 Nginx 模块化、可扩展的特性,开发了一系列的增强模块,并把它们打包整合,形成了一个 “一站式”的 Web 开发平台。
虽然 OpenResty 的核心是 Nginx,但它又超越了 Nginx,关键就在于其中的 ngx_lua 模块,把小巧灵活的 Lua 语言嵌入了 Nginx,可以用脚本的方式操作 Nginx 内部的进程、多路复用、阶段式处理等各种构件。
脚本语言的好处你一定知道,它不需要编译,随写随执行,这就免去了 C 语言编写模块漫长的开发周期。而且 OpenResty 还把 Lua 自身的协程与 Nginx 的事件机制完美结合在一起,优雅地实现了许多其他语言所没有的“同步非阻塞”编程范式,能够轻松开发出高性能的 Web 应用。
虽然Nginx仍然是核心,但看得出openResty有淡化自身“Nginx Bundle"色彩的趋势,力图成为一个更伟大的存在。
OpenResty自带完善的帮助文档,开发社区也很活跃,但相关的学习资料一一特别是中文资料较少。
这里给大家分享一份大佬多年使用OpenResty的经验,系统地阐述了OpenResty相关的各方面知识和要点,帮助我们快速掌握这个高效易用的Web开发平台,进而实现HTTP/HTTPS/TCP/UDP等多种网络应用——点此免费领取【传送门】

 楼主| 智慧谋略 发表于 2023-1-12 18:05:37 | 显示全部楼层
lua简介
a) 最大的优势就是小,绝对的小,可以嵌入任何程序而我们几乎可以忽略其大小。
b) LUA是脚本语言中最快的,性能异常优秀;理想中的写业务逻辑的工具。
c) LUA和C/C++,PHP等语言有很好的交互性。又叫胶水语言。(以后会细讲)
b) LUA还可以作为配置文件可以达成非常复杂的配置逻辑。

2,openresty简介
OpenResty 是知名开源软件。是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建并发高,扩展性高的动态 Web 应用。
中国人章亦春把LuaJITVM嵌入到Nginx中,实现了OpenResty这个高性能服务端解决方案。
通过OpenResty,你可以把nginx的各种功能进行自由拼接,更重要的是,开发门槛并不高,这一切都是用强大轻巧的Lua语言来操控。

3,OpenResty应用场景
在请求真正到达上游服务之前,Lua可以随心所欲的做复杂的访问控制和安全检测。
具体讲:例如我们知道nginx可以在IP层进行访问控制。但OpenResty可以在此基础上进行细分。根据url参数进行访问控制。所以使用OpenResty的好处一半是性能,一半是灵活(接下来我们就详细讲一下这点)。
高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|探索掌握未知、共创美好未来

GMT+8, 2026-9-17 02:30 , Processed in 0.052349 second(s), 35 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表