第 2 节 全局视角
1. 核心问题
什么是软件架构?区块链在软件系统的“全局图”里处在什么位置,它的根本目的是什么?
2. 生活化比喻与通俗案例
买车挑引擎
买车时,同一款车往往可以选不同的发动机:柴油、汽油或者电动。这是“模块化”的结果,也就是把上一节的分层思想用在了汽车上。
- 外面看一模一样:两辆车外观、内饰相同,都能载人、开空调、听音乐。
- 引擎盖下大不相同:动力不同,驾驶感受就不同;而且引擎还会影响车价、使用成本、燃料种类、排气系统,甚至刹车的尺寸。
软件也一样:两个外表、功能完全相同的转账 App,底层用来“驱动”它的架构可能完全不同。带着这个画面,就容易看懂区块链在全局中的位置。
一个人拍板 vs. 大家商量
- 集中式像“一个人拍板”:所有事都由老板决定,效率高;可老板一旦联系不上,整个公司就停摆,这叫单点故障。
- 分布式像“合伙人圆桌会”:几位合伙人地位平等,少一两个人照样能按规则运转;代价是每件事都要沟通协商,花时间花精力。
3. 核心原理解析
用分层看支付系统
把上一节的“层次 × 切面”用在一个支付系统上:
| 层次 \ 切面 | 功能性切面 | 非功能性切面 |
|---|---|---|
| 应用层 | 存款、取款、转账、查询余额 | 界面美观、操作简单、转账速度快、参与者多 |
| 实现层 | 软件架构:集中式或分布式 | 全天 24 小时可用、防欺诈、维护完整性、保护用户隐私 |
实现层功能性那一格写的是“用什么技术让系统运转”,也就是给系统选“引擎”:选用哪种软件架构。本节接下来讨论的,正是集中式和分布式这两种架构。
两种软件架构
软件架构是指系统的各个组成部分(也叫节点)如何组织、彼此如何连接。最基本的两种架构正好是两个极端:
- 集中式架构(Centralized):所有组件都围绕并连接到一个中心组件;外围组件之间不直接相连,每个只和中心有一条连线。
- 分布式架构(Distributed):组件彼此连成网络,没有任何中心的协调或控制。不是每个节点都和其他所有节点直连,但任意两个节点至少能间接连通。
更完整地说,分布式系统是多台独立的计算机,借助通信介质相互协作、共同完成某个目标,而且没有任何中心化的控制或协调者。
分布式系统的四个优点
- 算力更强(Higher Computing Power):整体算力是所有联网计算机算力之和。事实证明,即使由性能一般的电脑组成,分布式系统的算力也能超过单台超级计算机。
- 成本更低(Cost Reduction):过去 20 年里,普通电脑、内存、硬盘和网络设备价格大幅下降。分布式系统由很多台电脑组成,初始成本其实比单台电脑高;但和性能相当的超级计算机比,它的建造、维护和运营成本低得多。而且替换其中某台电脑,对整个系统几乎没有影响。
- 可靠性更高(Higher Reliability):个别机器宕机,整个网络仍能继续运转;没有单点故障,一个节点坏了,其他节点可以接手。
- 自然增长(Natural Growth):再接入几台电脑,算力就能细粒度地一点点增加,正好契合需求逐步增长的方式。单台电脑则不同,在被换成更强的机器之前,算力一直不变,增长是“跳台阶”式的。
分布式系统的五个缺点
- 协调开销(Coordination Overhead):没有中心来指挥,协调只能由成员自己完成,这要耗费精力和算力,而这些本可以用在真正的计算任务上。
- 通信开销(Communication Overhead):协调离不开通信,需要通信协议,还要收发和处理消息,同样消耗算力。
- 依赖网络(Dependency on Networks):计算机靠网络传消息,网络自身的问题会影响通信与协调;没有网络,就没有分布式系统。
- 程序更复杂(Higher Program Complexity):软件必须额外处理协调、通信和网络使用等问题。
- 安全问题(Security Issues):通过网络发送数据,就可能被不可信的人截取和滥用。网络的访问限制越少,安全问题就越大。
分布式对等系统(Peer-to-Peer)
对等网络是一种特殊的分布式系统。其中每台计算机(也叫对等节点或节点)把自己的算力、存储、数据或带宽直接提供给网络中的其他成员,没有中心协调点。所有节点的权利和角色平等,既是资源的提供者,也是使用者。
它常用于文件共享、内容分发、隐私保护等。核心思路很简单:把用户的电脑变成组成系统的节点。用的人越多,系统就越大越强。这个思路及其带来的挑战,是后面几节的主线。
集中与分布的混合
集中式与分布式是两个对立的极端,工程师自然会把两者混合。有两种典型形态,以后理解区块链在现实中的应用时会用到:
- 分布式系统中的中心:乍看节点连成了网,但所有节点都连到中间那一个节点上,表面分布式,实际是集中式。例如早期的音乐分享软件 Napster:用户之间直接传文件,但查找歌曲要靠一台中央目录服务器(下一节详述)。
- 中心内部的分布式系统:乍看是集中式,外围节点都只连一个大的中心;但这个中心内部其实是一个分布式系统,外围节点甚至可能根本不知道它的存在。
这两种形态的共同点是:很难看出它们的真实性质。到底是集中式还是分布式?未必要给它们起专门的名字,但要意识到它们的双重性质。以后讲区块链商业化时,还会回到这一点。
怎样识别分布式系统
混合架构让识别变得困难。拿不准时,就去找一个单一组件,比如唯一的数据库、名称或用户注册中心、登录/登出组件,或者一个能关停整个系统的紧急开关。找到了,这个系统就不是分布式的。
经验法则:只要存在某个单一节点或组件,一旦停用或失灵就能让整个系统瘫痪,那么不管它的架构看起来多复杂,这个系统都不是分布式的。
区块链的目的
设计软件系统时,选架构就像给车选引擎。架构的选择与应用层的功能无关,所以功能完全相同的系统,既可以是集中式的,也可以是分布式的;上面那个支付系统两种都能做。架构只是实现系统的手段。
两种架构各有优缺点,做事方式也不同,尤其是保证完整性的方法截然不同。这正是区块链登场的地方:区块链是在分布式软件系统中实现完整性的工具。所以,它可以看作实现层中用来达成某个非功能性特性的工具。
一句话:区块链的目的是在分布式系统中实现并维护完整性。
在分布式系统中实现完整性,听起来很技术、甚至有点枯燥。让人兴奋的是另一个问题:这个分布式系统做的是什么,它取代的又是怎样的集中式系统?下一节会讲对等系统如何改变了世界,以及区块链为什么也有同样的潜力。
4. 图解
5. 小白速记要点
- 架构是看不见的引擎:架构决定组件如何组织、如何连接;同样的应用层功能,可以用集中式实现,也可以用分布式实现。
- 两个极端:集中式围绕一个中心;分布式由独立计算机协作,没有中心控制或协调。
- 分布式的得与失:优点是算力强、成本低、可靠、可自然增长;代价是协调开销、通信开销、依赖网络、程序复杂、安全问题。
- 经验法则:只要有一个能让整个系统瘫痪的单一组件,它就不是分布式系统。
- 区块链的位置与目的:区块链属于分布式系统的实现层,目的是在分布式系统中实现并维护完整性。
6. 学习成果检测:十道练习题与解析
题目 1(单选题)
两辆外观、内饰完全一样的车,分别装了汽油发动机和电动机。这个比喻想说明什么?
- A. 电动车的驾驶感受一定优于燃油车
- B. 应用层功能相同的软件,在实现层可以选用完全不同的架构
- C. 只要界面做得漂亮,底层怎么实现都无所谓
- D. 只有应用层功能变化时,底层架构才需要改变
查看答案
答案:B
- 解析:比喻说明应用功能与底层实现可以分开选择。同样是转账记账,底层既可以是集中式,也可以是分布式。
题目 2(单选题)
集中式架构最突出的弱点是什么?
- A. 节点之间的通信流量过大
- B. 存在单点故障,中心一旦失灵,整个系统停摆
- C. 普通计算机的采购价格过高
- D. 无法存储超过 100 个用户的数据
查看答案
答案:B
- 解析:集中式系统所有组件都依赖中心,中心就是单点故障,中心失灵,整个系统停摆。
题目 3(多选题)
与单台超级计算机相比,分布式系统有哪些优点?
- A. 算力更强(Higher Computing Power)
- B. 综合成本更低(Cost Reduction)
- C. 完全不受网络延迟影响
- D. 可以通过添加电脑细粒度地自然增长(Natural Growth)
查看答案
答案:A、B、D
- 解析:四个优点是算力更强、成本更低、可靠性更高、自然增长。C 错误,依赖网络恰恰是分布式系统的缺点。
题目 4(单选题)
判断一个自称“分布式”的系统是否名副其实,本节的经验法则是:
- A. 看软件界面是否有科技感
- B. 看官网是否支持多种语言
- C. 看系统中是否存在某个单一组件,一旦失灵就能让整个系统瘫痪
- D. 看参与运行的电脑是否超过一万台
查看答案
答案:C
- 解析:经验法则:只要有一个单一组件能让整个系统瘫痪,就不是分布式系统,与界面、语言、节点数量无关。
题目 5(多选题)
分布式系统需要付出哪些代价?
- A. 协调开销:没有中心,协调要由成员自己完成
- B. 通信开销:需要通信协议,并收发和处理大量消息
- C. 依赖网络:没有网络就没有分布式系统
- D. 程序更复杂:软件要额外处理协调、通信和网络问题
查看答案
答案:A、B、C、D
- 解析:四项都是分布式系统的缺点;另外还有第五个:安全问题。
题目 6(单选题)
小李做了一款文件共享软件:用户之间直接互传文件,但注册和搜索资源都必须连到小李家里唯一一台服务器。小李家一停电,所有人都无法登录和搜索。这个系统本质上属于:
- A. 纯粹的分布式对等系统
- B. 表面分布式、实际有中心的“分布式系统中的中心”
- C. 不需要任何软件架构的本地系统
- D. 高度可靠的容灾系统
查看答案
答案:B
- 解析:文件传输看似点对点,但注册和搜索都离不开小李家的那台服务器,这台服务器一停系统就瘫痪,属于“分布式系统中的中心”。
题目 7(判断题)
银行系统的存款、取款、查流水等功能只能用集中式系统实现,分布式系统在原理上无法实现相同的功能。
- ( )正确
- ( )错误
查看答案
答案:错误
- 解析:架构选择与应用层功能无关。同样的支付功能,既可以用集中式实现,也可以用分布式实现。
题目 8(判断题)
分布式系统通过网络传送数据,网络的访问限制越少,它面临的安全问题就越大。
- ( )正确
- ( )错误
查看答案
答案:正确
- 解析:数据在网络上传送,可能被不可信的人截取和滥用;网络访问限制越少,安全问题越大。
题目 9(单选题)
对区块链最准确的定位是:
- A. 应用层上一款供用户转账的手机 App
- B. 一种由单一机构统一管理的集中式数据库
- C. 分布式系统实现层中,用来实现和维护完整性的工具
- D. 应用层中负责界面美观的非功能性特性
查看答案
答案:C
- 解析:区块链不是应用层的 App,也不是集中式数据库,而是分布式系统实现层中用来实现和维护完整性(一个非功能性特性)的工具。
题目 10(情景分析问答题)
一家公司宣称推出了“纯分布式的社交应用”:全球 5000 台服务器存储用户图片,即使 1000 台损坏,图片仍然在线。但安全专家发现,用户每次打开 App 都必须先向公司唯一的认证服务器 auth.company.com 请求通行令牌;拿不到令牌,App 就直接退出。
请用本节的经验法则分析:这款应用是不是真正的分布式系统?为什么?
查看答案
结论:不是真正的分布式系统。
- 找单一组件:按经验法则,看有没有一个组件失灵就能让整个系统瘫痪。
- 事实:存储节点虽有 5000 台,但所有用户都必须经过唯一的认证服务器
auth.company.com。 - 后果:这台服务器一旦故障或关闭,全球用户都无法使用,5000 台存储节点也就没人用得上了。
- 定性:这属于“分布式系统中的中心”:存储是分布式的,但整个系统仍受制于一个单点。