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