Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java docker swarm集群中耗时的任务恢复_Java_Scheduled Tasks_Docker Swarm - Fatal编程技术网

Java docker swarm集群中耗时的任务恢复

Java docker swarm集群中耗时的任务恢复,java,scheduled-tasks,docker-swarm,Java,Scheduled Tasks,Docker Swarm,我们的应用程序包含大量部署在docker swarm集群中的微服务(独立应用程序,大部分基于java),每个服务都可以在运行时进行扩展,甚至整个堆栈有时也可能重新启动 但是,当删除或重新启动某个服务时,可能会有一些耗时的任务在正确的容器中运行。例如: 上载大容量填充时移除/重新启动容器 从保存在容器内部的/tmp目录中的上载文件导入数据时,容器移除/重新启动 为特定数据表创建索引时容器移除/重新启动 我们必须尽快找到他们。以上述套装为例: 无法恢复,使用时必须重新上载文件 如果要恢复,请从导入

我们的应用程序包含大量部署在docker swarm集群中的微服务(独立应用程序,大部分基于java),每个服务都可以在运行时进行扩展,甚至整个堆栈有时也可能重新启动

但是,当删除或重新启动某个服务时,可能会有一些耗时的任务在正确的容器中运行。例如:

  • 上载大容量填充时移除/重新启动容器

  • 从保存在容器内部的
    /tmp
    目录中的上载文件导入数据时,容器移除/重新启动

  • 为特定数据表创建索引时容器移除/重新启动

  • 我们必须尽快找到他们。以上述套装为例:

  • 无法恢复,使用时必须重新上载文件

  • 如果要恢复,请从导入作业终止的位置重新启动导入作业

  • 与2相同

  • 听起来我们需要一个分发框架,它可以持久化所有任务的状态,检查每个任务的运行状况,在需要时进行恢复


    可以推荐任何轻量级解决方案吗?

    不同服务之间的任务编排在我看来从来都不是真正的轻量级,实施这样的更改可能会分配工作&这对于您工作的组织来说很难掌握(我将在后面解释)

    我们现在正在经历这个过程,我们首先尝试使用SpringBatch来实现这一点,但与您一样,我们需要将其分布在多个服务中并具有高可用性,因此我们转向在AWS中使用Step函数

    您仍然可以在本地开发,但也可以使用Step函数,只需做一些工作,我通过实现一个相当简单的工作流供开发人员使用,这涉及到在AWS(SQS队列)上使用他们自己的私有组件,该组件由他们的
    $USERNAME
    变量预先设置。这应该和设置一些环境变量一样简单

    但是,使用什么编排框架的决定应该取决于许多因素:

    • 你已经有一个可以使用的了吗
    • 如果您正在使用什么云提供商,他们有解决方案吗
    • 您的开发人员有哪些专业知识,例如,如果您对Python很感兴趣,您可能希望使用Python解决方案等

    虽然实现一个编排框架可能很有挑战性,但它并不是最困难的部分,YMMV。我发现,最具挑战性的是让企业决定做出不同的权衡。以恢复为例,如果某项任务失败,可能需要在5分钟内再次尝试一项任务,这对于在Step函数上实现来说非常简单。但这可能意味着一个作业失败所需的时间比您实施此操作之前要长,而失败的作业现在通过第二次尝试获得成功。我发现非技术人员不理解或不想理解这一点,我会告诉您,当这些配置相互竞争时,事情应该快速失败,同时恢复。谁也拥有这个过程?如果它影响的不仅仅是您的团队,那么这将再次变得棘手,您可能会有不同的团队,具有相互竞争的优先级。

    不同服务之间的任务协调从来都不是真正的轻量级,实施这样的更改可能会分配工作&对于您工作的组织来说,很难掌握(我稍后会解释)

    我们现在正在经历这个过程,我们首先尝试使用SpringBatch来实现这一点,但与您一样,我们需要将其分布在多个服务中并具有高可用性,因此我们转向在AWS中使用Step函数

    您仍然可以在本地进行开发,但也可以使用Step函数,只需做一些工作,我通过实现一个相当简单的工作流供开发人员使用,这涉及到在AWS(SQS队列)上使用他们自己的私有组件由他们的
    $USERNAME
    变量作为前缀。这应该和设置一些环境变量一样简单

    但是,使用什么编排框架的决定应该取决于许多因素:

    • 你已经有一个可以使用的了吗
    • 如果您正在使用什么云提供商,他们有解决方案吗
    • 您的开发人员有哪些专业知识,例如,如果您对Python很感兴趣,您可能希望使用Python解决方案等
    虽然实施编排框架可能具有挑战性,但这并不是最困难的部分,YMMV。我发现,最具挑战性的是让业务部门决定进行不同的权衡。以恢复为例,如果某项任务失败,可能需要在5分钟内再次尝试一项任务,这是非常简单的在Step函数上实现。但这可能意味着一个作业失败所需的时间比您实现此功能之前要长,而失败的作业现在在第二次尝试中获得了成功。我发现非技术人员不理解或想理解这一点,并会告诉您,事情应该快速失败,然后重新开始在这些配置相互竞争的同时结束。谁也拥有这个过程?如果它影响的不仅仅是您的团队,那么这将再次变得棘手,并且您可能有不同的团队具有竞争的优先级