OpenResty
构建高性能服务端
高性能的关键点
- 缓存
- 异步非阻塞
- 并行

OpenResty
基于 Nginx 与 LuaJIT 的高性能 Web 平台
先来个 Hello, World
高性能,轻松应用C10K
糅合高性能的 Nginx 和脚本语言 Lua (LuaJIT) 的快捷、简单开发 (近乎不损失性能),100% 异步非阻塞,轻松应对C10K
对比
-
HTTP Request -> Web Server -> Business Logic -> Cache -> DB
-
HTTP Request -> OpenResty -> DB
应用场景
-
web应用
-
接入网关
-
Web防火墙
-
缓存服务器
-
其他
web应用
进行一些业务逻辑处理,甚至进行耗CPU的模板渲染,一般流程包括mysql/Redis/HTTP获取数据、业务处理、产生JSON/XML/模板渲染内容
如:京东商品详情页

接入网关
-
数据校验前置
-
缓存前置
-
数据过滤
-
API请求聚合
-
AB测试、灰度发布
-
降级、监控等功能
Web防火墙
可以进行IP/URL/UserAgent/Referer黑名单、限流等功能
缓存服务器
可以对响应内容进行缓存,减少到达后端的请求,从而提高性能
其他
如静态资源服务器、消息推送服务、缩略图裁剪等
例子
- 京东商品列表页、详情页
- 手机微博 - 灰度发布
-
酷狗音乐 - 消息推送服务等
一些实践
优点
缺点
其它
一个请求分成多个执行阶段
- set_by_lua: 流程分支处理判断变量初始化
- rewrite_by_lua: 转发、重定向、缓存等功能(例如特定请求代理到外网)
- access_by_lua: IP 准入、接口权限等情况集中处理(例如配合 iptable 完成简单防火墙)
- content_by_lua: 内容生成
- header_filter_by_lua: 应答 HTTP 过滤处理(例如添加头部信息)
- body_filter_by_lua: 应答 BODY 过滤处理(例如完成应答内容统一成大写)
- log_by_lua: 会话完成后本地异步完成日志记录(日志可以记录在本地,还可以同步到其他机器)
FFI
LuaJIT 扩展库,允许从纯 Lua 代码调用外部 C 函数,使用 C 数据结构
火焰图

Text
纵向表示调用栈的深度,横向表示消耗的时间
入门资料
结束,谢谢..
OpenResty构建高性能服务端
By wlwr
OpenResty构建高性能服务端
- 625