微服务网关

什么是服务网关

服务网关 = 路由转发 + 过滤器

1、路由转发:接收一切外界请求,转发到后端的微服务上去;
2、过滤器:在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。

实现网关的三个方式

  • 每个服务自己实现一遍
  • 写到一个公共的服务中,然后其他所有服务都依赖这个服务
  • 写到服务网关的前置过滤器中,所有请求过来进行权限校验

服务网关技术选型

架构图
  • 智能路由:接收外部一切请求,并转发到后端的对外服务open-service上去;

  • 注意:我们只转发外部请求,服务之间的请求不走网关,这就表示全链路追踪、内部服务API监控、内部服务之间调用的容错、智能路由不能在网关完成;当然,也可以将所有的服务调用都走网关,那么几乎所有的功能都可以集成到网关中,但是这样的话,网关的压力会很大,不堪重负。

  • 权限校验:只校验用户向open-service服务的请求,不校验服务内部的请求。服务内部的请求有必要校验吗?

  • API监控:只监控经过网关的请求,以及网关本身的一些性能指标(例如,gc等);

  • 限流:与监控配合,进行限流操作;

  1. 使用计数器实现请求限流。限流的要求是在指定的时间间隔内,server 最多只能服务指定数量的请求。实现的原理是我们启动一个计数器,每次服务请求会把计数器加一,同时到达指定的时间间隔后会把计数器清零;
  2. 令牌桶算法。在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流!
  • API日志统一收集:类似于一个aspect切面,记录接口的进入和出去时的相关日志
  • A|B测试:A|B测试时一块比较大的东西,包含后台实验配置、数据埋点(看转化率)以及分流引擎,在服务网关中,可以实现分流引擎,但是实际上分流引擎会调用内部服务,所以如果是按照上图的架构,分流引擎最好做在open-service中,不要做在服务网关中。
  • 熔断:熔断是当依赖的服务已经出现故障时,为了保证自身服务的正常运行不再访问依赖的服务,防止雪崩效应

熔断器有三种状态:

  • 关闭状态:服务正常,并维护一个失败率统计,当失败率达到阀值时,转到开启状态
  • 开启状态:服务异常,调用 fallback 函数,一段时间之后,进入半开启状态
  • 半开启装态:尝试恢复服务,失败率高于阀值,进入开启状态,低于阀值,进入关闭状态

参考资料

https://zhuanlan.zhihu.com/p/101341556
https://blog.csdn.net/ztemt_sw2/article/details/106208946
https://studygolang.com/articles/13254
https://blog.csdn.net/micl200110041/article/details/82013032

你可能感兴趣的:(微服务网关)