本文主要讨论了分布式系统。作者提供了关于分布式系统的概述,是一份很好的新手教程。
在论文的第一部分,作者简要回顾了计算机的演变,指出了分布式系统的两个技术基础:性能强大的微处理器的发展和高速计算机网络的发明。为什么这些技术很重要?
The result of these technologies is that it is now not only feasible but easy, to put together a computing system composed of many networked computers, be they large or small.
A distributed system is a collection of autonomous computing elements that appears to its users as a single coherent system.
请注意,有两个特征:
为了实现这一特点,我们必须考虑如何管理系统中的成员,如何处理缺乏统一的时间参照物的问题。
in a single coherent system the collection of nodes as a whole operates the same, no matter where, when, and how interaction between a user and the system takes place.
为了帮助开发分布式应用,分布式系统通常被组织为一个单独的软件层,从逻辑上讲,它被置于作为计算机各自操作系统之上。这种组织方式如图所示。
它提供以下服务:
A distributed system should make resources easily accessible; it should hide the fact that resources are distributed across a network; it should be open; and it should be scalable.
分布式系统应该使资源容易获得;它应该隐藏资源分布在网络上的事实;它应该是开放的;而且应该是可扩展的。
资源几乎可以是任何东西,但典型的例子包括外围设备、存储设施、数据、文件、服务和网络,仅举几例。
通过支持资源共享,它有助于降低成本,促进不同节点之间的合作。
有七种类型的分配透明度。
Transparency | 描述 |
---|---|
Access | 隐藏数据表示的差异和对象的访问方式 |
Location | 隐藏对象的位置(通常通过只给资源分配逻辑名称来实现)。 |
Relocation | 隐藏一个对象在使用过程中的移动(这在云计算的背景下变得越来越重要) |
Migration | 隐藏一个对象可能移动到另一个地方(它支持由用户发起的进程和资源的移动,而不影响正在进行的通信和操作)。 |
Replication | 隐藏一个对象被复制的情况 |
Concurrency | 隐藏一个对象可能被几个独立的用户共享(通过锁定机制实现)。 |
Failure | 隐藏一个对象的故障和恢复 |
为了区分 relocation 和 migration,有两个例子可以帮助理解:
试图盲目地对用户隐藏所有的分布式环节并不是一个好主意 。完全的分配度是不可能实现的。高度的透明度和系统的性能之间也有一个权衡。
The conclusion is that aiming for distribution transparency may be a nice goal when designing and implementing distributed systems, but that it should be considered together with other issues such as performance and comprehensibility. The price for achieving full transparency may be surprisingly high.
结论是,在设计和实施分布式系统时,以分布式透明为目标可能是一个很好的目标,但它应该和其他问题一起考虑,比如性能和可理解性。实现完全透明的代价可能是惊人的高。
An open distributed system is essentially a system that offers components that can easily be used by, or integrated into other systems. At the same time, an open distributed system itself will often consist of components that originate from elsewhere.
一个开放的分布式系统本质上是一个系统,它提供的组件可以很容易地被其他系统使用,或集成到其他系统中。同时,一个开放的分布式系统本身往往由来自其他地方的组件组成。
将策略与机制分离
To achieve flexibility in open distributed systems, it is crucial that the system be organized as a collection of relatively small and easily replaceable or adaptable components.
In theory, strictly separating policies from mechanisms seems to be the way to go. However, there is an important trade-off to consider: the stricter the separation, the more we need to make sure that we offer the appropriate collection of mechanisms. In practice, this means that a rich set of features is offered, in turn leading to many configuration parameters.
为了在开放的分布式系统中实现灵活性,关键是要把系统组织成一个相对较小且容易替换或适应的组件的集合。
从理论上讲,将政策与机制严格分开似乎是个好办法。然而,有一个重要的权衡需要考虑:分离得越严格,我们就越需要确保我们提供适当的机制集合。在实践中,这意味着提供了丰富的功能集合,反过来导致了许多配置参数。
一个系统的可扩展性可以通过三个不同的维度来衡量。
当一个系统需要扩展时,我们经常会遇到集中式服务的限制。许多服务是集中式的,因为它们是使用分布式系统中特定机器上运行的单个服务器或服务器组来实现的。 这些服务器很容易成为 瓶颈:
在一个地理上可扩展的系统中,通信延迟可能是很重要的,这一事实很难被注意到。 另一个阻碍地理可扩展性的问题是,广域网络中的通信在本质上比局域网络的可靠性要差得多。此外,我们还需要处理有限的带宽问题。
需要解决的一个主要问题是在资源使用、管理和安全方面的政策冲突。
If a distributed system expands to another domain, two types of security measures need to be taken. First, the distributed system has to protect itself against malicious attacks from the new domain. Second, the new domain has to protect itself against malicious attacks from the distributed system.
如果一个分布式系统扩展到另一个领域,需要采取两类安全措施。首先,分布式系统必须保护自己免受来自新领域的恶意攻击。第二,新领域必须保护自己免受来自分布式系统的恶意攻击。
When it comes to scaling out, that is, expanding the distributed system by essentially deploying more machines, there are basically only three techniques we can apply: hiding communication latencies, distribution of work, and replication.
当涉及到扩展时,也就是通过部署更多的机器来扩展分布式系统,基本上只有三种技术我们可以应用: 隐藏通信延迟,分配工作,以及复制。
从技术角度来看,规模的可扩展性是最容易。地理上的可扩展性是一个更棘手的问题,因为网络延迟是无法避免的。利用分布、复制和缓存技术与不同形式的一致性技术可以一定程度上解决问题。管理可扩展性似乎是最难解决的,部分原因是我们需要处理一些非技术问题。
在第一次开发分布式应用时,每个人都会有以下错误的假设:
分布式系统有三种主要类型:分布式计算系统、分布式信息系统和普适系统。
分布式计算系统也有三种类型:
集群计算 底层硬件由类似的工作站或个人电脑的集合组成,使用高速局域网紧密连接。此外,每个节点都运行相同的操作系统。几乎在所有情况下,集群计算都用于并行编程,其中一个单一的(计算密集型)程序在多台机器上并行运行。
网格计算 由分布式系统组成,这些系统通常被构建为计算机系统的联盟,每个系统可能属于不同的管理领域,并且在涉及硬件、软件和部署的网络技术时可能非常不同。网格计算系统中的关键问题是,来自不同机构的资源被汇集在一起,允许来自不同机构的一群人合作,确实形成了一个系统的组合。
云计算 提供了动态构建基础设施的设施,并从可用的服务中组成所需的东西。与与高性能计算密切相关的网格计算不同,云计算远不止是提供大量的资源。云计算的特点是一个易于使用和访问的虚拟化资源池。而且,资源的使用方式可以动态配置,为可扩展性提供了基础:如果需要做更多的工作,客户可以简单地获得更多的资源。在实践中,云被组织成四个层次,如图3所示:
分布式共享内存多计算机(或简称DSM系统)
为了克服共享内存系统和分布式内存系统的局限性,DSM系统允许一个处理器在另一台计算机上寻址一个内存位置,就像寻址本地内存一样。这可以利用操作系统现有的技术来实现,例如,将各个处理器的所有主内存页映射到一个单一的虚拟地址空间。
但是,DSM最终不得不被放弃,原因很简单,性能永远无法满足程序员的期望,他们宁愿求助于复杂得多、但性能更好(可预测)的消息传递编程模型。
Another important class of distributed systems is found in organizations that were confronted with a wealth of networked applications, but for which interoperability turned out to be a painful experience.
另一类重要的分布式系统出现在一些组织中,这些组织面临着大量的网络化应用,但对它们来说,互操作性是一种痛苦的经历。
解决方案是将应用程序整合到一个企业范围的信息系统中。根据整合发生的地方,有两种类型的分布式信息系统。
一般来说,有四种方法来支持企业应用集成:
移动和嵌入式计算设备的引入导致了通常所说的普适性系统。它们的独特之处在于,用户和系统组件之间的分离更加模糊了。
移动计算系统: 首先,构成(分布式)移动系统一部分的设备可能差别很大,包括智能手机、遥控器、传呼机、汽车设备等等。其次,在移动计算中,设备的位置被认为会随时间而改变。所以我们需要使用容许中断的网络。
传感器网络: 一个传感器网络通常由几十到几百或几千个相对较小的节点组成,每个节点都配备了一个或多个传感设备。此外,节点往往可以充当执行器。大多数传感器网络使用无线通信,并且节点通常是由电池供电的。因为它们有限的资源、有限的通信能力,在设计系统是必须重点考虑效率。
在论文的最后,作者集中讨论了分布式系统未来几年的两个发展领域。