本文主要讨论了分布式系统。作者提供了关于分布式系统的概述,是一份很好的新手教程。
在论文的第一部分,作者简要回顾了计算机的演变,指出了分布式系统的两个技术基础:性能强大的微处理器的发展和高速计算机网络的发明。为什么这些技术很重要?
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.
1、什么是分布式系统?
分布式系统的宽泛定义:
A distributed system is a collection of autonomous computing elements that appears to its users as a single coherent system.
请注意,有两个特征:
特征1:自主计算元素的集合
- 每个计算元素(作为一个节点)都可以相互独立行动。一个集合中的节点可以彼此不同(从非常大的高性能计算机到手机或甚至更小的设备)。
- 他们必须沟通和协调行动,以实现一个共同的目标。
为了实现这一特点,我们必须考虑如何管理系统中的成员,如何处理缺乏统一的时间参照物的问题。
特征2:一个单一的连贯系统
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.
- 一个重要的设计目标:分配透明度。 详细内容见下一节。
分布式系统像中间件类似组织
为了帮助开发分布式应用,分布式系统通常被组织为一个单独的软件层,从逻辑上讲,它被置于作为计算机各自操作系统之上。这种组织方式如图所示。
它提供以下服务:
- 资源管理
- 便于应用间通信的设施
- 安全服务
- 账户服务
- 掩盖故障并修复故障
2、4个设计目标
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.
分布式系统应该使资源容易获得;它应该隐藏资源分布在网络上的事实;它应该是开放的;而且应该是可扩展的。
1)支持资源共享
资源几乎可以是任何东西,但典型的例子包括外围设备、存储设施、数据、文件、服务和网络,仅举几例。
通过支持资源共享,它有助于降低成本,促进不同节点之间的合作。
2)使分配透明化
有七种类型的分配透明度。
Transparency | 描述 |
---|---|
Access | 隐藏数据表示的差异和对象的访问方式 |
Location | 隐藏对象的位置(通常通过只给资源分配逻辑名称来实现)。 |
Relocation | 隐藏一个对象在使用过程中的移动(这在云计算的背景下变得越来越重要) |
Migration | 隐藏一个对象可能移动到另一个地方(它支持由用户发起的进程和资源的移动,而不影响正在进行的通信和操作)。 |
Replication | 隐藏一个对象被复制的情况 |
Concurrency | 隐藏一个对象可能被几个独立的用户共享(通过锁定机制实现)。 |
Failure | 隐藏一个对象的故障和恢复 |
为了区分 relocation 和 migration,有两个例子可以帮助理解:
- Relocation transparent: 整个网站可能已经从一个数据中心转移到另一个数据中心,以更有效地利用磁盘空间,但用户不应该注意到。
- Migration transparent: 移动电话之间的沟通–无论两个人是否真的在移动,移动电话都能让他们继续对话。
试图盲目地对用户隐藏所有的分布式环节并不是一个好主意 。完全的分配度是不可能实现的。高度的透明度和系统的性能之间也有一个权衡。
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.
结论是,在设计和实施分布式系统时,以分布式透明为目标可能是一个很好的目标,但它应该和其他问题一起考虑,比如性能和可理解性。实现完全透明的代价可能是惊人的高。
3)开放性
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.
一个开放的分布式系统本质上是一个系统,它提供的组件可以很容易地被其他系统使用,或集成到其他系统中。同时,一个开放的分布式系统本身往往由来自其他地方的组件组成。
- 互操作性: 两个来自不同制造商的系统或组件的实现可以共存并一起工作的程度,只需依赖共同标准所规定的彼此的服务。
- 可组合性: 即可移植性,为一个分布式系统A开发的应用程序可以不加修改地在一个与A实现相同接口的不同分布式系统B上执行的程度。
- 可扩展性: 增加新的组件或更换现有的组件应该很容易,而不影响那些原有的组件。
将策略与机制分离
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.
为了在开放的分布式系统中实现灵活性,关键是要把系统组织成一个相对较小且容易替换或适应的组件的集合。
从理论上讲,将政策与机制严格分开似乎是个好办法。然而,有一个重要的权衡需要考虑:分离得越严格,我们就越需要确保我们提供适当的机制集合。在实践中,这意味着提供了丰富的功能集合,反过来导致了许多配置参数。
4)具有可扩展性
a. 可扩展性的不同方面
一个系统的可扩展性可以通过三个不同的维度来衡量。
- 规模可扩展性: 一个系统可以就其规模进行扩展,这意味着我们可以很容易地在系统中增加更多的用户和资源,而不会有任何明显的性能损失。
当一个系统需要扩展时,我们经常会遇到集中式服务的限制。许多服务是集中式的,因为它们是使用分布式系统中特定机器上运行的单个服务器或服务器组来实现的。 这些服务器很容易成为 瓶颈:
- 计算能力,受到CPU的限制
- 存储能力,包括CPU和磁盘之间的传输速率
- 用户和集中服务器之间的网络
- 地域可扩展性: 一个地理上可扩展的系统是一个用户和资源可能相距甚远的系统。
在一个地理上可扩展的系统中,通信延迟可能是很重要的,这一事实很难被注意到。 另一个阻碍地理可扩展性的问题是,广域网络中的通信在本质上比局域网络的可靠性要差得多。此外,我们还需要处理有限的带宽问题。
- 管理的可扩展性: 一个可管理的系统是一个即使跨越了许多独立的行政组织,仍然可以被轻易管理的系统。
需要解决的一个主要问题是在资源使用、管理和安全方面的政策冲突。
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.
如果一个分布式系统扩展到另一个领域,需要采取两类安全措施。首先,分布式系统必须保护自己免受来自新领域的恶意攻击。第二,新领域必须保护自己免受来自分布式系统的恶意攻击。
b. 扩展技术
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.
当涉及到扩展时,也就是通过部署更多的机器来扩展分布式系统,基本上只有三种技术我们可以应用: 隐藏通信延迟,分配工作,以及复制。
- 隐藏通信延迟适用于地理可扩展性的情况。其基本思想很简单:尽可能地避免等待远程服务请求的响应。当我们等待回复时,我们可以做其他事情。
- 分区和分布,这涉及到把一个组件,分割成更小的部分,随后把这些部分分散到系统中。例如:由DNS提供的命名服务,分布在几台机器上,从而避免了由一台服务器来处理所有名称解析的请求。
- 复制组件: 复制不仅增加了可用性,而且还有助于平衡组件之间的负载,导致更好的性能。而且它还可以帮助隐藏通信延迟。请注意,复制需要一些全局同步机制。
c. 结论
从技术角度来看,规模的可扩展性是最容易。地理上的可扩展性是一个更棘手的问题,因为网络延迟是无法避免的。利用分布、复制和缓存技术与不同形式的一致性技术可以一定程度上解决问题。管理可扩展性似乎是最难解决的,部分原因是我们需要处理一些非技术问题。
5) 注意一些错误的假设
在第一次开发分布式应用时,每个人都会有以下错误的假设:
- 网络是可靠的
- 网络是安全的
- 网络是同质的
- 拓扑结构不会改变
- 延迟是零
- 带宽是无限的
- 传输成本为零
- 只有一个管理员
3 三种类型的分布式系统
分布式系统有三种主要类型:分布式计算系统、分布式信息系统和普适系统。
1) 高性能的分布式计算
分布式计算系统也有三种类型:
-
集群计算 底层硬件由类似的工作站或个人电脑的集合组成,使用高速局域网紧密连接。此外,每个节点都运行相同的操作系统。几乎在所有情况下,集群计算都用于并行编程,其中一个单一的(计算密集型)程序在多台机器上并行运行。
-
网格计算 由分布式系统组成,这些系统通常被构建为计算机系统的联盟,每个系统可能属于不同的管理领域,并且在涉及硬件、软件和部署的网络技术时可能非常不同。网格计算系统中的关键问题是,来自不同机构的资源被汇集在一起,允许来自不同机构的一群人合作,确实形成了一个系统的组合。
-
云计算 提供了动态构建基础设施的设施,并从可用的服务中组成所需的东西。与与高性能计算密切相关的网格计算不同,云计算远不止是提供大量的资源。云计算的特点是一个易于使用和访问的虚拟化资源池。而且,资源的使用方式可以动态配置,为可扩展性提供了基础:如果需要做更多的工作,客户可以简单地获得更多的资源。在实践中,云被组织成四个层次,如图3所示:
- Hardware: 处理器、路由器,但也包括电源和冷却系统。
- Infrastructure: 大多数云计算平台的骨干。它部署了虚拟化技术,为客户提供一个由虚拟存储和计算资源组成的基础设施。
- Platform: 平台层为云计算客户提供的服务类似操作系统为应用开发者提供的服务。
- Application:实际软件在这一层运行,并提供给用户进一步定制性。
分布式共享内存多计算机(或简称DSM系统)
为了克服共享内存系统和分布式内存系统的局限性,DSM系统允许一个处理器在另一台计算机上寻址一个内存位置,就像寻址本地内存一样。这可以利用操作系统现有的技术来实现,例如,将各个处理器的所有主内存页映射到一个单一的虚拟地址空间。
但是,DSM最终不得不被放弃,原因很简单,性能永远无法满足程序员的期望,他们宁愿求助于复杂得多、但性能更好(可预测)的消息传递编程模型。
在这一节的末尾,作者说:“An important side-effect of exploring the hardware-software boundaries of parallel processing is a thorough understanding of consistency models”. 我无法理解是什么意思。如果您对这句话有什么见解,请指点我一下。
2) 分布式信息系统
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.
另一类重要的分布式系统出现在一些组织中,这些组织面临着大量的网络化应用,但对它们来说,互操作性是一种痛苦的经历。
解决方案是将应用程序整合到一个企业范围的信息系统中。根据整合发生的地方,有两种类型的分布式信息系统。
- 分布式事务处理: 在最底层的集成允许客户将几个请求(可能是针对不同的服务器)打包成一个更大的请求,并让其执行。
- 企业应用集成(EAI): 集成通过让应用程序之间直接通信来进行。
一般来说,有四种方法来支持企业应用集成:
- 文件传输:一个应用程序产生一个包含共享数据的文件,随后被其他应用程序读取。有很多事情需要达成一致(文件格式和布局,文件管理,更新传播)。
- 共享数据库: 正如字面意思一样。
- 远程程序调用(RPC): RPC的一个主要缺点是,调用者和被调用者需要同时启动和运行才能成功。
- 消息传递: 消息传递系统将来自应用A的请求,发送到应用B,并在B上执行。消息传递系统确保最终请求被传递,如果需要,最终也会返回一个响应。
我不能很好地理解这部分。有许多技术细节我需要进一步学习。
3) 普适系统
移动和嵌入式计算设备的引入导致了通常所说的普适性系统。它们的独特之处在于,用户和系统组件之间的分离更加模糊了。
- Ubiquitous computing systems(泛在计算系统?): 该系统是普遍存在的,并持续存在。泛在计算系统的核心要求大致如下:
- 分布: 设备以透明的方式进行联网、分布和访问
- 交互: 用户和设备之间的互动是非常不显眼的。
- 语境意识: 系统意识到用户的环境,以优化互动。
- 自主性: 设备在没有人类干预的情况下自主运行,因此是高度自我管理的。
- 智能性: 系统作为一个整体可以处理广泛的动态行动和交互
我想作者一定是在谈论ChatGPT。
-
移动计算系统: 首先,构成(分布式)移动系统一部分的设备可能差别很大,包括智能手机、遥控器、传呼机、汽车设备等等。其次,在移动计算中,设备的位置被认为会随时间而改变。所以我们需要使用容许中断的网络。
-
传感器网络: 一个传感器网络通常由几十到几百或几千个相对较小的节点组成,每个节点都配备了一个或多个传感设备。此外,节点往往可以充当执行器。大多数传感器网络使用无线通信,并且节点通常是由电池供电的。因为它们有限的资源、有限的通信能力,在设计系统是必须重点考虑效率。
4 Outlook
在论文的最后,作者集中讨论了分布式系统未来几年的两个发展领域。
可靠性:使系统变得值得信赖
- 如何防止、处理和恢复由于系统中的固有错误而造成的故障?
- 如何提供更好的保护以防止蓄意的攻击?
- 如何保护用户免受系统侵害?
可扩展性:万物互联
- 开发可扩展的解决方案
- 将系统视为一个整体,并找到适当的形式来描述观察到的行为。