微服务专栏地址
目录
1. 简介
通过以下几个问题去理解微服务中的一个重要组件:API网关。
- 什么是API网关
- 为什么需要API网关
- API网关在微服务架构体系中处于什么位置
- 网关技术实现有哪些
- zuul网关工作原理是什么样的
- 技术上如何选型
2. 什么是API网关
- API网是一个反向路由:屏蔽内部细节,为调用者提供统一入口,接收所有调用者请求,通过路由机制转发到服务实例。
- API网关是一组“过滤器”集合:可以实现一系列与核心业务无关的横切面功能,如安全认证、限流熔断、日志监控。
3. 为什么需要API网关
什么是API网关中已给出理由,简单总结:
- 屏蔽内部细节
- 反向路由
- 安全认证
- 限流熔断
- 日志监控
4. API网关在微服务架构体系中处于什么位置
4.1 调用者眼中的API网关
- 统一入口
- 内部服务对于调用者是透明的
4.2 所处的位置
- 处于负载均衡与业务服务之间
- API网关也可实现负载均衡功能
5. 网关技术实现有哪些
简单列举,不做比较,有兴趣可查询资料,后续为基于zuul网关来理解工作流程原理
- zuul:是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用。Spring Cloud已集成
- kong:是一款基于Nginx_Lua模块写的高可用,易扩展由Mashape公司开源的API Gateway项目
6. zuul网关工作原理是什么样的
因为后续API网关组件会聚焦于zuul,这里对zuul工作原理提前学习。
6.1 整体处理流程图
- zuul本身是一个Servlet
- HttpServlet Request请求到达Zuul Servlet
- 通过ZuulFilter Runner ,并且根据routing filter 类型执行filter 链
- 根据FilterType类型不同,执行的顺序不同且可完成不同的功能
- pre:在请求被路由之前调用,可实现日志监控、身份认证、黑名单等功能
- route:在路由请求时候被调用
- post:在route和error过滤器之后被调用,可实现审计、统计等功能
- error:处理请求时发生错误时被调用、可实现统一异常处理等功能
- Request Context:在请求生命周期中共享变量
- Filter的实现是可插拔的
- 脚本实现Filter
- 发布到filter目录中
- 由filter manager与filter loader自动加载
6.2 请求生命周期
- 拦截请求
- 根据filter类型,执行已加载的filter chain
- 返回请求
7. 技术上如何选型
- 若使用的微服务框架是Spring Cloud,可选择Netflix的zuul,已经很好的集成到SC中
- kong ,当然,能力强的可以自定义实现满足自己需求的API网关