区块链基础-第一阶段第二步骤 纵观全局

步骤2

纵观全局

软件架构及其与区块链的关系

本步骤不仅描述了区块链所在的全局,而且还突出了它在全局中的定位。为了让你能够看到全局,本步骤介绍了软件架构的概念,并解释了它与将系统划分为层和面的概念的关系。为了帮助你在全局中识别区块链的定位,这一步骤突出介绍了区块链和软件架构之间的关系。最后,本步骤用一句话指出了区块链的核心目的,理解这个目的是理解区块链和理解后续步骤的基础。

一个比喻

你买过汽车吗?大多数人都买过。即使你从未买过一辆车,你可能也知道汽车上装有不同类型的发动机(如柴油、汽油或电动)。这是模块化过程的一个例子,是将分层的概念应用于汽车的结果。购买汽车的时候,选择不同的发动机,就将会有不同的结果。两辆外观完全相同的汽车,可以在发动机的功率方面存在很大的差异,因此会有非常不同的驾驶性能。另外,你所选择的发动机也会影响到这辆车的其他特性,比如价格,运行成本,燃料类型,排气系统,以及刹车的尺寸。记住以上场景,后续理解区块链在全局中的角色将会容易些。

支付系统

让我们把分层的概念应用到支付系统中。表2-1显示了一些用户的需求,以及应用层和实现层的一些非功能面。

表2-1:支付系统的层和面

在表格中那个通常你会看到用来让系统工作的技术信息的位置,你是否看到了问号?这是故意为之的。在这个地方,由你决定应该使用哪个“发动机”来运行你的系统。下一节将告诉你更多软件系统中等同于发动机的内容。

软件架构的两种类型

有很多方法可以实现软件系统。然而,在实现系统时,最基本的决策之一是关注它的架构,即它的组件是如何组织和相互关联的。软件系统的两种主要架构方法分别是集中式和分布式。

在集中式的软件系统中,组件分布在四周,并与一个中心组件连接。相比之下,分布式系统的组件构成一个连接的组件网络,而没有任何协调或控制的中心单元。

图2-1描述了这两个对立的架构。图中的圆圈代表系统组件,也称为节点,线表示它们之间的连接。这些组件做什么,以及节点之间交换什么样的信息,这些细节现在并不重要。重要的是这两种不同组织软件系统的方式。

图2-1的左图演示了一个分布式架构,其中组件之间相互连接,同时没有中心单元。重要的是,没有任何一个组件与所有其他组件直接连接。然而,所有的组件之间至少是间接地相互连接。图2-1的右图演示了一个集中式架构,其中每个组件都连接到一个中心组件。这些组件之间没有直接连接,它们只与中心组件有一个直接连接。

图2-1:分布式(左)与集中式(右)系统架构

分布式系统的优点

分布式系统比起单机的主要优点是:

更高的计算能力

降低成本

更高的可靠性

自然生长的能力

更高的计算能力

分布式系统的计算能力是将所有联网计算机的计算能力相结合的结果。因此,分布式系统通常比每台计算机拥有更多的计算能力。这已经被证明是正确的,即使拿相对较低计算能力的计算机组成的分布式系统,和独立的超级计算机做比较,结果也是一样的。

降低成本

在过去的20年里,主流计算机、内存、磁盘空间和网络设备的价格急剧下降。由于分布式系统由多个计算机组成,因此分布式系统的初始成本高于单个计算机的初始成本。但是,创建、维护和操作超级计算机的成本仍然远远高于创建、维护和操作分布式系统的成本。这绝对是对的,因为替换分布式系统内的单个计算机,不会影响到整体系统。

更高的可靠性

分布式系统提升的可靠性是基于这样一个事实,即使在单个机器崩溃的情况下,整个计算机网络仍旧可以继续运行。分布式系统没有单点故障。如果一个元素失效,剩下的元素可以接管。因此,一台独立超级计算机通常比分布式系统的可靠性更低。

自然生长的能力

分布式系统的计算能力是其各组成单位计算能力的聚合。人们可以通过将额外的计算机接入进来,以此来提高整个分布式系统的计算能力。因此,整个系统的计算能力可以以细粒度的方式递增。这支持了许多机构各类提升计算能力的需求。分布式系统的增量增长与单个计算机计算能力的增长形成了鲜明的对比。所有单个计算机提供了相同的能力,直到被一台功能更强大的计算机取代。这会导致计算能力的不连续增长,而计算服务的消费者很少会对此表示赞赏。

分布式系统的缺点

与单个计算机相比,分布式系统的缺点是:

协调开销

通信开销

对网络的依赖

更高的程序复杂性

安全问题

协调开销

分布式系统没有协调其各组件的中心实体,因此,协调工作必须由系统内各组件自己来完成。分布式系统中协调组件之间的工作是具有挑战性的,耗费精力,并且使得计算能力不能用于真正的计算任务,术语协调开销由此而来。

通信开销

协调需要沟通,因此,组成分布式系统的各计算机之间必须相互通信。这就需要通信协议的存在,以及消息的发送、接收和处理工作,而这些工作反过来又会耗费精力和计算能力,导致无法全部聚焦在真正的计算任务上,术语通信开销由此而来。

网络依赖

任何沟通都需要媒介。媒介负责在各主体之间相互传递信息。分布式系统中的计算机利用网络传递消息进行通信。网络也有自己的挑战和困难,这反过来又影响了分布式系统内各计算机之间的通信和协调。然而,没有网络,就没有分布式系统,没有通信,也不会有节点之间的协调,因此网络依赖由此而来。

更高的程序复杂性

解决计算问题需要编写程序和软件。基于前文提到的缺点,分布式系统中的软件也必须解决一些额外的问题,如协调、通信和网络。这些工作都增加了软件的复杂性。

安全问题

通过网络进行通信意味着发送和共享对真正的计算任务至关重要的数据。然而,通过网络发送信息意味着安全问题,因为不可信任的实体可能会滥用网络,以获取和利用信息。因此,任何分布式系统都必须解决安全问题。分布式节点通信网络的访问权限越少,分布式系统的安全性就越高。

分布式对等网络系统(P2P)

对等网络(P2P)是一种特殊的分布式系统。它们由多个独立的计算机(也称为节点)组成,这使得它们的计算资源(如处理能力、存储容量、数据或网络带宽)可以直接被网络中所有其他成员获得,而不需要任何协调中心。对等网络中的所有节点在系统中的权利和角色是平等的。此外,他们都是资源的供应者和消费者。

对等系统有很多有趣的应用,如文件共享、内容分发和隐私保护。大多数应用程序使用了一个简单但强大的想法:将用户的计算机变成节点,进而组成整个分布式系统。因此,越多的用户参与进来,系统就会变得越强大。这个做法的后果,以及它所面临的挑战,将会在后续的步骤中进行讨论。

混合集中式和分布式系统

集中式和分布式的系统是相互对应的。技术上的对应一直激励着工程师们创造出能够继承双方力量的混合系统。集中式和分布式系统也不例外。有两个典型的方法可以将这两个对应的系统组合在一起。这两个方法需要被理解透,因为它们将在学习现实世界中的区块链应用时,变得非常重要。它们是分布式系统中的中心,以及中心内部的分布式系统。

图2-2的左图演示了在分布式系统中建立一个中心组件的架构。乍一看,这些组件似乎组成了一个分布式系统。然而,所有的圆都与位于中间的大圆相连。因此,这个系统从表面上看是分布式的,但实际上是一个集中式系统。

图2-2:混合分布与集中式架构

图2-2的右图展示了相反的情形。这个系统乍看似乎是一个集中式的系统,因为外围的所有圆圈都有一条线直接连接到一个大的中心组件。然而,这个中心组件内部包含了一个分布式系统。对于这个位于中心组件内的分布式系统,外围组件甚至可能都不知道它的存在。

这两种情形有个共同点,就是很难确定它们的属性。它们是分布式的还是集中式的?可能没有必要给这些架构定义确定的名称。然而,明确它们的双重属性却是很重要的。强调特别重要,是因为要鉴别他们内部的集中性或分布性属性,是很不容易的事情。后续当我讨论区块链商业化的方式时,我将会回到这一点。

识别分布式系统

混合架构的出现,使得识别分布式系统变成一件难事。制定一个普遍接受的分布式系统定义不在本书的范围。然而,在读本书的过程中,还是需要一直记得什么是分布式系统,以及它与其他软件系统的区别。如果你不确定一个系统是否是分布式的,请找寻一个有能力终止整个系统的组件(例如,数据库、名称或用户注册表、登录或登出组件,或紧急关闭按钮)。如果你发现了这样一个组件,那么该系统一般不被认为是分布式的。

注:如果存在这样一个单独的组件,比如一个可以关停整个系统的开关按钮,那么该系统就不是分布式的。

区块链的用途

在设计软件系统时,人们可以选择使用哪种架构风格,类似于买车时选择引擎。架构决策可以独立于应用层的功能面进行,因此,人们无论是创建分布式或集中式系统,都可以在应用层上支持相同的功能。架构只是实现系统的一种手段。所以,如表2-1所示,一个支付系统既可以用分布式,也可以用集中式系统实现。

这两种架构都有自身的优点和缺点,以及各自不同的事物处理方法。选择一种架构,将会关系到如何实现系统的功能和非功能面。需要强调的是,两种架构概念有非常不同的维护完整性的做法。这是区块链的切入点,区块链是在分布式软件系统中实现完整性的工具。因此,区块链可以被看作是实现实现层非功能面的工具。

注:区块链的目的是在分布式系统中实现和维护完整性。

展望

在分布式系统中实现完整性是非常技术性的,也会有点枯燥。然而,想让人们觉得这件事情有意思,那么就得取决于分布式系统做什么,以及它取代了什么样的集中式系统。下一个步骤解释了P2P对等系统如何改变了我们的世界,以及为什么区块链作为实现分布式软件系统完整性的工具,也有改变世界的潜力。

总结

软件系统的架构决定了它的组件是如何组织和相互关联的。

集中式和分布式的软件架构可以被看作是相互对应的。

分布式系统由多台独立计算机组成,它们通过使用通信媒介相互协作,以实现特定的目标,而不需要任何中控来控制或协调。

根据经验法则,只要系统中有一个组件有能力将整个系统关停,那么这个系统就不是分布式的,无论它的架构看起来有多么的复杂。

区块链是分布式软件系统实现层的一部分。

区块链的目标是实现分布式软件系统中特定的非功能面:也即实现和维护其完整性。

谢谢关注大卫徐的订阅号!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180312G1UXYW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券