api-gateway介绍和分析
2017-07-12 本文已影响858人
jey恒
网关架构模型
- 没有网关之前,面对后端服务,前端要对接n个系统
- 没有统一入口所以,鉴权,监控,熔断等都要重复实现
参考
- http://www.scienjus.com/api-gateway-and-netflix-zuul/
- zuul压测和性能优化
https://mp.weixin.qq.com/s?__biz=MzAxOTg2NDUyOA==&mid=2657554861&idx=1&sn=5de35bd5f46608505eaa4b1a0dc724a3&scene=0#wechat_redirect - 全解析
http://tech.lede.com/2017/05/16/rd/server/SpringCloudZuul/ - 日志规范
http://tech.lede.com/2017/06/30/rd/server/loggingHabit/ - 复杂模型业务处理方式 http://tech.lede.com/2017/02/13/rd/server/ChainOfResponsibilityForActivity/ 【类似注册形式】
演变
image.png开源产品
- kong,go方面的
- zuul
spring cloud zuul
- 功能
动态路由
监控
安全
认证鉴权
压力测试
金丝雀测试
审查
服务迁移
负载剪裁
静态应答处理 - 可扩展性
- 鉴权,监控,路由,灰度
- 如何快速落地到我们的业务中
zuul组件
- ribbon https://yq.aliyun.com/articles/61823 [可选]
- Hystrix [熔断器 可选]
- eureka 【注册中心 可选】
zuul整体架构
image.png流程分析
- @EnableZuulServer 普通网关,只支持基本的route与filter.
- @EnableZuulProxy 配合上服务发现与熔断开关的上面这位增强版,具有反向代理功能 【我们需要的】
zuul filter
-
PreDecorationFilter:该过滤器根据提供的RouteLocator确定路由到的地址,以及怎样去路由。该路由器也可为后端请求设置各种代理相关的header。
-
RibbonRoutingFilter:该过滤器使用Ribbon,Hystrix和可插拔的HTTP客户端发送请求。serviceId在RequestContext.getCurrentContext().get("serviceId") 中。该过滤器可使用不同的HTTP客户端,例如
Apache HttpClient:默认的HTTP客户端
Squareup OkHttpClient v3:如需使用该客户端,需保证com.squareup.okhttp3的依赖在classpath中,并设置ribbon.okhttp.enabled = true 。
Netflix Ribbon HTTP client:设置ribbon.restclient.enabled = true 即可启用该HTTP客户端。需要注意的是,该客户端有一定限制,例如不支持PATCH方法,另外,它有内置的重试机制。
- SimpleHostRoutingFilter:该过滤器通过Apache HttpClient向指定的URL发送请求。URL在RequestContext.getRouteHost() 中。
动态路由【避免网关发版本】【灰度】(api-getway admin or restapi)
- 继承SimpleRouteLocator 类 重载locateRoutes方法
- 获取请求上下文得到用户id,根据redis或者db配置规则 进行路由转发到特定的机器
- 如何上线【walle上简单操作分开发特定机器结合开发手动更新路由】实现简单灰度方案
微服务中sso和权限方案
- 网关层进行权限管理 ;
- 各服务独立实现校验;
- 校验逻辑实现在各服务上,通过共享数据或者授权中心等方式实现;
- 参考:https://my.oschina.net/crazyFeng1/blog/867428
协议解析
如何在现有业务系统中落地
- 思考
-
验证
-
运维和发布,灰度Fenix