`

OpenResty?ngx_lua?Nginx与ngx_lua结合?

阅读更多

什么是OpenResty?

将Lua和Nginx粘合ngx_lua模块,并且将Nginx核心、LuaJIT、ngx_lua模块、许多有用的Lua库和常用的第三方Nginx模块组合而成。

 

 

什么是ngx_lua及原理?

ngx_lua是Nginx的一个模块,将Lua嵌入到Nginx中,从而可以使用Lua来编写脚本,这样就可以使用Lua编写应用脚本,部署到Nginx中运行,即Nginx变成了一个Web容器。

注:Tengine也包含ngx_lua模块。至于二者的区别:OpenResty是Nginx的Bundle;而Tengine则是Nginx的Fork。

ngx_lua模块的原理:

1、每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM;

2、将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问;

3、每个外部请求都由一个Lua协程处理,协程之间数据隔离;

4、Lua代码调用I/O操作等异步接口时,会挂起当前协程(并保护上下文数据),而不阻塞worker;

5、I/O等异步操作完成时还原相关协程上下文数据,并继续运行;

 

 

为什么Nginx与ngx_lua结合?

Nginx设计为一个主进程多个工作进程的工作模块,每个进程是单线程处理多个连接,而且每个工作进程采用了非阻塞I/O(select()、poll()等系统调用)来处理多个连接,从而减少了线程上下文切换,从而实现了公认的高性能、高并发;在生产环境中会通过把CPU绑定到Nginx工作进程提升性能;另外因为单线程工作模式的特点,内存占用就非常少了。Nginx更改配置重启速度非常快,可以毫秒级,而且支持不停止Nginx进行升级Nginx版本、动态重载Nginx配置。

每个Nginx worker(工作进程)会创建一个Lua VM(Lua虚拟机)。每个外部请求进入Nginx绑定一个worker进行处理。worker内部针对每一个请求由Lua VM产生一个协程(此协程执行Lua代码进行业务处理),业务处理完毕请求返回后,由Lua VM回收此协程。逻辑上看,每个外部请求生命周期都是在Lua VM中由一个协程完成。

 

参考链接

Nginx与Lua

http://www.cnblogs.com/wangxusummer/p/4284229.html

ngx_lua 模块

http://www.cnblogs.com/wangxusummer/p/4309007.html

使用Nginx+Lua(OpenResty)开发高性能Web应用

http://jinnianshilongnian.iteye.com/blog/2280928

 

 

 

分享到:
评论

相关推荐

    ngx_lua资源

    ngx_lua 是一个强大的 Lua 脚本绑定模块,用于 ngx_openresty,这是一个全面的、高性能的、企业级的 Lua 开发平台,基于 Nginx。ngx_lua 允许开发者在 Nginx 的事件驱动、非阻塞 I/O 模型下编写服务器端的 Lua 应用...

    Using ngx_lua in UPYUN 2.pdf

    根据提供的文件内容,这篇文档主要围绕在UPYUN云平台上使用ngx_lua模块与Nginx结合进行编程和配置的详细指南。下面将详细梳理这些知识点。 ### 标题知识点 - **ngx_lua**: 这是Nginx的一个模块,它允许Nginx执行Lua...

    Openresty_For_Windows_1.7.10.zip

    OpenResty 是一个通过扩展 nginx 的快速 Web 应用服务器。 Nginx Openresty For Windows (NOW) 是带有 Openresty 的 Windows 版本中的 Nginx。 它有一些特点: 高性能 并发两万多个连接 多进程 支持共享内存 支持...

    lua-nginx-module-0.10.13

    OpenResty是基于Nginx和lua-nginx-module的高性能Web平台,提供了更完整的Lua扩展库和工具集,如lua-nginx-memcached-module、lua-resty-redis等。 5.2 LuaJIT优化 LuaJIT是Lua的一个高性能Just-In-Time编译器,能...

    Using ngx_lua in UPYUN 2.zip

    **ngx_lua 模块介绍**:ngx_lua 是由 OpenResty(一个基于 Nginx 的高性能 Web 开发框架)提供的,它允许在 Nginx 配置文件中直接编写 Lua 脚本,实现了 HTTP 请求的实时处理,包括请求的接收、响应的构建以及与后端...

    openresty(nginx-lua-module-zh-wiki)中文文档.pdf

    OpenResty(又称:ngx_openresty) 是一个基于 NGINX 的可伸缩的 Web 平台,由中国人章亦春发起,提供了很多高质量的第三方模块。 OpenResty 是一个强大的 Web 应用服务器,Web 开发人员可以使用 Lua 脚本语言调动 ...

    ngx_openresty_lua_技术交流实践

    OpenResty是基于Nginx与LuaJIT的高性能Web平台,将Nginx和Lua语言相结合,通过Lua脚本提供强大的可编程性,非常适合构建高性能、可扩展的Web应用、API网关、负载均衡器等。 ### Lua入门与基础 - **Lua环境搭建**:...

    lua-resty-http:用于OpenResty ngx_lua的Lua HTTP客户端cosocket驱动程序

    9. **兼容性:** 与 `luajit` 兼容,也可以在标准 Lua 5.1 或 5.2 上运行(如果 OpenResty 使用这些版本的 Lua)。 **使用示例:** ```lua local http = require "resty.http" local client = http.new() client:...

    lua-resty-redis:基于cosocket API的ngx_lua的Lua Redis客户端驱动程序

    描述这个Lua库是ngx_lua nginx模块的Redis客户端驱动程序: 这个Lua库利用了ngx_lua的cosocket API,可确保100%的非阻塞行为。 请注意,至少需要或 。概要 # you do not need the following line if you are using ...

    ngx_lua:Nginx + Lua + C ++

    ngx_openresty-1.7.7.2/bundle目录里存放着nginx核心和很多第三方模块,比如有我们需要的Lua和LuaJIT。 3.安装LuaJIT cd bundle/LuaJIT-2.1-20150120/ make clean && make && make install ln -sf luajit-2.

    lua-resty-mysql:用于ngx_lua或OpenResty的非阻塞Lua MySQL驱动程序库

    名称 lua-resty-mysql-基于cosocket API的ngx_lua的Lua MySQL客户端驱动程序 目录 server_ver ... 请注意,至少需要ngx_lua 0.9.11或ngx_openresty 1.7.4.1 。 另外,还需要位库。 如果将LuaJIT 2与n

    基于ngx_lua的动态服务路由方案

    OpenResty结合lua语言,可以让我们在Nginx中执行复杂的业务逻辑,而无需通过传统的模块扩展。lua脚本的灵活性和高效性使得动态服务路由成为可能。Nginx作为一款强大的反向代理和负载均衡器,通常用于处理HTTP和TCP...

    ngx_openresty-1.9.3.2

    通过将LuaJIT(Just-In-Time)编译器与Nginx结合,ngx_openresty允许开发者在Nginx内部编写高性能的 Lua 脚本,实现动态处理HTTP请求、会话管理、缓存控制等功能,而无需依赖外部进程或复杂的模块配置。 1. LuaJIT...

    ngx_openresty-1.7.4.1.tar.gz

    总的来说,ngx_openresty通过结合Nginx的高性能和Lua的灵活性,为构建高性能、高并发的Web服务提供了一种强大且高效的方式。通过深入学习和掌握OpenResty,开发者可以构建出复杂而强大的Web应用程序。

    stream-lua-nginx-module:将Lua的功能嵌入NGINX TCPUDP服务器

    ngx_stream_lua_module-将Lua的功能嵌入到Nginx流/ TCP服务器中。 该模块是OpenResty的核心组件。 如果您使用的是此模块,则实际上是在使用OpenResty。 该模块不随Nginx源一起分发。 请参阅。 目录 代码库 错误和...

    通过ngx-lua来统计nginx上的虚拟主机性能数据

    ngx-lua是Nginx的一个模块,它允许在Nginx服务器中直接运行Lua脚本,从而实现更灵活和强大的Web服务配置。这篇博客“通过ngx-lua来统计nginx上的虚拟主机性能数据”可能探讨了如何利用ngx-lua模块收集和分析Nginx...

    ngx_openresty服务器安装步骤.docx

    ngx_openresty是一款基于Nginx的全功能Web平台,它集成了LuaJIT脚本语言,使得开发者能够利用Lua的高效性能来扩展Nginx的功能,构建高性能的Web服务和API后端。OpenResty的目标是提供一个完整的、端到端的解决方案,...

    Lua程序设计.pdf_lua_nginx_

    OpenResty提供了ngx_lua模块,允许我们在Nginx服务器端直接运行Lua脚本,实现高性能的动态内容生成和处理。这包括但不限于动态路由、会话管理、API网关、限流策略等。通过Lua,开发者可以编写灵活且高效的服务器逻辑...

    lua-nginx-module-0.10.20.tar.gz

    Lua语言以其轻量级、高效和强大的脚本能力,近年来在Web开发领域备受青睐,尤其是在Nginx服务器中,Lua与Nginx的结合使用,通过lua-nginx-module模块,实现了动态处理和扩展功能,极大地提升了Nginx的灵活性和可编程...

Global site tag (gtag.js) - Google Analytics