api-gateway介绍和分析

网关架构模型

  • 没有网关之前,面对后端服务,前端要对接n个系统
  • 没有统一入口所以,鉴权,监控,熔断等都要重复实现

参考

image.png

演变

image.png

开源产品

  • kong,go方面的
  • zuul

spring cloud zuul

  • 功能
    动态路由
    监控
    安全
    认证鉴权
    压力测试
    金丝雀测试
    审查
    服务迁移
    负载剪裁
    静态应答处理
  • 可扩展性
  • 鉴权,监控,路由,灰度
  • 如何快速落地到我们的业务中

zuul组件

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和权限方案

协议解析

如何在现有业务系统中落地

  • 思考
image.png
  • 验证

  • 运维和发布,灰度Fenix

自建网关

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容