微服务的治理 | 青训营笔记

52 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天。

内容受本人水平限制,若有错误还望各位看官不吝赐教。


服务治理

服务发布

这是一个服务升级运行新代码的过程。

  • 蓝绿部署

    • 两套生产环境:蓝环境(当前版本,有实时流量),绿环境(包含新版本代码)
    • 先部署新版本代码到绿环境,然后将流量路由到绿环境,检查其运行情况,如有异常可重新将流量路由到蓝色版本。
  • 金丝雀发布(灰度发布)

    • 同样是两套生产环境
    • 不同于前者,灰度发布采用逐渐过渡的方式,即绿环境的流量比例不断增加,如有异常可重新路由流量。

请求重试

一般,远程函数调用相较于本地函数调用来说,出错可能性更大。可能是由于网络抖动、下游负载高(宕机了)等因素造成。

当然不可达的情况一般来说只是暂时的。我们可重新调用(重试)

其意义在于:

  1. 降低错误率
  2. 降低长尾(同类请求中,请求时间大于均值的)延时
  3. 容忍暂时错误
  4. 重试时可指定其他服务实例,避开下游故障实例

话虽如此,重试也不可盲目,比如在长调用链路下,重试的次数将呈指数级上涨。

重试策略

  1. 限制重试请求占正常请求比例(如 1-2%)

  2. 防止长链路的重试(可返回 特殊的状态码来表示失败但别重试)

  3. Hedged Requests

    • 对于可能超时(或延时高)的请求,重新向另一个下游实例发送一个相同的请求,并等待先到达的响应

流量治理

在微服务架构中,可以从各个维度对端到端的流量在链路上进行精确控制(当然这需要基础框架的支持)

  • 控制维度
    • 地区维度
    • 集群维度
    • 实例维度
    • 请求维度

稳定性治理

  1. 限流(限制Max QPS,拒绝过多请求)
  2. 熔断(中断请求路径)
  3. 过载保护(高负载实例去主动拒绝一些请求)
  4. 降级(当服务的处理能力不足时,优先响应优先级高的请求)