知识卡片

自适应节流让客户端自主降速

普通读书笔记卡 · 1617

内容

后端过载时,持续拒绝每个请求本身也要消耗资源,极端情况下可能因忙于发送拒绝回复而彻底瘫痪。 更聪明的解法是把节流下放到客户端:只需记住过去两分钟”自己发出的请求数”和”被接受的请求数”, 一旦发出量超过接受量的 K 倍(推荐 K=2),就按两数比值算出的概率本地直接丢弃请求,不让它触达 网络层。反直觉之处:本地拒绝越多,”发出请求数”计数依旧在涨,这正是让丢弃概率随差距自动收敛 的设计意图。

参考来源

- 位置:《SRE:Google运维解密》第21章《应对过载》"客户端侧的节流机制"一节(源文件:_epub-src/OEBPS/Text/0009_0012.xhtml) - 结论依据:原文定义每个客户端记录过去两分钟的 requests(发出请求数)与 accepts(接受请求数),"客户端可以继续发送请求直到requests=K * accepts,一旦超过这个限制,客户端开始自行节流……当客户端开始自己拒绝请求时,requests会持续上升,而继续超过accepts……这恰恰是这个算法的重点",并说明推荐 K=2。 - 原始内容:客户端可以继续发送请求直到requests=K * accepts,一旦超过这个限制,客户端开始自行节流,新的请求会在本地直接以一定概率被拒绝……我们发现自适应节流算法在实际中效果良好,可以整体上保持一个非常稳定的请求速率。