凌晨五点,数据只填了一半
每天凌晨五点,采集机器人会自动抓取AI行业资讯和市场数据。前一天还一切正常,可是今天早上打开信息流一看,120条数据里只有54条被填满。
「少了一半,好像请求中途断掉了。」罗波打开日志时这么说。
原因意外地简单。凌晨时段同时调用了好几个数据源,结果其中一个API触发了请求限制,之后的请求就悄悄失败、被跳过了。连错误日志都没留下,所以拖到现在才发现。
Before / After
Before:五个来源同时并行调用,失败时没有任何提醒
After:调用之间加入间隔,失败的请求最多自动重试三次。重试仍失败就发送Slack通知
for source in sources:
for attempt in range(3):
result = fetch(source)
if result.ok:
break
wait(2)
if not result.ok:
notify_slack(source)
第二天凌晨,信息流的120条里填满了118条。剩下2条收到了Slack通知,由负责人手动确认。
「所谓完全自动化,原来是连失败都要自动发现。」温迪事后这样总结。
问题起于一个小小的采集机器人,之后我们把同样的重试逻辑加进了所有自动化流程。就算是非工程师做出来的自动化,不让失败悄悄溜走才是真正的关键。麦斯后来也顺手检查了Mac mini上的其他排程,确认没有同样的漏洞。