OpenShift 中的 Spring 批处理 JDBCPagingItemReader、ThreadPoolTask​​Executor 和多个 pod

Kal*_*ali 5 java oracle spring-batch openshift spring-boot

我们有一个带有块处理功能的 Spring 批处理应用程序,它作为编写器的一部分从数据库读取记录,处理它们并调用服务/执行一些插入/更新数据库中的一些表。

JDBCPagingItemReader已被使用,因为当 saveState 为 false 时它是线程安全的。已设置排序键,因此线程不会相互交叉。Oracle 数据源和Spring 批处理的配置也ISOLATION_READ_COMMITTED使用了隔离级别。JobRepository

ThreadPoolTaskExecutor目前,在单个实例中使用多线程效果很好。

我们最终应该在 OpenShift 中部署这个 Spring Boot 应用程序,该应用程序将在多个 PODS 中运行,即应用程序的多个实例,它们都从同一个表中读取。

有相关知识的人可以告诉我在多个 Pod(实例)中使用上述组合是否会出现任何问题,或者是否存在必须处理的并发问题。

这种情况下的任何最佳实践都受到高度赞赏。

谢谢你的时间。

Mah*_*ine 0

您可以对表进行分区并将每个分区分配给一个 Pod。然后,每个分区由多线程作业处理。因此,这里有两种并行度:跨 Pod(多个 JVM)和每个 Pod 内(多个线程)。

有相关知识的人可以告诉我在多个 Pod(实例)中使用上述组合是否会出现任何问题,或者是否存在必须处理的并发问题。

如果数据集正确分区且分区之间没有重叠,则不会出现并发问题。