具有冗余/负载平衡的“分散式”作业管理

具有冗余/负载平衡的“分散式”作业管理

我搜索了本地进程的作业管理解决方案。通常它们会运行数周。目前我使用的是 jenkins,但服务器无法重新启动(安全更新)并且没有冗余。如果一台服务器离线,则所有作业都应重新平衡到在线服务器。只需使用相同的参数重新启动脚本即可,但应该可以禁用此行为。此外,添加/删除新服务器也应该很容易。

我不需要一个完整的解决方案,但我搜索了这样的软件,并没有真正找到我想要的东西。我很感激任何指向正确方向的提示(也是搜索关键词)。我基本上只是找到了 CI 软件,但我想要一个服务器容错解决方案。

答案1

解决这一难题的方法有很多种。

一种解决方案是使用“工作流”工具链。通常,您从消息队列开始,在该队列中排队作业,例如 RabbitMQ、Redis 或 AWS SQS。然后是某种任务运行器或执行器,例如 Sidekiq 或 Celery。

这种工作流程的好处是您可以扩展它,处理失败的任务、失败的服务器、重试逻辑、报告等。

您可以启动数据库组件的集群和工作组件的集群,这将允许您构建冗余。

还有计算调度程序,类似于 Kubernetes。在这里,您可以使用跨服务器的可用资源玩俄罗斯方块,并且作业将被安排,直到资源不足为止。

第三种解决方案是使用任务监控工具,例如 Monit 或 Supervisord,这些工具旨在监控进程并在进程停止时重新启动它们。这种方法要求您自己处理大多数极端情况,但可能更容易快速上手。

第四个更简单的解决方案是使用 cronjob 或 Windows 计划任务之类的东西。在这里,您的代码按计划运行。您可以通过添加更多服务器来扩展它,但会遇到与上述解决方案相同的问题,即您必须在自己的代码中处理诸如竞争条件之类的问题。

所有上述解决方案都可以通过基础设施和配置管理工具(例如 Terraform 和 Ansible)进行管理,它们可以让您保持统一,简化更新和重新部署。

相关内容