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

如果在N个实例上部署,如何仅在一个实例上运行夜间作业?

东方志尚
2023-03-14

我有一个java应用程序,计划在每天晚上的某个时间运行一次。如果满足条件,应用程序将发送电子邮件。所有的调度代码都是用Java编写的,我没有使用亚马逊的任何功能来调度它。此应用程序已部署在EC2实例上,它位于弹性负载平衡器后面。根据负载,可以添加其他节点。我的java应用程序也被复制到其他节点,夜间作业在所有实例上执行。

有没有一种方法可以让单个节点执行这项工作?

谢谢你。

共有1个答案

滑景胜
2023-03-14

我最近部署到亚马逊(并且对Spring没有什么经验),但我看到了一些解决方法:

  1. 只需使用Apache Zookeeper。在zookeeper中为每个节点创建临时顺序节点。当我的计划时间和节点在该队列中第一个时,从队列中删除节点,再次添加节点并开始工作(Apache Curator Framework具有在代码中实现它所需的所有功能)
  2. 使用Hazelcast队列(相同的逻辑)。优点:可以在嵌入式模式下使用hazelcast。缺点:就我的经验而言,我不确定在亚马逊发现榛子的能力——榛子比动物园管理员稳定得多
  3. 另一种方式-如果您在每个实例上都有任何“实例id”,则可以在到达开始时间和<code>instanceId时启动作业。hashcode()%dayOfMonthNumber==0
 类似资料:
  • 我需要部署一个简单节点的实例。js应用程序在谷歌应用程序引擎上,没有任何形式的扩展。 我曾尝试过,但即使在我尝试关闭它们之后,也会创建许多实例。我的目标是通过只运行一个实例来消耗最少的资源。 我用的是最简单的例子:https://cloud.google.com/nodejs/getting-started/hello-world

  • 我正在学习storm。我对Apache storm上一次可以运行的拓扑数有疑问。我在storm集群上提交了两个拓扑,但一次只能运行一个拓扑。我需要杀死或停用已经存在的拓扑才能运行任何新的拓扑。 我用的是Storm0.9.4 动物园管理员3.4.6 我在附上我的暴风UI的截图。

  • 我有一个Spring Boot实例的集群环境。该实例计划每天发送一次电子邮件,我正在使用Quartz Job Scheduler。然而,电子邮件正在由所有实例发送,我需要它只由一个实例发送。是否可以将Quartz调度器配置为仅在一个实例上启动作业,我不在乎哪个实例。

  • 问题内容: 我想创建一个Jenkins作业来启动其他Jenkins作业。那将非常容易,因为Jenkins模板项目插件允许我们创建一个类型为“使用来自另一个项目的构建器”的构建步骤。但是,使我的情况更难的是,我必须在其他计算机上开始Jenkins的工作。有什么标准方法可以做到吗? 问题答案: 万一您只想触发Job的新版本,您有多种方法可以完成它 您可以使用远程访问API并触发请求以从源Job构建目标

  • 问题内容: 我想在Centos 7上运行Redis的多个实例。有人可以指出我的正确链接或在此处发布步骤。 我在Google上搜索了该信息,但没有找到任何相关信息。 问题答案: 您可以在单台计算机上使用不同的端口运行Redis的多个实例。如果这与您有关,则可以按照以下步骤操作。 通过安装第一个Redis实例,默认情况下它会监听。 对于第二实例,创建一个新的工作目录 默认的Redis实例用作其工作目录

  • 我有一个应用程序在各种OSGI捆绑包中分离,这些捆绑包在单个Apache Karaf实例上运行。但是,我想迁移到微服务框架,因为 Apache Karaf由于其依赖机制和 我希望以后能够将应用程序带到云端(AWS、GCloud等) 我做了一些研究,查看了各种框架,并得出结论,Quarkus可能是正确的选择,因为它基于容器的方法、性能和可能的云集成机会。 现在,我在某一点上苦苦挣扎,到目前为止我还没