分布式计算到底是什么?[关闭]


14

究竟什么构成分布式计算,它与并行/并发计算有何不同?

在多个并行线程中尝试使用互斥量和信号量尝试同步访问资源是否会在分布式计算领域构成问题?

Answers:


8

究竟什么构成分布式计算?

分布式计算是处理元素的固有并行集合,这些处理元素相互通信以解决一个或多个问题。这些处理元件彼此充分分离,因此在它们之间建立可靠且及时的消息传递结构是不切实际的,因此,不可能对系统状态有全局了解。与分布式系统短信的具体特征的消息迷失方向,就会得到乱码,得到延迟-在这个空间的解决方案必须考虑到这一点。因此,分布式编程涉及处理网络和消息,并行性和缺乏全局信息。

解决问题的最简单方法是使单个处理元素具有特殊性,即对特定信息具有权威性。然后其他元素可以每次都引用它,或者缓存信息并希望它不会过时(因为它们不能指望被告知更改)。这是经典的客户端/服务器体系结构。

互联网计算分布式计算,但是没有能力控制大多数分布式节点的实际功能。

尝试同步访问资源的多个并行线程是否在分布式计算领域构成问题?

它们构成了一种可能的解决方案,该解决方案在构建客户端/服务器模型时很有用,但代价是资源争用可能会急剧增加。对于读取来说,这不是什么大问题(只要有足够的硬件),但是对于写入来说,确实是一个大问题。

您尽力避免的是分布式锁。缺少可靠的及时消息传递绝对会破坏分布式决策协议,除非您使用Paxos协议之类的东西,但这有很多警告。分布式计算的根本问题是“消息中发生了坏事”。相对较低级别的协议(如TCP)可以减轻问题,但仍然会严重困扰。


6

尝试同步访问资源的多个并行线程是否在分布式计算领域构成问题?

如果这些线程可以在不同的计算机上运行,​​或者即使它们在同一台计算机上但在不同的进程中运行,它们也会执行。


1
在不同计算机上运行的线程基本上无法同步互斥体和信号量的传统方式。
Jan Hudec

@JanHudec我认为这就是面试官的问题所在。在没有原子测试设置或比较交换指令或共享内存的情况下,分布式计算必须依靠机器之间的消息传递来进行同步。幸运的是,有一些算法可以做到这一点。
Caleb,

我不同意“幸运的是”。该算法很复杂且不能容错,因此应避免使用。
1月Hudec,

5

分布式计算是一种在不同计算机(即分布式系统)上进行处理的计算系统。各个程序通过一系列通信通道相互通信。这些通道通常是网络连接(例如TCP套接字),但经常使用其他通信协议和设备(例如DeviceNET,BACNet,SECS-2,Modbus等),甚至是为特定设备定制的协议。

分布式系统通常比设计为在一台计算机上运行的系统复杂得多。除了多线程应用程序需要应对的并发和资源锁定问题之外,分布式系统还需要处理通信故障和处理节点故障。需要多个处理器执行的事务(和回滚)也很棘手。

分布式系统采用多种形式,目前在许多应用程序中使用。Web应用程序是分布式系统。一个N层系统通常至少具有N个不同的处理器(具有不同的应用程序)。分布式系统也用于许多工厂自动化系统中。

写了在维基百科分布式计算是值得一读。

在回答有关多线程应用程序是否构成分布式应用程序的问题时,如果线程在单台计算机上运行,​​则系统不是分布式的。它确实必须解决分布式系统中固有的一些问题,但不是全部。


3

严格来说,“分布式计算”是任何涉及在多台计算机上处​​理单个事务/请求/计算的解决方案。

您还将遇到术语“分布式系统”,它是Windows,Unix和其他最初部署在中央数据中心外部的小型系统服务器的统称。尽管这些天来将这些系统部署在数据中心内部更为正常,但这个术语已经停滞了。


3

为了回答有关什么构成分布式计算的一般性问题,我将推荐Ann Wollrath,Geoff Wyant,Jim Waldo和Samuel C. Kendall撰写的论文《分布式计算的注解》。它涵盖了分布式系统及其故障的最新历史,并提出分布式计算需要对所涉及的问题进行不同的思考。

尽管在本文中都没有提到互斥量和信号量,但是它提供了对分布式软件系统的正确工程设计的宝贵见解。

至于为什么您的面试官询问互斥量和信号量,我同意@Caleb:

如果这些线程可以在不同的计算机上运行,​​或者即使它们在同一台计算机上但在不同的进程中运行,它们也会执行。

我唯一要添加的是互斥体和信号量是低级锁定原语,使您可以在多个计算设备之间分配工作,并且它们的操作(通常)对于应用程序的成功至关重要。显然,这取决于所使用的语言和技术。如果您使用的是Erlang或Scala,则可能会使用基于Actor模型的并发,而不是传统的基于锁的并发。


2

这个词说明了一切。您必须执行一些计算操作,并且如果可以分发此计算的一部分,以便每个计算都可以与其他计算无关地进行工作,然后在完成所有操作后,将每个计算的结果合并即可得出主要计算的答案。例如:Map-Reduce


1

我们确实有一个关于“分布式系统”的课程,虽然我不记得确切的定义,但是它遵循以下原则:

  1. 可以在通过消息进行通信的多个单独节点上运行(无法共享内存)
  2. 对象可以在节点之间迁移
  3. 对象在迁移时保留其标识,并且在迁移时可以透明地寻址
  4. 对象不依赖于创建它们的节点
  5. 系统可以处理添加和删除节点

(我相信还有更多,我不确定最后一点)

现在,在课程中,我们确实学习了如何实现分布式事务和分布式锁。这个教训是,分布式锁基本上是使用分布式事务来实现的,这与您在本地执行的操作相反,并且它本质上不是容错的,而是首先破坏了使用分布式系统的目的。

编辑:该定义是在操作系统或数据库系统的狭义上针对“分布式系统”的,而不是仅仅针对客户端-服务器系统。在某些情况下,满足第一条件的任何东西都可以称为分布式。

巧合的是,该定义匹配了分布式版本控制系统和传统版本控制系统之间的差异,所有这些系统至少都是客户端服务器,并且通常也被复制。


那是分布式计算的一种特殊风格。还有其他一些,他们真正共享的唯一一点是第一点。消息传递至关重要,其他的则不是……。
Donal Fellows,

1
@DonalFellows:嗯,这是分布式系统,在操作系统或数据库系统的意义。在那里,迁移和容错是执行它们的要点。分布式“计算”是在多个节点上运行的任何东西。
1月Hudec,

好吧,在那种情况下,它应该已经涵盖了做出决定的事情。在分布式系统中很难做到这一点。(此外,我在该主题上看到的大多数学术论文都对基础图拓扑进行了完全不切实际的假设,给出了有效但无用的结论。)
Donal Fellows

@DonalFellows:当然,该课程的确涵盖了决策的事务以及所有仲裁和裂脑活动(不要太深入,这只是入门级的内容)。但这并不是定义分布式系统的属性。如果您要创建一个,这只是一个障碍。
Jan Hudec

0

分布式计算是企业计算的“非营销”术语,您在现实生活中可能会听到很多。但是,其他人指出的一般想法是“您正在使用多台计算机来工作”

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.