【问题标题】:how to autoscale the spring batch application in openshift?如何在openshift中自动缩放spring批处理应用程序?
【发布时间】:2026-02-19 10:55:01
【问题描述】:

我有一个 spring 批处理应用程序,它将触发作业通过 API 调用将批量数据从一个数据库传输到另一个数据库。所有作业都配置为并行处理(主/从步骤)分区并在 openshift 中部署此应用程序.需要在作业执行期间根据负载自动缩放应用程序。即使我使用了 openshift 自动缩放功能,我仍然无法找到作业性能的效率。 POD 只是在创建,但只有一个 POD 被使用。如何解决此问题?如何在 PODS 之间拆分作业?

【问题讨论】:

    标签: spring kubernetes openshift spring-batch


    【解决方案1】:

    在远程分区设置中,主步骤将StepExecutionRequests 发送到可配置队列(我们称之为requests)。工作步骤是此队列上的侦听器。主步骤可以配置为:

    • 在可配置队列中汇总来自工作人员的回复(我们称之为replies
    • 轮询作业存储库以检查工作人员的状态

    考虑到这一点,自动缩放此类设置取决于您如何定义 POD。例如,如果您在同一个 POD 中运行一个或多个工作器,则可以随着 requests 队列大小的增长自动扩展此部署。

    希望这会有所帮助。

    【讨论】:

    • 感谢 Ben 的建议。我有几个问题。这是否意味着我必须重写应用程序代码才能使用自动缩放功能?上述建议类似于批处理的垂直缩放。
    • 不,您不需要重写您的应用程序。您可以为 master/workers 使用 Spring 配置文件,并在不同的配置文件中使用相同的应用程序。您可以在此处找到示例:github.com/mminella/scaling-demos/blob/master/partitioned-demo/…。根据缩放,即水平缩放,您可以添加任意数量的工作节点。