35 | OpenResty:更灵活的Web服务器
该思维导图由 AI 生成,仅供参考
OpenResty 是什么?
- 深入了解
- 翻译
- 解释
- 总结
OpenResty: 利用Lua语言实现灵活的Web服务器 OpenResty是基于Nginx的增强模块,利用了Lua语言的灵活性,实现了动态配置和高性能的Web应用开发。关键模块ngx_lua引入了Lua脚本语言,实现了同步非阻塞编程范式,使得Web应用能够实时更新配置和业务逻辑,极大地提高了灵活性和效率。OpenResty的“流水线”由Lua脚本组成,可以从磁盘、Redis、MySQL加载,编写、调试的过程非常方便快捷。OpenResty的阶段更注重对HTTP请求响应报文的加工和处理,具有rewrite、access、content、filter等标准的HTTP处理阶段,可以嵌入Lua代码执行重定向跳转、访问控制、产生响应、负载均衡、过滤报文等功能。OpenResty还有特殊阶段“init”和“ssl”,前者在服务器初始化时运行,后者可以在TLS握手时动态加载证书。相比Nginx,OpenResty不依赖静态配置文件,支持代码热加载,使用协程,不需要异步回调函数,非常灵活,配合外部数据库能够实现各种动态配置。总之,OpenResty是一个高性能的Web开发平台,具有灵活性、高效率和动态配置的特点,为Web服务器的选择提供了更多可能性。
《透视 HTTP 协议》,新⼈⾸单¥59
全部留言(23)
- 最新
- 精选
- 锦老师好,多路复用理解起来有点困难,主语是什么呢? 多路 复用分别怎么理解呢?
作者回复: 英文是I/O multiplexing,就是指多个I/O请求“复用”到一个进程或线程里处理,而不是开多个进程、线程处理。 可以看示意图再体会一下。
2019-08-1625 - 闫飞看起来OpenResty的核心武器是协程模型和Lua语言嵌入融合,合理照顾到了开发效率和程序执行效率之间的平衡。
作者回复: 对。
2019-08-1913 - 阿锋域名一般都是带www,也可以不带www,这两者有什么区别?www的作用是什么?
作者回复: www是“主机名”,也就是表示这台主机用于提供万维网服务。 但现在大部分互联网上的主机都是http服务器,所以www现在只是一个“历史习惯”了,比如极客时间的网站“time.geekbang.org”,虽然不是www,但也是http服务。 不带www是域名的一种简化,通常会使用重定向跳转到其他的域名。
2019-08-1712 - -W.LI-老师好! 同步阻塞:代码同步顺序执行,等待阻塞操作完成继续往下走。 同步非阻塞:代码顺序执行,遇见阻塞操作时,CPU执行世间会让出去,得到结果时通过callBack继续回到之前阻塞的地方。 大概是这样么? 然后就是同步阻塞的话,在阻塞的时候会占用CPU执行时间么? 同步非阻塞的话,遇到阻塞操作,主线程直接让出CPU执行时间,上下文会切换么?上下文切换开销会很大吧,如果只是让出怎么实现阻塞数据没就绪时不被分配cpu,如果一直没回调这个线程会死锁么? 代码中请求,redis,数据库这些操作是同步阻塞,还是同步非阻塞?
作者回复: 1.基本正确,但同步阻塞的时候是这个线程被阻塞了,操作系统会把这个线程切换出去干别的,不会耗cpu,相当于这个线程没有充分利用cpu给它的资源。 2.同步非阻塞,是线程自己主动切换cpu给其他任务,但并没有让出cpu给其他线程或进程,因为在用户态,所以成本低,底层是epoll和Nginx的事件机制。 3.有超时机制,超时就会任务执行失败,不会死锁。 4.OpenResty的代码都是同步非阻塞的。
2019-08-1611 - 业余草老师不写OpenResty专栏亏才了
作者回复: 可以看实体书《OpenResty完全开发指南》。
2019-08-236 - djfhchdh2、“阶段式处理”,我的理解这个与“流水线”很像,许多的业务流程模型其实都可以抽象为流水线,通过配置化的方法,可以定制化地把各个模块组成业务流水线
作者回复: good
2019-08-164 - Aemonnginx reload不影响应用吧?秒级是认真的吗?
作者回复: 我曾经见过一个Nginx实例重启,要加载几百几千个配置文件,那速度……
2021-03-103 - 钱同步非阻塞,是线程自己主动切换cpu给其他任务,但并没有让出cpu给其他线程或进程,因为在用户态,所以成本低,底层是epoll和Nginx的事件机制。 老师,这块没太明白,同步和非阻塞原本是矛盾的,一个大动作由多个小动作组成,如果其中一个小动作是一个慢动作,而且是同步模式,下面的动作必然会被阻塞住吧? 你上面解释说“线程自己主动切换CPU给其他任务”, 1:那线程什么时候主动切换CPU给其他任务? 2:这里的其他任务指什么? 3:线程主动切换CPU给其他任务后处于什么状态?为什么? 5:还有我的假设中慢动作后面的动作不是被阻塞了吗? 6:还是说维度与层次不同,同步非阻塞的主体是线程,而不是线程中的一系列动作?
作者回复: 1.协程只是同步非阻塞的一种实现方式,两者不完全等同。 2.OpenResty里的线程其实是协程,内部有调度器,当有阻塞的时候就切换到其他的协程(任务)去执行。 3.协程主动yield后就出于暂停状态,可以随时切换回来继续执行,所以它自己是阻塞的,但整个程序不会因为一个协程而被阻塞。 4.可以参考其他语言里的协程概念来理解。记住协程是用户态的线程,而在操作系统来看实际上只要一个线程,所以如果有大量的磁盘io那么必然会阻塞。
2020-04-053 - lesserror老师,既然OpenResty这么厉害,为什么现在大部分公司还是用的Nginx啊?我公司都有Lua程序员,但是Web服务器还是用的Nginx。是不是学习和运维成本都挺高的啊?
作者回复: OpenResty出来的比较晚,而且在最近几年才开始商业化推广,自然要比Nginx的市场份额要少一些,相关的资料也少,不过最近OpenResty的市场占有率已经开始快速增长了。 OpenResty其实就是Nginx加上一些非常有用的开发组件,本质上还是Nginx,但开发起来更方便。但因为它多了Lua等其他东西,功能已经不再是单纯的web server,所以用起来要复杂一点。如果是单纯搭建网站,没有二次开发的需求,自然很多人会出于简单的目的选择Nginx,但我觉得选择OpenResty会更好,更有潜力。
2019-12-273 - 许童童老师你好,可以说一下OpenResty 和 nginx njs 有什么区别吗?
作者回复: OpenResty现在已经是一个成熟的Web开发生态体系了,已经有很多商业公司基于OpenResty开发各种业务应用,底层的LuaJIT性能很高,保证了它的运行效率。 njs现在还是处于起步阶段,功能比较弱,Nginx对它的定位是“可编程配置语言”,关注点还是在辅助Nginx,而不是用来开发复杂的业务逻辑。 还有很重要的一点是OpenResty里的LuaJIT支持FFI,可以直接调用C接口,扩展性极高,而njs这方面的能力为零,只能限制在vm里。
2019-08-163