- 避免过载,是负载均衡策略的一个重要目标。但是无论你的负载均衡策略效率有多高,随着压力不断上升,系统的某个部位总会过载。运维一个可靠系统的一个根本要求,就是能够优雅地处理过载情况。
- 简单地使用CPU数量作为资源配给的主要信号就可以工作得很好,原因如下:
(a)在有垃圾回收(GC)机制的编程环境里,内存的压力通常自然而然地变成CPU的压力(在内存受限的情况下,GC会增加)。
(b)在其他编程环境里,其他资源一般可以通过某种比例进行配置,以便使这些资源的短缺情况非常罕见。
- 应对过载:
(a)给每个用户设置限制
(b)客户端侧的节流机制
自适应节流的技术来实现客户端节流。具体地说,每个客户端记录过去两分钟内的以下信息:
- 请求数量(requests):应用层代码发出的所有请求的数量总计(指运行于自适应节流系统之上的应用代码)。
- 请求接受数量(accepts):后端任务接受的请求数量。
在常规情况下,这两个值是相等的。随着后端任务开始拒绝请求,请求接受数量开始比请求数量小了。客户端可以继续发送请求直到requests=K *accepts,一旦超过这个限制,客户端开始自行节流,新的请求会在本地直接以一定概率被拒绝(在客户端内部),概率使用公式进行计算:
公式&