如何将工作划分到计算机网络?


11

想象一下一个场景:假设您有一台产生大量数据的中央计算机。此数据必须经过一些处理,不幸的是,此处理要比生成数据花费更多的时间。为了使处理赶上实时,我们插入了更多的从属计算机。

此外,我们必须考虑从站退出网络中途作业的可能性以及添加其他从站的可能性。中央计算机应确保所有工作均已完成,并确保从属设备放弃的工作已重新分配给另一个。

主要问题是:我应该使用哪种方法来实现这一目标?

但是,也许以下内容可以帮助我得出一个答案:我要尝试做的工作是否有名称或设计模式?

我需要什么知识领域才能实现使这些计算机互相交谈的目标?(例如,我所了解的数据库是否足够,还是会涉及我还不了解的套接字?)

有这种系统的例子吗?主要问题是一般性的,因此最好有一个起点/参考点。

注意我假设c + +和Windows的约束,所以朝该方向的解决方案将不胜感激。


1
查找队列或工作流系统,例如:aws.amazon.com/sqs en.wikipedia.org/wiki/Message_queue等。队列系统可以处理分发,检查和重新分配。
Luc Franken

2
您要查找的术语是并行化。在走这条路之前,请确保您的问题可以并行解决(例如,项目n的结果不取决于项目n-1的结果)。
Blrfl 2013年

看看boinc

@Blrfl我认为并行化通常不与此相关,并行化通常与使用多个内核/处理器的单台计算机上的多线程或多进程执行或同一台计算机上的并发执行相关。他指的是分布式计算,在他的描述中它并没有保证并发性,只是保证了异步性(也就是说,不确定性执行,可能是并发,同步或排队等待)
Jimmy Hoffa

3
我很惊讶没有人提到hadoop。
凯文(

Answers:


12

有这种系统的例子吗?

是。这种模式被称为分布式计算(或分布式编程,或您想要在分布式之后加上的任何酷字)。我的建议是不要在研究其他解决方案之前在内部构建它。您可以查看此堆栈溢出问题以了解各种选项。然后做出计算决定。


3
不要忘了这个新的最喜欢的词:!或计算。如果您使用自己的计算机进行操作,人们会称其为个人或小型。推销胡说八道,这就像您所说的分布式计算已经有很多年了,只是扔在那里让OP知道他在哪里阅读有关云的东西,这正是在谈论这个。
Jimmy Hoffa 2013年

3
@JimmyHoffa:“云”一词经常用来表示您的数据以及用于处理它的软件都在Internet上而不是本地计算机上。在其他时候,这意味着您正在使用在群集而不是单个整体VM主机上运行的虚拟机。明显的优势是透明的零停机故障转移。
tdammers

2
@tdammers是正确的,但是OP所描述的系统类型仍然是众多利用Cloud的市场名称的系统之一,正如您实际上指出的其他所有系统一样。这就是使它成为流行语的原因,它是在没有定义的情况下发明的,因此人们将其应用于大量不同的事物,因此它实际上意味着一切而没有任何意义。万岁的流行语。
Jimmy Hoffa 2013年

1
@JimmyHoffa:这也是在这里提及“云”一词完全没有建设性的原因。
tdammers

3
它可以成为反对管理的好词。“您如何解决此数据处理问题?” “好吧,我们可以将其分发到计算机网络并并行计算它们。” 空白的外观。“我们可以构建一个小型云。” “ OKAY CARRY ON”
Morpork

4

如其他答案所指出的那样,该领域被称为分布式计算网格计算,集群计算和高性能计算

让我添加一个区别,即当一个系统在启动后可以匹配工作负载进行调整大小时,它被称为“ 弹性的 ”,这与传统的网格计算不同。这是术语“ 云计算 ” 的(非营销)原因之一:用户无需计划容量,并且作为云计算的用户对进行计算的机器的数量和位置仍然毫无疑问。

同样,您要求主服务器重新安排失败的任务的时间称为该系统的“ 容错 ”属性。(此卡通的必填链接)

您应该使用哪种方法来构建自己的私有云?按照我的顺序或偏好:

  1. 不要建立自己的云,而要使用其他人提供的基础架构。亚马逊称之为虚拟私有云,Rackspace只是私有云 ; 我相信您可以找到其他报价并进行比较。

  2. 不要构建自己的分布式计算引擎,而要使用其他人提供的引擎。如果您坚持使用自己的机器,请使用尽可能多的由他人提供和测试的软件。您可以通过Pipes接口从C ++使用Hadoop,也可以通过Streaming API从任何可执行文件使用Hadoop 。Spark上有一个类似的Streaming接口

  3. 不要从头开始编写所有组件,而要使用社区中的组件。如果出于某种原因,到目前为止,您已经阅读并希望推出自己的云组件,请不要从C ++的标准库开始。您将需要的主要组件是:

    • 如注释中所述,一种排队系统,用于将任务从主机发送到处理节点,并将结果确认从处理节点发送到主机
    • 分布式文件系统,以便处理节点可以访问数据以对其进行操作。

    两者都有很多选择。对于队列,RabbitMQZeroMQ一样都有Windows安装程序。对于分布式文件系统,我在Windows上确实没有足够的经验:看来您可以将SMB共享组织到DFS中,但是在这里我无法给您任何提示。如另一个答案所述,您可能会想到使用分布式数据库(例如MongoDB)来存储数据;它确实可以在Windows上运行

您还可以考虑使用MPI(通常是OpenMPI实现,通常是通过其Boost包装器进行的),但是请注意,MPI程序本身既不具有弹性,也不具有容错能力。您需要自己照顾自己(至少他们提供了一些机制来实现这一点)。这就是为什么我建议您首先评估一个具有此类属性的分发框架的原因。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.