1、频率限制:在接口入口处,甚至系统的入口处应该设置频率限制,为接口设置单位时间内最大的处理量,同时记录单位时间内已经处理的请求量,当请求量大于最大处理量的时候,直接拒绝外部的请求,保护内部系统的心脏承受能力。
2、超时丢弃:这里的超时是指请求从进入接收缓存区到接口从缓存区取出请求准备处理的时间超过了一定阈值(比如前端超时时间)。如果发生超时,则说明就算处理了取出的数据,前端也已经超时了,后端接口做的就是无用功,倒不如就在这里一次性丢弃。这里的缓存区指的是内核缓存区。
3、修改socket缓存区大小:根据接口处理能力和前端超时时间来设置socket缓存区大小,这样的话利用socket缓存区充当队列,超过队列长度的请求就直接被丢弃了,这样也可以防止系统雪崩。只是对用户不那么友好。有人给出的参考计算式:缓冲区大小=(前端超时时间-请求处理时间-前端网络延时*2)*(每秒最大处理请求数/1000)*请求包大小。