【发布时间】:2020-02-20 00:48:22
【问题描述】:
我正在 Kubernetes 上为我的 Spring 应用程序从单个 pod(docker 映像)转移到多个 pod 以进行负载处理。但是我遇到了一个问题,因为我的应用程序中有一个 cron 调度程序方法,该方法每天在特定时间运行。如果我部署多个 pod,它们会同时运行,因此多个条目会保存到我的数据库中,但我只需要一个 pod 来执行该功能。
我曾考虑生成 java uuid 并将其保存在数据库中,因为该函数开始在每个 pod 上执行。然后在同一个函数中,放置一个 5 秒的睡眠定时器,并比较每个 pod 中数据库的 uuid。最新更新数据库中值的 pod 将匹配该值并提前执行该方法。
这是一个好方法吗?如果没有,请提出可以解决此问题的建议。
【问题讨论】:
-
我有同样的问题你找到解决办法了吗?
-
嘿,我正在使用上面提到的创建 uuid 并从 db(或 redis)中的单个 pod 中仅保存 1 个 uuid 并添加睡眠时间的策略。睡眠时间结束后,我匹配代码中每个 pod 中的 uuid,下一行代码从 uuid 与从 db 获取的 uuid 匹配的 pod 执行。这可能不是最好的方法,但对我来说效果很好,因为这些是 cron 作业,并且一定程度的延迟是可以接受的。
标签: java spring spring-boot kubernetes quartz-scheduler