![具有冗余/负载平衡的“分散式”作业管理](https://linux22.com/image/763623/%E5%85%B7%E6%9C%89%E5%86%97%E4%BD%99%2F%E8%B4%9F%E8%BD%BD%E5%B9%B3%E8%A1%A1%E7%9A%84%E2%80%9C%E5%88%86%E6%95%A3%E5%BC%8F%E2%80%9D%E4%BD%9C%E4%B8%9A%E7%AE%A1%E7%90%86.png)
我搜索了本地进程的作业管理解决方案。通常它们会运行数周。目前我使用的是 jenkins,但服务器无法重新启动(安全更新)并且没有冗余。如果一台服务器离线,则所有作业都应重新平衡到在线服务器。只需使用相同的参数重新启动脚本即可,但应该可以禁用此行为。此外,添加/删除新服务器也应该很容易。
我不需要一个完整的解决方案,但我搜索了这样的软件,并没有真正找到我想要的东西。我很感激任何指向正确方向的提示(也是搜索关键词)。我基本上只是找到了 CI 软件,但我想要一个服务器容错解决方案。
答案1
解决这一难题的方法有很多种。
一种解决方案是使用“工作流”工具链。通常,您从消息队列开始,在该队列中排队作业,例如 RabbitMQ、Redis 或 AWS SQS。然后是某种任务运行器或执行器,例如 Sidekiq 或 Celery。
这种工作流程的好处是您可以扩展它,处理失败的任务、失败的服务器、重试逻辑、报告等。
您可以启动数据库组件的集群和工作组件的集群,这将允许您构建冗余。
还有计算调度程序,类似于 Kubernetes。在这里,您可以使用跨服务器的可用资源玩俄罗斯方块,并且作业将被安排,直到资源不足为止。
第三种解决方案是使用任务监控工具,例如 Monit 或 Supervisord,这些工具旨在监控进程并在进程停止时重新启动它们。这种方法要求您自己处理大多数极端情况,但可能更容易快速上手。
第四个更简单的解决方案是使用 cronjob 或 Windows 计划任务之类的东西。在这里,您的代码按计划运行。您可以通过添加更多服务器来扩展它,但会遇到与上述解决方案相同的问题,即您必须在自己的代码中处理诸如竞争条件之类的问题。
所有上述解决方案都可以通过基础设施和配置管理工具(例如 Terraform 和 Ansible)进行管理,它们可以让您保持统一,简化更新和重新部署。