【问题标题】:Distributed systems with large number of different types of jobs具有大量不同类型作业的分布式系统
【发布时间】:2019-05-25 09:08:05
【问题描述】:

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

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

【问题讨论】:

  • 作业是预定义的吗?还是动态来的?
  • 作业将被预定义。
  • 它是不是批处理系统?
  • 不,它是一个实时系统。
  • 我的意思是,你收到用户的一些请求了吗?并根据您在其中一台机器上开始工作的请求,对吗?

标签: distributed-computing distributed-system


【解决方案1】:

根据您在 cmets 中提到的答案,我建议您选择基于 MQ(消息队列)的架构。我在这个答案中的建议是:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 2015-08-05
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 2023-01-05
    相关资源
    最近更新 更多