Answers:
究竟什么构成分布式计算?
分布式计算是处理元素的固有并行集合,这些处理元素相互通信以解决一个或多个问题。这些处理元件彼此充分分离,因此在它们之间建立可靠且及时的消息传递结构是不切实际的,因此,不可能对系统状态有全局了解。与分布式系统短信的具体特征的消息会迷失方向,就会得到乱码,将得到延迟-在这个空间的解决方案必须考虑到这一点。因此,分布式编程涉及处理网络和消息,并行性和缺乏全局信息。
解决问题的最简单方法是使单个处理元素具有特殊性,即对特定信息具有权威性。然后其他元素可以每次都引用它,或者缓存信息并希望它不会过时(因为它们不能指望被告知更改)。这是经典的客户端/服务器体系结构。
互联网计算是分布式计算,但是没有能力控制大多数分布式节点的实际功能。
尝试同步访问资源的多个并行线程是否在分布式计算领域构成问题?
它们构成了一种可能的解决方案,该解决方案在构建客户端/服务器模型时很有用,但代价是资源争用可能会急剧增加。对于读取来说,这不是什么大问题(只要有足够的硬件),但是对于写入来说,确实是一个大问题。
您尽力避免的是分布式锁。缺少可靠的及时消息传递绝对会破坏分布式决策协议,除非您使用Paxos协议之类的东西,但这有很多警告。分布式计算的根本问题是“消息中发生了坏事”。相对较低级别的协议(如TCP)可以减轻问题,但仍然会严重困扰。
分布式计算是一种在不同计算机(即分布式系统)上进行处理的计算系统。各个程序通过一系列通信通道相互通信。这些通道通常是网络连接(例如TCP套接字),但经常使用其他通信协议和设备(例如DeviceNET,BACNet,SECS-2,Modbus等),甚至是为特定设备定制的协议。
分布式系统通常比设计为在一台计算机上运行的系统复杂得多。除了多线程应用程序需要应对的并发和资源锁定问题之外,分布式系统还需要处理通信故障和处理节点故障。需要多个处理器执行的事务(和回滚)也很棘手。
分布式系统采用多种形式,目前在许多应用程序中使用。Web应用程序是分布式系统。一个N层系统通常至少具有N个不同的处理器(具有不同的应用程序)。分布式系统也用于许多工厂自动化系统中。
该写了在维基百科分布式计算是值得一读。
在回答有关多线程应用程序是否构成分布式应用程序的问题时,如果线程在单台计算机上运行,则系统不是分布式的。它确实必须解决分布式系统中固有的一些问题,但不是全部。
为了回答有关什么构成分布式计算的一般性问题,我将推荐Ann Wollrath,Geoff Wyant,Jim Waldo和Samuel C. Kendall撰写的论文《分布式计算的注解》。它涵盖了分布式系统及其故障的最新历史,并提出分布式计算需要对所涉及的问题进行不同的思考。
尽管在本文中都没有提到互斥量和信号量,但是它提供了对分布式软件系统的正确工程设计的宝贵见解。
至于为什么您的面试官询问互斥量和信号量,我同意@Caleb:
如果这些线程可以在不同的计算机上运行,或者即使它们在同一台计算机上但在不同的进程中运行,它们也会执行。
我唯一要添加的是互斥体和信号量是低级锁定原语,使您可以在多个计算设备之间分配工作,并且它们的操作(通常)对于应用程序的成功至关重要。显然,这取决于所使用的语言和技术。如果您使用的是Erlang或Scala,则可能会使用基于Actor模型的并发,而不是传统的基于锁的并发。
我们确实有一个关于“分布式系统”的课程,虽然我不记得确切的定义,但是它遵循以下原则:
(我相信还有更多,我不确定最后一点)
现在,在课程中,我们确实学习了如何实现分布式事务和分布式锁。这个教训是,分布式锁基本上是使用分布式事务来实现的,这与您在本地执行的操作相反,并且它本质上不是容错的,而是首先破坏了使用分布式系统的目的。
编辑:该定义是在操作系统或数据库系统的狭义上针对“分布式系统”的,而不是仅仅针对客户端-服务器系统。在某些情况下,满足第一条件的任何东西都可以称为分布式。
巧合的是,该定义匹配了分布式版本控制系统和传统版本控制系统之间的差异,所有这些系统至少都是客户端服务器,并且通常也被复制。