OpenResty与API Gateway
Nov 27 2017公司业务向微服务方向迁移实践中, API Gateway成为接入层最重要的部分, 在完成开发的同时给同事做了一次OpenResty的分享, 以下是分享的内容整理.
当我谈论高性能时我们谈论什么 ?
讨论时间, 大家自由发挥
- 机器
- 语言
- 架构
- reactor
- coroutine
- cache
学习指南 #1
- reactor
- coroutine
- Tornado代码阅读笔记 IOLoop
同步编程
- 多线程, 用户态/内核态相互切换
- 阻塞, 带来线程切换
异步编程
- 事件驱动
- 回调
- 协程
OpenResty
- Nginx
lua-nginx-module
- lua resty libs
无聊的分割线
- 基于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
- OpenResty 系列课程
- agentzh 的 Nginx 教程
- OpenResty 最佳实践
- nginx-lua-module-zh-wiki
API Gateway
- 微服务
- 入口
- 授权、监控、负载均衡、缓存、请求分片和管理、静态响应处理
学习指南 #3
- 微服务
- API Gateway
Kong
- 基于Openresty
- 自带武器库
- 灵活的插件定制
学习指南 #4
- Kong源码分析
- 深入理解orange
定制需求
- eebo auth
- 独立auth模块
- 灵活配置api是否需要auth
- Python服务无需关注认证细节
- eebo limiting
- 基于内置rate-limiting开发
- 提供
company_id/user_id
维度
- eebo balancer
- 提供私有服务
- 强大的分布式分发
自带的插件
- CORS
- 用于处理跨域请求
- IP Restriction
- IP 黑白名单
- Correlation ID
- 为每个请求生成唯一请求id
- 方便定位, 跟踪日志
- Syslog
- 推送日志到Syslog-