如何避免自己ddos自己

早些时间读到一篇文章, how to avoid a self inflicted ddos ,觉得这都是常识,不相信自己会ddos自己。直到有天同事跟我打电话,说我把他们的接口干死了。我在上万台机器部署了分钟级cron,肯定被我ddos了,这里总结下,如何避免ddos自己。

自己ddos自己,一般由客户端导致,通常和定时任务有关。为了避免ddos自己,应该特别注意:

1 定时任务加上随机等待

例如linux的cron中,经常可以看到 sleep $(($RANDOM\%30)) && <command> 这里执行 <command> 前随机等待30S,避免0s的峰值。

2 失败重试采用指数时间间隔

通常失败后重试,都是一个固定的时间间隔,例如:等待1s,然后重试,直到超过最大重试次数。暂时故障时,固定间隔重试会导致大量重试。此时可以采用指数间隔,例如第一次1s,第二次2s,第三次4s,第四次8s。还可以采用斐波那契间隔,第一次1s,第二次1s,第三次2s,第四次3s,第五次5s。斐波那契比指数重试间隔要小。

3 客户端缓存

对于不经常改变的内容,可以增加客户端缓存。

Author: zhengzhiyong

Created: 2018-03-04 日 16:07

Emacs 24.5.1 (Org mode 8.2.10)

Validate