当前位置: 首页 > 知识库问答 >
问题:

Spring boot scheduler为每个pod运行cron作业

闾丘诚
2023-03-14

当前设置

null

问题

因为我们有3个pod,并且调度程序处于应用程序级别,所以我们对数据集进行3次调用,每个pod都得到响应,并且首先在缓存中处理的pod成为主服务器,其他2个pod复制来自该实例的数据。

我认为这是一个问题,因为我们将增加获取更多数据集的作业数量,因此这将成倍增加调用的数量。

null

null

null

2-我谷歌了,发现其他的选择是运行一个Cronjob,这将安排一个工作完成,这是否有帮助,但不确定它的真正意义。

提前感谢你抽出时间来读这篇文章。

共有1个答案

谭向晨
2023-03-14

根据我对你问题的理解,看起来你有两个选择(至少)-

  1. 如果您的springboot主应用程序中仍然有调度逻辑,那么您可能需要探索类似shedlock的东西,它有助于确保当应用程序代码运行在多个节点(在您的情况下是kubernetes pods)上时,通过应用程序代码调度的作业仅通过外部锁提供程序(如MySQL、Redis等)执行一次。
  2. 如果您可以将特定于调度程序的应用程序代码分离到它自己的可执行进程中(即,该代码可以在与主应用程序代码POD不同的POD集合中运行),那么您可以使用kubernetescronjob来调度内部创建POD并运行应用程序逻辑的kubernetes作业。这种方法的好处是,您可以使用本机的kubernetes cronjob参数(如并发)和其他一些参数,以确保作业在计划时间内通过单个Pod只运行一次。

通过方法(1),您可以将调度程序代码与主应用程序耦合起来,并在相同的Pods中一起运行它们。

对于方法(2),您必须将您的代码(运行在调度程序中)从整个应用程序代码中分离出来,将其容器化到自己的映像中,然后使用参考官方指南示例和kubernetes cronjob最佳实践(由我编写,但可以找到其他示例)的新映像配置kubernetes cronjob调度。

这两种方法都有各自的优点和缺点,因此您可以对它们进行评估,以最适合您的需要。

 类似资料:
  • 如果我创建 cronjob 以每 2:30 运行一次命令会运行吗?(这意味着,我的 cron 将在每小时 90 分钟后运行一次。 命令如:30*/2***/command/xxx= 请帮帮忙?

  • 编辑:问题解决了,这是我的错误,我只是使用了错误的cron设置。我假设“*2***”在2点时每天只运行一次,但实际上它在2点后每分钟运行一次。所以Kubernetes的行为是正确的。 我一直在一个 cron 执行点运行多个作业。但似乎只有当这些作业的运行时间非常短时。知道为什么会发生这种情况以及如何防止它吗?我使用策略:禁止,和。 一个cron作业的示例,该作业应该每天运行一次,但在其预定运行时间

  • 我来自PHP/Python/JS环境,在这个环境中,将web应用程序的多个实例作为单独的进程运行,将异步任务(如队列处理)作为单独的脚本运行是一种标准。 null null null null null 尽管Java框架说它们是“云原生的”,但看起来所有文档仍然是围绕monolith应用程序构建的,它在单独的线程中处理所有消费者和cron调度。 这个问题的一个明确答案是微服务,但这远远超出了范围。

  • 问题内容: 我每天如何每六个小时运行一次命令?试过这不起作用: 问题答案: 您忘记了,并且您有太多字段,这是您需要关心的时刻 这意味着每6小时从0开始,即在0、6、12和18小时,您可以将其写为

  • 现在我每天下午3点运行我的cron作业 但是我想一天运行两次cron作业。上午10点30分和下午2点30分 我相信此命令将在上午 10:30 运行。我应该如何在下午 2:30 运行它?

  • 问题内容: 我想清除所有超过1周的SQL数据库,我想每晚进行一次。所以,我要安排一份工作。如何查询mySQL,而不必每次都手动输入密码? PHP中的查询如下: 有没有办法将其作为shell脚本运行?如果没有,有没有一种方法可以使cron运行php文件? 问题答案: 尝试创建如下所示的shell脚本: 然后可以将其添加到cron