在Kubernetes(AKS)上缩放Spring批处理,无需作业复制

uxh89sit  于 2023-03-22  发布在  Spring
关注(0)|答案(1)|浏览(91)

我正在使用Azure AKS上的Spring Batch创建报告。
我们有HPA(Horizantal Pod Autoscaler)。当我们运行多个批处理时,由于HPA,Pod会扩展,在某些情况下,相同的作业会运行两次,这不是我们想要的。
Spring Batch使用数据库存储库进行作业管理,但我们仍然有一个示例,同一个作业运行了两次。
有人在Azure AKS上使用过Spring Batch吗?或者在kubernetes安装上?建立同步的最佳方法是什么?以及管理横向扩展?

tp5buhyn

tp5buhyn1#

SpringBatch使用数据库存储库进行作业管理,但我们仍然有一个示例,同一个作业运行了两次
我在这里的博客文章中详细谈到了这个问题:Spring Batch on Kubernetes: Efficient batch processing at scale .
建立同步和管理横向扩展的最佳方法是什么?
最适合您的用例的部署模式是“Kubernetes job per Spring Batch job instance”,再加上正确配置的中央作业存储库(即具有高隔离级别)。此模式有几个优点:

  • Kubernetes作业和Spring Batch作业示例生命周期相同(一旦成功执行,它们就无法重新启动)。如果一个job pod失败,Kubernetes将创建另一个pod,该pod将恢复执行同一个Spring Batch作业示例。因此Spring Batch作业示例可以自动重新启动并继续工作,直到完成,因为Kubernetes的作业控制器将执行必要数量的Pod,直到作业成功。
  • 作业示例可以通过根据需要提交尽可能多的Kubernetes作业来扩展。
  • 此模式保证当Kubernetes两次提交相同的作业时(这是一个限制),Spring Batch将阻止同一作业示例的并发执行(因为在此部署模式中,Kubernetes作业被设计为运行作业示例)。

在您的情况下,我会为每个报告创建一个Spring Batch作业示例(您没有提到报告是关于什么的,但我在这里假设创建一个报告是关于一个不同的标准,这应该是将导致不同作业示例的识别Spring Batch作业参数)。有了这个,报告将是独立的,并且可以以您需要的规模并行生成。
你会发现更多的细节在博客文章,我希望你觉得有帮助。

相关问题