服务端过载保护存在的问题
之前有介绍服务端过载保护 ,当某个请求超过服务端超过资源的配额时,服务端会立即返回一个过载错误,该错误会比真正的业务逻辑 消耗的资源少的多。
但是,返回过载错误仍然会消耗一定数量的资源。 如果发送过载错误的数量很多,那么消耗的资源仍可能很大。
客户端的过载保护可以很好的解决这个问题。
一 客户端拒绝请求计算公式
- requests :客户端尝试请求的次数
- accepts:服务端接受的请求次数
- K:可调参数,可用来调节系统的激进程度。(K值要大于1)
客户端任务记录的最近一段时间内的以requests和accepts信息,当客户端检测到其最近的大部分请求返回“过载”错误时,客户端会开始自动调节请求量。超过上限的请求客户端直接失败,请求不会到达服务端。
在正常情况下,request 和accepts值是相等的。当后端开始拒绝流量,数量accepts开始
小于数量requests
。
客户端可以继续向后端发出请求,当requests大于
K倍的accepts。概率计算公式开始大于0,
客户端开始自我调节,新的请求在本地被拒绝。
举例
K值设置成1.1。当服务正常时,过去1分钟内,客服端发送了100条请求,并且服务端都接受了该请求。 此时客户端计算拒绝概率是0,客户端不会拒绝请求。
当过去一分钟客户端发送了100条请求,被服务端拒绝请求了10条,只接受了90。
此时客户端计算得到拒绝概率是 (100-1.1*90)/101 = 1/101 。客户端开始自我调节,直接拒绝发送请求。