这是我参与「第五届青训营 」伴学笔记创作活动的第2天
今日学习核心服务治理,这是平时coding过程中比较容易忽略的地方,本笔记主要学习并记录。包含服务发布、流量治理、负载均衡和稳定性治理等核心功能。
服务发布:让一个服务升级运行新的代码的过程
难点:服务不可用、服务抖动、服务回滚。
方案:
1、蓝绿部署,需要两倍资源,简单稳定。
2、灰度发布(金丝雀发布),比较难。
还有其他方案,仍需进一步学习。
稳定性治理:线上服务总会出问题,这与程序的正确性无关。
可能出现的问题:网络攻击、流量突增、机房断电、光纤被挖、机器故障、网络故障、机房空调故障等。
2022年12月18日,阿里云香港Region可用区C便因为机房水冷装置出现故障导致大规模服务中断,整个故障持续时间超过15个小时,这对阿里云的技术品牌力损伤非常大。
应对方案:限流、熔断、过载保护、降级。
字节跳动服务实践治理
重试的意义:网络调用很多时候都可以用重试。但是默认不用。
- 降低错误率:假设单次请求的错误概率为0.01,那么连续两次错误概率则为0.001.
- 降低长尾延时:对于偶尔耗时较长的请求,重试请求有机会提前返回。
- 容忍暂时性错误:某些时候系统会有暂时性异常(例如网络抖动),重试可以尽量规避
- 避开下游故障实例:一个服务中可能会有少量实例故障(例如机器故障),重试其他实例
重试的难点:
- 幂等性问题
- 重试风暴:容易引起雪崩,调用链路有几十层,retry很多次就会导致底层宕机,大部分成功的话才有必要重试。
重试策略:
- 防止链路重试:防止每层都发生重试,只有出问题的最一下层发生重试。
- Hedged request:对冲请求,对于可能超时(或延时高)的请求,重新向另一个下游实例发送一个相同的请求,并等待先到达的响应。
总结:
认识到服务治理的重要性以及部分方案,这在平时coding中不易学习到,需要很多的实践经验来学习,因此也学习到字节跳动的服务治理实践。仍需进一步学习