微服务架构原理与治理实践-2|青训营笔记

82 阅读2分钟

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

核心服务治理功能

服务发布(deployment)

定义: 即指让一个服务升级运行新的代码的过程。

难点: 很多服务都是在线的,不能在修改的时候停止服务,要思考三个问题:1.不能服务停止。2.服务抖动怎么办。3。万一服务升级出现错误怎么回滚。

方案一:

蓝绿部署:一个服务中换分成两个cluster,一个断开并升级,完成后重连再升级另一个cluster中的instance。

特点:简单、稳定,但是需要两倍资源。

方案二:灰度发布(也称金丝雀发布)

image.png 特点:需要精细化切分、回滚很繁琐。

流量治理(流量控制)

可以基于地区、集群、实例(不同实例部署的机器的新老程度)、请求等维度,对端到端的流量的路由路径进行加权选择。如图。

image.png

负载均衡(Load Balance)

定义: 负责分配请求在每个下游实例上的分布。

稳定性治理

线上服务总会出问题,这与程序的正确性无关。

  • 网络攻击
  • 流量突增
  • 机房断电
  • 光纤被挖
  • 机器故障
  • 网络故障
  • 。。。。。。

治理方法

  1. 限流:发送大量请求时拒绝部分请求。
  2. 熔断:请求过大时断开连接。
  3. 过载保护:检测实例部署的机器的情况(如cpu使用率)来看是否拒绝请求。
  4. 降级:资源不够时接受高等级的请求,拒绝掉低级的请求。

字节服务治理实例

重试的意义

对于本地的函数调用,认为是没有什么重试的意义的。对于远程网络函数调用,重试可以避免偶发的错误,提高SLA(Service-Level Agreeme)

  • 降低错误率
  • 降低长尾延时:对于偶尔耗时较长的请求,重试请求有机会提前返回。
  • 容忍暂时性的错误:如临时出现网络抖动。
  • 避开下游故障实例:一个服务中可能有少量故障实例,重试其他实例可以成功。

重试的难点

重试风暴

image.png