2

我正在尝试确定将作业部署到集群环境时需要考虑的所有事项。

目前我并不关心并行处理或其他缩放问题;我更感兴趣的是如何让一切都像在单个服务器上运行一样。

所以因为我已经确定应该通过消息来触发工作。

现在让我陷入困境的是如何在集群部署中使用 Spring Batch Admin UI(即使它是手动解决方案)之类的东西。从 JobExplorer 获取工作信息似乎是关键之一。

Schipp 的spring-batch-cluster项目是答案吗,还是有更一致的社区答案?

或者我什至不需要担心因为 JobRepository 将从共享数据库中提取?

或者我是否需要将作业执行信息发布到消息队列以更新单独的作业存储库?

还有其他我应该关注的事情吗,比如jobIncrementers?

顺便说一句,如果不清楚我是 Spring 批次的菜鸟,现在就让大家知道 :-)

4

2 回答 2

2

Spring XD ( http://projects.spring.io/spring-xd/ ) 提供了一个分布式运行时,用于为批处理作业部署容器集群。它管理作业存储库并提供在集群上部署、启动、重新启动等作业的方法。它解决了容错(例如,如果节点出现故障,则重新部署作业)以及维护集群 Spring Batch 环境所需的许多其他必要功能。

于 2014-11-19T19:12:27.167 回答
0

我正在添加我认为我们将采用的答案,除非有人评论它为什么愚蠢。

如果 Spring Batch 配置为对JobExplorer将使用的所有 DAO 使用共享数据库,那么运行集群就不是什么大问题了。

我们计划使用 Quarts 作业来创建JobRequest将被放入队列的消息。第一个获取消息的服务器实际上会启动 Spring Batch 作业。

监控正在运行的作业不会成为问题,因为JobExplorer它从数据库中获取所有信息,而且看起来不像是缓存信息,所以我们也不会在那里遇到集群问题。

所以直接回答问题...

Schipp 的 spring-batch-cluster 项目是答案吗,还是有更一致的社区答案?

里面有一些很酷的东西,但刚开始时似乎有点过头了。我不确定是否有“社区”同意回答。

或者我什至不需要担心,因为JobRepository将从共享数据库中提取?

这似乎是正确的。如果使用共享数据库,集群中的所有节点都可以读取和写入所有作业信息。您只需要一种方法来确保计时器作业不会被多次触发。 Quartz 已经有了集群解决方案

或者我是否需要将作业执行信息发布到消息队列以更新单独的作业存储库?

同样,这不应该是必需的,因为执行信息已写入数据库。

还有其他我应该关心的事情,比如jobIncrementers

这似乎不是一个问题。使用 JDBC DAO 实现时,它使用数据库序列来增加值。

于 2014-11-19T21:22:59.423 回答