核心服务治理学习笔记| 青训营笔记

28 阅读2分钟

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

今日学习核心服务治理,这是平时coding过程中比较容易忽略的地方,本笔记主要学习并记录。包含服务发布、流量治理、负载均衡和稳定性治理等核心功能。

服务发布:让一个服务升级运行新的代码的过程

难点:服务不可用、服务抖动、服务回滚。

方案:

1、蓝绿部署,需要两倍资源,简单稳定。

2、灰度发布(金丝雀发布),比较难。

还有其他方案,仍需进一步学习。

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

可能出现的问题:网络攻击、流量突增、机房断电、光纤被挖、机器故障、网络故障、机房空调故障等。

2022年12月18日,阿里云香港Region可用区C便因为机房水冷装置出现故障导致大规模服务中断,整个故障持续时间超过15个小时,这对阿里云的技术品牌力损伤非常大。

应对方案:限流、熔断、过载保护、降级。

image.png

字节跳动服务实践治理

重试的意义:网络调用很多时候都可以用重试。但是默认不用。

image.png

  • 降低错误率:假设单次请求的错误概率为0.01,那么连续两次错误概率则为0.001.
  • 降低长尾延时:对于偶尔耗时较长的请求,重试请求有机会提前返回。
  • 容忍暂时性错误:某些时候系统会有暂时性异常(例如网络抖动),重试可以尽量规避
  • 避开下游故障实例:一个服务中可能会有少量实例故障(例如机器故障),重试其他实例

重试的难点:

  • 幂等性问题
  • 重试风暴:容易引起雪崩,调用链路有几十层,retry很多次就会导致底层宕机,大部分成功的话才有必要重试。

重试策略:

  • 防止链路重试:防止每层都发生重试,只有出问题的最一下层发生重试。
  • Hedged request:对冲请求,对于可能超时(或延时高)的请求,重新向另一个下游实例发送一个相同的请求,并等待先到达的响应。

总结:

认识到服务治理的重要性以及部分方案,这在平时coding中不易学习到,需要很多的实践经验来学习,因此也学习到字节跳动的服务治理实践。仍需进一步学习