基本概念
- RPC Remote Procedure Call
问题场景
解决方案
-
重试风暴、系统雪崩
-
重试的最终目的是提高成功率
-
由于网络抖动,重试要有退让机制
- 线性、随机、指数
-
熔断机制
- 断路器模式
- 滑动窗口,调用成功率阈值
- 访问者自带断路器
- 断路器模式
-
grpc 重试次数链路指数放大问题
- 重试的最终目的是只在发生问题的地方进行重试,不用全链路重试
- 下游返回特殊码 1,表示已经重试过,上游不要再重试
- 上游重试调用时带上特殊码 2,表示上游以重试方式调用,下游不要再重试
- 即使存在极端情况下丢消息问题,也只是增加重试倍数(1.2),不会指数放大
-
超时策略导致重试失效
- 不合理的超时,上游超时时间短、下游超时时间长
- 利用 DDL 实现超时,总时间超时不再向下调用
-
为了处理重试、超时问题,对系统业务逻辑有侵入
- 可以在 gRPC 中间件进行处理,中间件配置直接从 apollo 读取,做到业务无感知