Spring集群环境下批处理,高可用
Spring Batch in clustered environment, high-availability
现在我使用 H2 内存数据库作为我的单节点 Spring Batch/Boot 应用程序的 JobRepostiry。
现在我想 运行 Spring 在两个节点上批处理应用程序以提高性能(在这两个实例之间分配作业)并使应用程序更易故障转移。
我将使用 PostgreSQL 而不是 H2,并将两个应用程序配置为使用此共享数据库。这足以让 Sring Batch 开始在集群中正常工作并开始在集群节点之间分发作业,还是我需要执行一些额外的操作?
根据您将如何在节点之间分配作业,除了共享作业存储库之外,您可能还需要设置通信中间件(例如 JMS 或 AMQP 提供程序)。
例如,如果您使用远程分区,您的工作将被分区,每个工作人员可以 运行 在一个节点上。在这种情况下,必须共享作业存储库以便:
- 工作人员向作业存储库报告他们的进度
- 主节点轮询作业存储库以获取工人状态。
如果您的作业是完全独立的并且您不需要重启等功能,您可以继续为每个作业使用内存数据库并在不同节点上启动同一作业的多个实例。但即使在这种情况下,我也建议使用生产级作业存储库而不是内存数据库。在集群环境中,事情可能很快就会出错,并且拥有一个作业存储库来存储执行状态、同步执行、重新启动失败的执行等在这样的环境中至关重要。
现在我使用 H2 内存数据库作为我的单节点 Spring Batch/Boot 应用程序的 JobRepostiry。
现在我想 运行 Spring 在两个节点上批处理应用程序以提高性能(在这两个实例之间分配作业)并使应用程序更易故障转移。
我将使用 PostgreSQL 而不是 H2,并将两个应用程序配置为使用此共享数据库。这足以让 Sring Batch 开始在集群中正常工作并开始在集群节点之间分发作业,还是我需要执行一些额外的操作?
根据您将如何在节点之间分配作业,除了共享作业存储库之外,您可能还需要设置通信中间件(例如 JMS 或 AMQP 提供程序)。
例如,如果您使用远程分区,您的工作将被分区,每个工作人员可以 运行 在一个节点上。在这种情况下,必须共享作业存储库以便:
- 工作人员向作业存储库报告他们的进度
- 主节点轮询作业存储库以获取工人状态。
如果您的作业是完全独立的并且您不需要重启等功能,您可以继续为每个作业使用内存数据库并在不同节点上启动同一作业的多个实例。但即使在这种情况下,我也建议使用生产级作业存储库而不是内存数据库。在集群环境中,事情可能很快就会出错,并且拥有一个作业存储库来存储执行状态、同步执行、重新启动失败的执行等在这样的环境中至关重要。