One Job at a Time: ShedLock-Inspired Concurrency Control in Go
不久前,我在做一个需要在固定时间间隔运行cron作业的任务。一切都运行得非常完美。我只需在Spring Boot代码中添加一个@Scheduled注解,任务就会像变魔术一样被触发。Spring让调度变得几乎毫不费力。
事情进展得很顺利……直到出现问题。
有一天,我需要水平扩展应用程序。由于该应用运行在Kubernetes内部,扩展只需将部署中的副本数从1增加到3。简单、干净、毫无波澜。
或者说,我是这么认为的。
几分钟后,我的cron作业启动了——在三个实例上同时启动。
本应只运行一次的任务突然运行了三次。由于这个作业在设计上不支持并发运行,结果……可以说是不太理想。这给我敲响了警钟:在分布式环境中,一个定时作业需要的不仅仅是一个计时器——它需要协调。
这个寻找解决方案的过程让我找到了ShedLock,它奇迹般地解决了我的问题。
什么是ShedLock?
ShedLock是一个Java库,旨在确保定时任务只运行一次,即使您的应用程序被部署到多个节点上。它不是通过……
创建一个帐户来阅读完整的故事。 作者仅向Medium会员提供此故事。 如果您是Medium的新用户,请创建一个新帐户免费阅读此故事。 在应用中继续 或者,在移动网页版继续 使用Google注册 使用Facebook注册 使用电子邮件注册 已有帐户?登录
… … …