issues
search
go-dao
/
homework
homework for golang high level training camp
0
stars
0
forks
source link
lesson5
#2
Open
emptyWang
opened
3 years ago
emptyWang
commented
3 years ago
限流的常用方式
单机限制:利用令牌桶或者漏桶的方式对单个节点做限流,
动态流控:QPS限流,缺点,无法准确量化衡量QPS消耗的资源量
全局限流:分布式限流,给每个用户设置限流额度,为了防止过热,可提前分配quota,让调用方本地根据quota额度限流.
客户端流控:API返回层面控制重试的节奏(时间点与频率)
熔断的常用方式
超配额触发熔断
失败多次触发熔断
熔断部分可以分配给Gutter集群处理
降级的常用方式
优先保证响应重要性高的服务,将服务进行重要性标记,服务过载时,根据重要性高低,优先保证资源分配给重要性高的服务
整体降低回复数据的质量来缓解压力
UI 模块化,非核心模块降级。
BFF 层聚合 API,模块降级。
页面上一次缓存副本。
默认值、热门推荐等。
流量拦截 + 定期数据缓存(过期副本策略)。
处理策略
页面降级、延迟服务、写/读降级、缓存降级
抛异常、返回约定协议、Mock 数据、Fallback 处理
重试的注意事项
限制重试次数和基于重试分布的策略(重试比率: 10%)。
随机化、指数型递增的重试周期: exponential ackoff + jitter。
client 测记录重试次数直方图,传递到 server,进行分布判定,交由 server 判定拒绝。
只应该在失败的这层进行重试,当重试仍然失败,全局约定错误码“过载,无须重试”,避免级联重试。
注意重试打散化处理,避免形成持续的瞬间峰值QPS过高
负载均衡的常用方式
按照真实负载情况分发服务
选择 backend:CPU,client:health、inflight、latency 作为指标,使用一个简单的线性方程进行打分。
对新启动的节点使用常量惩罚值(penalty),以及使用探针方式最小化放量,进行预热。
打分比较低的节点,避免进入“永久黑名单”而无法恢复,使用统计衰减的方式,让节点指标逐渐恢复到初始状态(即默认值)。
当前发出去的请求超过了 predict lagtency,就会加惩罚。
限流的常用方式
熔断的常用方式
降级的常用方式
重试的注意事项
负载均衡的常用方式