我们的应用程序包含大量部署在坞群集群中的微服务(独立的应用程序大多是基于java的),每个服务都可以在运行时进行缩放,甚至整个堆栈有时也会重新启动。
但是,当删除或重新启动某个服务时,可能会在正确的容器中运行一些耗时的任务。例如:
当一个大填充被uploaded.
/tmp dir中。在为某个数据table.创建索引时删除/重新启动
我们必须尽快找回他们。以上述引文为例:
无法恢复的导入作业,使用已上传的文件again.
相同。
听起来我们需要一个分发框架,它可以持久化所有任务状态,检查每个任务的健康状况,在需要时恢复。
可以提出任何轻量级的解决方案吗?
发布于 2020-04-01 02:17:29
不同服务之间的任务协调从来都不是真正的轻量级IMO,实现这样的更改可能是一项任务分配&对于您工作的组织来说,很难掌握(稍后我将解释)。
我们现在正在经历这个过程,我们首先尝试用Spring批处理来完成这个任务,但是和您一样,我们需要跨多个服务和高度可用的分布,所以我们转而在AWS中使用Step函数。
您仍然可以在本地进行开发,但也可以通过一些工作来使用Step函数,为此,我为开发人员实现了一个非常简单的工作流程,这涉及到在AWS (SQS队列)上使用他们自己的私有组件,这些组件是由他们的$USERNAME变量预先准备的。这应该像设置一些环境变量一样容易。
但是,要使用什么编排框架的决定应取决于以下几个因素:
。
虽然实现业务流程框架可能很有挑战性,但它并不是最困难的部分,YMMV。我发现最具挑战性的是让企业决定做出不同的权衡。以恢复为例,如果某件事情发生故障,可能应该在5分钟内再次尝试一个任务,这对于在一个步骤函数上实现来说是非常简单的。但这可能意味着,一个作业失败所需的时间要比实现该任务之前的时间要长,而失败的作业现在正在通过第二次尝试获得成功。我发现非技术人员不理解或不想理解这一点,我会告诉你,当这些配置相互竞争时,事情应该迅速失败,同时恢复。谁也拥有这个过程?如果它的影响不仅仅是您的团队,这将再次是棘手的,您可能有不同的团队与竞争的优先次序。
https://stackoverflow.com/questions/60823995
复制相似问题