第2课:集中式还是分布式——区块链在系统架构中的位置
前面已经学会把软件拆成应用层与实现层、功能性与非功能性。接下来要把这些格子放回整张系统蓝图里,看清软件组件怎样组织、集中式与分布式各有什么得失,以及区块链究竟站在什么位置。
回顾上一课:用四个格子看懂系统
1. 核心问题
同样的用户功能,为什么可以由完全不同的底层系统来完成?一个系统究竟怎样组织组件、怎样连接组件,才叫集中式或分布式?区块链又为什么会落在“实现层”的“非功能性”这一边?
2. 生活化比喻与通俗案例
两辆外观相同的车
买一辆车时,外形可以相同,发动机却可以选择柴油、汽油或电动。看起来一样的两辆车,开起来可能完全不同。
发动机的选择还会继续影响很多结果:
- 动力强弱不同,驾驶感受不同。
- 价格、日常运行成本不同。
- 燃料种类、排气系统和刹车尺寸也可能不同。
这件事背后的思路叫模块化(Modularization):把系统的一部分替换掉,整体仍然可以工作。它其实就是把上一层课学到的“分层”用在一辆车上。把这个思路放到软件里,用户看到的功能就像车身外观;真正让功能运转的底层组织方式,则像发动机。
对应到软件系统:
- 用户能直接使用的功能,对应应用层(Application Layer)。
- 让功能真的发生的技术安排,对应实现层(Implementation Layer)。
- 组件怎样组织和连接,对应软件架构(Software Architecture)。
- 架构选择不改变用户想要什么功能,却会改变成本、可靠性、复杂度和完整性维护方式。
因此,区块链(Blockchain)不是一种新的“界面功能”。它更像实现层里的一种工具,专门帮助分布式架构完成一项必须承担的非功能性任务——完整性。
3. 核心原理解析
3.1 同一个支付系统,功能与实现可以分开看
假设要做一个支付系统。用户最关心的是这些功能:
- 存款
- 取款
- 转账
- 查看账户余额
这些都属于应用层的功能性切面(Functional Aspect)。
应用层也会有非功能性(Non-Functional Aspect)要求,例如界面漂亮、操作简单、转账速度快、参与者多。实现层同样有非功能性要求,例如全天可用、防欺诈、维持完整性(Integrity)、保护用户隐私。
但实现层中“由什么技术完成这些功能”这一格,可以暂时留空。这个空位不是漏掉了,而是一个需要作出的选择:
用什么“引擎”来运行这个支付系统?
这个选择首先落在软件架构上。
3.2 什么是软件架构
软件架构(Software Architecture)描述系统的各个组成部分怎样组织,以及彼此怎样连接。
软件系统的组成部分通常叫组件(Component)。组件可以是一个软件模块、一台计算机,也可以是承担特定职责的其他单元。架构图里通常把组件画成圆圈,也常直接叫节点(Node)。
架构讨论的不是“按钮长什么样”,而是“系统的任务由哪些部分承担,它们之间怎样联系”。
3.3 集中式架构
集中式架构(Centralized Architecture)围绕一个中心组件组织系统。
- 外围组件都连接到中心组件。
- 外围组件通常不直接彼此连接。
- 协调和控制集中在中心。
这种结构容易理解,也容易让人知道“事情由谁统管”。代价是中心成为关键位置:中心一旦失效,整个系统可能随之停摆。
3.4 分布式架构
所谓分布式架构(Distributed Architecture),可以理解为:一组彼此独立的计算机,通过某种通信方式协同完成同一个目标;整个过程没有一个总揽控制与协调的中心。
这里的“分布式”不是要求每两个节点之间都直连。
更准确的关系是:
- 不要求每个节点与所有其他节点直接相连。
- 任意两个节点至少要能通过一条路径间接通信。
- 没有任何一个中心负责统一协调所有成员。
所以,分布式描述的是系统的组织和控制方式,不是简单地“计算机数量很多”。
3.5 分布式的四个优点
更强的计算能力
第一个优点叫更强的计算能力(Higher Computing Power)。分布式系统的总算力,就是把所有联网计算机的计算能力加在一起。已经证实:由多台算力不高的普通计算机组成的系统,总算力可以超过一台孤立摆放的超级计算机。
更低的综合成本
第二个优点叫更低的综合成本(Cost Reduction)。过去 20 年,主流计算机、内存、磁盘空间和网络设备的价格大幅下降。分布式系统需要很多台计算机,所以初始投入高于单台普通计算机。但它不是要和一台普通电脑比较,而是要和“提供相当计算能力的超级计算机”比较:建造、维护和运行一套大型超级计算机的成本,仍然比建造、维护和运行一套分布式系统高得多。
另外,替换其中一台普通计算机,通常不会对整个系统造成明显影响。
更高的可靠性
第三个优点叫更高的可靠性(Higher Reliability)。个别机器崩溃时,其他机器仍可继续运行和接手任务。分布式系统没有单一节点造成的全系统故障点,因此整体可靠性可以高于单台计算机。
可以自然增长
第四个优点叫自然增长(Natural Growth)。需要更多计算能力时,可以接入更多计算机,让系统能力一小档一小档地增加。单台计算机在更换为更强型号前,能力基本固定;升级时则会出现一次跳跃。
3.6 分布式的五个代价
分布式不是只有好处。没有中心统一指挥,成员就必须自己协调。五类代价分别是协调开销、通信开销、依赖网络、更高的程序复杂度和安全问题。
协调开销
成员之间要决定谁做什么、先后顺序如何、冲突怎样处理。这些协调工作会占用本该用于真正计算任务的精力和算力,形成协调开销(Coordination Overhead)。
通信开销
协调依赖沟通。计算机之间要发送、接收和处理消息,还要遵守通信协议。这些通信同样消耗资源,形成通信开销(Communication Overhead)。
依赖网络
依赖网络(Dependency on Networks)是指消息需要通过通信介质传输。网络出现延迟、中断或拥塞,会直接影响成员之间的通信与协调。没有网络,就没有分布式系统内部的沟通。
更高的程序复杂度
更高的程序复杂度(Higher Program Complexity)意味着软件开发除了解决业务问题,还必须额外处理协调、通信和网络使用。参与组件越多,这些额外问题通常越需要认真设计。
安全问题
安全问题(Security Issues)来自网络传递:数据在网络中传递,可能被不可信的一方截取或滥用。网络访问限制越少,系统需要面对的安全问题就越大。
3.7 点对点网络
点对点网络(Peer-to-Peer Network)是一类特殊的分布式系统。
其中的计算机叫点对点节点(Peer),也常直接叫节点。每个点对点节点都可以把计算能力、存储空间、数据或网络带宽直接提供给其他成员,同时也可以使用别人提供的资源。
点对点网络有三个关键特征:
- 没有中心协调点。
- 各节点在权利和角色上平等。
- 每个节点既可以是资源提供者,也可以是资源使用者。
文件共享、内容分发和隐私保护都出现过点对点网络应用。它的核心思路是把用户自己的计算机变成系统节点:参与者越多,系统可调用的资源也可能越多。
但“参与者越多,系统越强”并不自动消除协调、通信、安全和程序复杂度这些代价。
3.8 集中与分布的混合形态
集中式和分布式是两个相反的极端。现实系统经常把两者组合起来,形成混合架构。
分布式系统中的中心
表面看,许多组件连成网络;仔细看,所有组件仍然围绕一个中心连接。它看起来分布式,实际却由中心控制,因此本质接近集中式。
中心内部的分布式系统
表面看,外围组件都只连接一个大中心;但中心内部本身又是一个分布式系统。外围组件甚至可能不知道中心内部怎样运行。
这两种混合形态说明:只看一张架构图是否“像网络”,不足以判断真实性质。
3.9 怎样识别分布式系统
拿不准一个系统是否真正分布式时,可以重点找这些位置:唯一的数据库、名称登记表或用户登记表、登录/登出组件,或者能一键停掉整个系统的紧急开关。然后问一个关键问题:
是否存在某个单一节点或组件,一旦停用或失灵,就能让整个系统无法工作?
反过来说:只要找到一个能让全局停摆的组件,就不必再被外观迷惑——这个系统不能算分布式。
这个判断法抓住的是架构本质:分布式不仅看“有很多机器”,更看系统是否真的没有中心控制或协调。
3.10 区块链在全局中的位置
架构选择与应用层功能彼此独立,并不存在必须谁先谁后的顺序。
因此,两个应用层功能完全相同的系统,可以分别使用集中式和分布式架构。架构本身是一种实现手段,不是用户直接购买的应用功能。
两种架构都能提供功能,却会用不同方式处理非功能性要求。可以这样理解它们在完整性上的差别:集中式通常把关键责任交给中心组件,分布式则必须在没有中心的情况下另建一套保证机制。
区块链正是在这里出现:
如果把区块链放回这张图里,它的任务就是:让分布式系统能够建立并维持完整性。
从分层与切面的语言看,区块链属于实现层;它服务的目标是完整性,属于非功能性切面。
4. 图解
集中式与分布式
两种混合架构
同一功能的两种引擎
5. 速记要点
- 架构决定组件怎样组织和连接。 应用层功能相同,不代表实现层架构相同。
- 集中式围绕中心。 外围节点通常只连中心,中心是关键控制点。
- 分布式没有中心控制。 独立计算机借助通信协作,不要求节点两两直连。
- 分布式有四个优点。 算力更强、综合成本更低、可靠性更高、可以自然增长。
- 分布式有五个代价。 协调开销、通信开销、依赖网络、程序更复杂、安全问题。
- 区块链在实现层。 它的目的是在分布式系统中实现并维持完整性,属于非功能性工具。
6. 课后检测
一、单选题(1–4)
题目 1
两辆外观相同的车可以装不同发动机。这个比喻最想说明软件的哪一点?
A. 应用层功能相同的系统,可以在实现层采用不同架构 B. 只要界面漂亮,底层怎样实现都无所谓 C. 软件架构会改变用户想要完成的任务 D. 分布式系统一定比集中式系统更漂亮
查看答案
答案:A
解析: 车身外观相同,像应用层功能相同;发动机不同,像实现层采用的架构不同。发动机还会影响价格、成本和运行方式,对应架构对非功能性要求的影响。
- B 错:应用功能相同,不代表实现层可以随意忽略可靠性和完整性。
- C 错:架构是实现手段,不会改变用户想要完成的任务。
- D 错:比喻没有讨论界面美观,也没有证明某一种架构更漂亮。
题目 2
下列关于分布式架构的描述,哪一项最准确?
A. 每两个节点都必须直接连接 B. 多台独立计算机借助通信协作,没有中心控制或协调 C. 只有计算机数量足够多,就一定是分布式 D. 所有数据都必须保存在同一台中心计算机
查看答案
答案:B
解析: 分布式系统由多台独立计算机组成,通过通信介质协作,并且没有中心控制或协调者。
- A 错:节点不要求两两直连,只需至少存在间接通信路径。
- C 错:机器数量不是判断分布式的唯一条件,关键是是否存在中心控制。
- D 错:数据集中在同一个中心,正是集中式架构的典型特征。
题目 3
一个系统存在唯一的认证中心,所有节点都必须得到它许可才能继续工作。按照本课的判断方法,这个系统最准确的判断是:
A. 一定是纯分布式系统 B. 属于分布式系统中的中心 C. 完全没有软件架构 D. 只要节点多,判断方法就失效
查看答案
答案:B
解析: 这个系统虽然可能有大量节点,但唯一的认证中心掌握关键权限。一旦该中心停止工作,整个系统就无法继续运行,因此属于“分布式系统中的中心”。
- A 错:存在能停掉全局的单点,不符合真正分布式的本质。
- C 错:任何软件系统都有某种组织结构。
- D 错:判断方法关注的正是单一控制点,与节点数量多少无关。
题目 4
区块链最准确的定位是:
A. 应用层上一款负责界面设计的 App B. 集中式系统的唯一数据库 C. 分布式系统实现层中用来实现并维持完整性的工具 D. 一种替代全部网络通信协议的硬件
查看答案
答案:C
解析: 区块链不是应用层的用户功能,而是实现层中的技术工具;它要实现并维持的目标是完整性,因此属于非功能性切面。
- A 错:App 和界面属于应用层。
- B 错:集中式数据库不代表区块链的定位。
- D 错:区块链不是网络硬件,也不替代整个通信介质。
二、多选题(5–7)
题目 5
下列哪些属于分布式系统相对于单台计算机的优点?
A. 可以汇集多台计算机的计算能力 B. 与提供相当能力的超级计算机相比,综合成本更低 C. 个别机器崩溃时,其他机器可以继续工作 D. 可以通过增加计算机逐步扩展能力 E. 完全不会受到网络问题影响
查看答案
答案:A、B、C、D
解析: 四点是分布式系统的四个主要优点:计算能力、综合成本、可靠性和自然增长。
- A 正确:总算力来自多台计算机的合力,也就是把每台机器的计算能力加在一起。
- B 正确:与提供相当计算能力的超级计算机相比,分布式方案的综合成本更低。
- C 正确:个别机器故障时,其他机器可以接手。
- D 正确:可以通过接入更多计算机逐步扩展。
- E 错误:分布式系统高度依赖网络,网络问题会直接影响通信与协调。
题目 6
分布式系统需要承担哪些典型代价?
A. 协调开销 B. 通信开销 C. 依赖网络 D. 更高的程序复杂度 E. 安全问题
查看答案
答案:A、B、C、D、E
解析: 这五项都是分布式的典型代价。
- 没有中心统一指挥,成员需要自己协调。
- 协调要求通信,通信需要协议并消耗资源。
- 通信依赖网络,网络故障会影响整个协作。
- 软件还要额外处理协调、通信和网络使用,复杂度更高。
- 数据在网络中传递,会引入被截取或滥用的安全风险。
题目 7
关于点对点网络,下列哪些说法正确?
A. 没有中心协调点 B. 节点在权利和角色上平等 C. 节点既可能是资源提供者,也可能是资源使用者 D. 每个节点必须与所有其他节点直接连接 E. 参与节点越多,协调、通信和安全问题就自动消失
查看答案
答案:A、B、C
解析: 点对点网络没有中心协调点,节点权利和角色平等,并且每个节点既提供资源也消费资源。
- A、B、C 正确,符合点对点网络的基本定义。
- D 错误:节点不必与所有其他节点直接相连。
- E 错误:参与规模扩大不会自动消除协调、通信、安全和程序复杂度问题。
三、判断题(8–9)
题目 8
只要两个系统给用户提供的应用层功能相同,它们的软件架构就必须相同。
查看答案
答案:错误
解析: 应用层功能与实现层架构可以分开选择。完全相同的支付、存储或通信功能,可以由集中式系统实现,也可以由分布式系统实现。
真正不能混为一谈的是两点:
- 用户需要什么功能,属于应用层。
- 用什么架构让功能运转,属于实现层。
题目 9
一个系统表面看起来像分布式网络,只要存在一个能让整个系统停摆的中心组件,它仍然不是真正的分布式系统。
查看答案
答案:正确
解析: 判断分布式时,不只看节点数量和外观是否像网络,而要找是否存在单一控制点。
如果某个组件一旦停用或失灵就能让整个系统无法工作,那么这个组件就是单点故障,系统本质上仍是集中式或混合式,不是真正的分布式系统。
四、情景分析题(10)
题目 10
一家公司推出文件共享应用:
- 用户之间可以直接传输文件。
- 文件存储分散在许多用户的计算机上。
- 但每次登录、搜索和获取访问权限,都必须先连接公司唯一的认证服务器。
- 这台认证服务器一旦停机,所有用户都无法继续使用应用。
请判断这个应用是不是真正的分布式系统,并说明你的判断依据。再从协调、通信、网络安全和完整性维护的角度,指出它为什么不能只看“文件分散存储”就下结论。
查看答案
答案:不是真正的分布式系统
判断依据: 文件存储虽然分散在许多用户计算机上,但登录、搜索和访问权限都经过唯一认证服务器。该服务器一旦停机,所有用户都无法继续使用,符合“单一组件能让整个系统停摆”的判断标准,因此它属于“分布式系统中的中心”。
四项代价说明了为什么不能只看文件存储位置:
- 协调: 各节点仍然需要由认证服务器决定谁能进入、能做什么,中心承担关键协调和授权工作。
- 通信: 文件传输可能发生在用户节点之间,但登录、搜索和权限查询仍依赖与中心服务器通信;网络或中心通信故障会打断整个使用流程。
- 网络安全: 文件分散不等于访问安全。中心认证信息的泄露、认证通道被截取,仍可能影响整个系统。
- 完整性维护: 文件分散存储后,还要保证不同节点上的文件状态一致、访问规则一致,并防止未授权修改。认证中心本身也可能成为需要额外保护的关键点。
这个例子说明,分布式架构不会自动带来所有优点,也不能因为节点数量多就忽略中心控制、通信成本和安全边界。