具有大量不同类型工作的分布式系统

时间:2019-05-25 09:08:06

标签: distributed-computing distributed-system

我想创建一个分布式系统,可以支持大约10,000种不同类型的工作。一台机器只能托管500个此类作业,因为每个作业都需要将一些数据预加载到内存中,而这些数据无法保存在缓存中。每个作业必须具有冗余性才能实现可用性。

我曾经探索过诸如Zookeeper,hadoop之类的开源库,但没有一个能解决我的问题。 我能想到的最简单的解决方案是使用其托管的机器维护作业类型图。但是,我如何支持机队中工作类型的动态分配?如何处理机器故障,以确保每种作业类型在任何时间都至少在至少1台机器上可用。

1 个答案:

答案 0 :(得分:0)

基于您在注释中提到的答案,我建议您采用基于MQ的(消息队列)体系结构。我在这个答案中建议的是:

  1. 从用户那里获取输入,并将其推送到分布式消息队列中。这意味着您应该在多台服务器上设置消息队列(例如ActiveMQRabbitMQ)。此MQ技术可帮助您复制容错问题的输入请求。它还提供了完整的端到端异步系统。
  2. 准备好此MQ层之后,可以设置您的计算服务器层。这意味着某些计算服务器(在您的情况下为20台服务器)将从消息队列中读取请求,并根据该请求启动作业。由于此MQ是分布式的,因此您可以确保在计算服务器中可以进行良好的负载平衡。另外,每台服务器都可以根据从MQ读取的请求来运行所需的作业(在您的情况下为500左右)。
  3. 关于失败,仅当且仅当作业完成时,计算服务器才可能从MQ中弹出。如果一台服务器崩溃,则该作业仍在MQ中,而另一台服务器可以在其上工作。如果作业正在某处保存某些状态或更新了某些内容,则应管理其重复运行。

这种方法的优点是非常实用。这意味着,如果将来您还有更多工作要处理,通过添加计算服务器并将其连接到MQ,您可以在服务器上处理更多请求,而无需对系统进行任何更改。此外,MQ中的一些不错的功能(例如基于优先级的排队)可帮助您确定请求的优先级并根据作业类型进行处理。

p.s。。您的Q没有提供有关系统类型和参数的任何详细信息。这是我可以提出的解决方案草案。如果您提供更多详细信息,也许社区可以为您提供更多帮助。