分布式API网关初步了解
1 背景
每个微服务常用的功能,例如鉴权,限流,日志,监控等功能放在一个地方实现,于是可以使用分布式API网关去实现,
2 传统和分布式API网关做法
将客户端以及service需要访问后端的服务,统一通过分布式API网关,将具体的请求进行代理到后端的web服务器
3 kong请求流程
- 总体流程
客户端请求发起然后到达分布式API网关,API网关进行安全校验鉴权等操作,再把具体的请求在路由到后端的微服务当中,理解为反向代理即可
- 架构设计
kong是在nginx基础上开发的,具体是nginx上层嵌入形成openresty,再上层进行一个开发变成kong
4 API网关功能
- 后端web服务器功能
work进程4个,connection是1024,http服务器中有server并且listen端口是7001,请求应答式
实现的功能是请求过来后,会打印出请求的远端的ip地址
启动下服务
- nginx
监听端口,转发上游服务器处理
- openresty
master进程结束后调用init_by_lua的接口,然后fork出四个不同的进程,初始化后调用init_worker_by_lua接口,现在就是openresty启动完毕
当客户端发起请求,nginx把http请求分成11个阶段,openresty就是在nginx上嵌入了一些lua代码,例如在握手阶段修改证书,设置具体属性,重写url,进行鉴权(黑白名单,用户认证token),而后才开始处理请求,请求内容本地生成(heade和body可以用来过滤),或者内容生成依赖于upstream上游服务器,转发给到上游服务器
最终打印日志
总结就是openresty在nginx上面嵌入了lua动态语言代码
lua协程
原来是需要主线程多次使用callback回调完成功能,通过协程可以一起实现
- kong
在openresty上实现应用
插件机制
kong的抽象
路由route,service,upstream,target
5 kong操作
- 配置upstreams
加一个target
- 配置services
填写route
- 配置插件plugins
- consumer
用于用户安全认证