这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天。
内容受本人水平限制,若有错误还望各位看官不吝赐教。
服务治理
服务发布
这是一个服务升级运行新代码的过程。
-
蓝绿部署
- 两套生产环境:蓝环境(当前版本,有实时流量),绿环境(包含新版本代码)
- 先部署新版本代码到绿环境,然后将流量路由到绿环境,检查其运行情况,如有异常可重新将流量路由到蓝色版本。
-
金丝雀发布(灰度发布)
- 同样是两套生产环境
- 不同于前者,灰度发布采用逐渐过渡的方式,即绿环境的流量比例不断增加,如有异常可重新路由流量。
请求重试
一般,远程函数调用相较于本地函数调用来说,出错可能性更大。可能是由于网络抖动、下游负载高(宕机了)等因素造成。
当然不可达的情况一般来说只是暂时的。我们可重新调用(重试)
其意义在于:
- 降低错误率
- 降低长尾(同类请求中,请求时间大于均值的)延时
- 容忍暂时错误
- 重试时可指定其他服务实例,避开下游故障实例
话虽如此,重试也不可盲目,比如在长调用链路下,重试的次数将呈指数级上涨。
重试策略
-
限制重试请求占正常请求比例(如 1-2%)
-
防止长链路的重试(可返回 特殊的状态码来表示失败但别重试)
-
Hedged Requests
- 对于可能超时(或延时高)的请求,重新向另一个下游实例发送一个相同的请求,并等待先到达的响应
流量治理
在微服务架构中,可以从各个维度对端到端的流量在链路上进行精确控制(当然这需要基础框架的支持)
- 控制维度
- 地区维度
- 集群维度
- 实例维度
- 请求维度
稳定性治理
- 限流(限制Max QPS,拒绝过多请求)
- 熔断(中断请求路径)
- 过载保护(高负载实例去主动拒绝一些请求)
- 降级(当服务的处理能力不足时,优先响应优先级高的请求)