OpenResty——通过扩展 NGINX 和 Lua 实现的可伸缩的 Web 平台

OpenResty 是个什么样的项目?

OpenResty 是中国人章亦春发起的一个开源项目,它的核心是基于 NGINX 的一个 C 模块,该模块将 Lua 语言嵌入到 NGINX 服务器中,并对外提供一套完整 Lua Web 应用开发 API,透明地支持非阻塞 I/O,提供了“轻量级线程”、定时器等等高级抽象,同时围绕这个模块构建了一套完备的测试框架、调试技术以及由 Lua 实现的周边功能库;这个项目的意义在于极大的降低了高性能服务端的开发难度和开发周期,在快节奏的互联网时代这一点极为重要。

OpenResty 的起步和发展经历了一个漫长的时期,从 09 年基于 NGINX 用 C 语言重新改写的版本,到 11 年开始有很多公司开始小范围内尝试使用,再到今天,OpenResty 知名的 CDN 行业,各大电商,手游领域都有应用,我们对 OpenResty 源码发布包和 Windows 二进制发布包的下载做了一个统计,这些流量分别来自 135 个国家的 3072 个城市,特别是今年下半年以来,每个月都有 5 万次以上的对发布包的下载请求。其中有近一半的用户来自中国。

OpenResty 官方介绍

OpenResty 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

OpenResty 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

OpenResty 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

OpenResty 的架构以及应用场景

OpenResty 与其他常规开发语言或框架截然不通,可以说是另辟蹊径的把两个极其优秀的组件 NGINX 和 Lua 进行糅合,充分利用各自的优势相互弥补。不仅保留了 NGINX 的高性能 web 服务特征,Lua 更是在近乎不损失性能的前提下可以快速、简单的进行业务功能开发,同时享有代码动态装载和卸载的特性。在运行速度、可伸缩性、灵活度以及开发效率之间寻找一个平衡点。

目前 OpenResty 的主要应用场景有:HTTP Proxy、API Server、Web Application。

  1. HTTP Proxy:这个在 CDN 行业用的比较多的,请求改写与路由调度、缓存控制、Web 应用防火墙(WAF) 等。
  2. API Server:各种智能设备 APP、广告拉取等请求比较密集,并发、QPS 比较高的环境。
  3. Web Application: OpenResty 创建初衷就是为了做这个,新浪移动已经在所有产品线使用OpenResty,核心业务也在不断从 PHP 迁移到 Lua,京东已经开始使用这套方案解决高并发环境下的页面应用。

OpenResty/Lua 学习

OpenResty最佳实践

锤子手机发布会提到的 OpenResty 是什么?[infoq介绍文章]

坚持原创技术分享,您的支持将鼓励我继续创作!