OpenResty与API Gateway
Nov 27 2017
公司业务向微服务方向迁移实践中, API Gateway成为接入层最重要的部分, 在完成开发的同时给同事做了一次OpenResty的分享, 以下是分享的内容整理.
当我谈论高性能时我们谈论什么 ?
讨论时间, 大家自由发挥
- 机器
- 语言
- 架构
学习指南 #1
同步编程
- 多线程, 用户态/内核态相互切换
- 阻塞, 带来线程切换
异步编程
OpenResty
无聊的分割线
- 基于lua的Nginx开发
- Nginx的异步机制+lua coroutine
- 够用的内置lua libs cosocket异步支持
- 内置cache
ngx_lua模块的原理
- 每个worker(工作进程)创建一个Lua VM,worker内所有协程共享VM;
- 将Nginx I/O原语封装后注入 Lua VM,允许Lua代码直接访问;
- 每个外部请求都由一个Lua协程处理,协程之间数据隔离;
- Lua代码调用I/O操作等异步接口时,会挂起当前协程(并保护上下文数据),而不阻塞worker;
- I/O等异步操作完成时还原相关协程上下文数据,并继续运行;
学习指南 #2
API Gateway
- 微服务
- 入口
- 授权、监控、负载均衡、缓存、请求分片和管理、静态响应处理
学习指南 #3
Kong
- 基于Openresty
- 自带武器库
- 灵活的插件定制
学习指南 #4
定制需求
- eebo auth
- 独立auth模块
- 灵活配置api是否需要auth
- Python服务无需关注认证细节
- eebo limiting
- 基于内置rate-limiting开发
- 提供
company_id/user_id
维度
- eebo balancer
自带的插件
- CORS
- IP Restriction
- Correlation ID
- Syslog