# 分布式容错狂想曲

By [x1a](https://paragraph.com/@x1a) · 2021-10-07

---

我，是一个普通的系统架构师。 在了解了区块链技术之后，感慨颇多。 本文仅仅代表本人观点亦或者想法。

  

本篇文章最初发布在币呼的通证经济板块。 今天之所以整理后发到这里，第一是希望更多的人可以读到本文。 第二，也为我下一篇文章 \*\*“柚子为什么比以太快--论确定性状态机的瓶颈与解决方案”\*\*做一个预热。请大家不吝点赞！ 

  

**【1】单体**

在互联网的前几年，我们倾向于把所有模块都放在一个容器里面运行。 这也就是我们经常说的单体应用。以一个基本的电商系统来说，一个单体应用里面可能包括了账户模块，订单模块，购物车模块，优惠模块，等等。

  

但随着访问量的增加，单体应用已经不足以满足需求。 我们使用了LB来实现负载均衡，以单体应用为单位进行横向扩容。但是，这种扩容方式是有很大的浪费。 因为对于不同时段，不同场景。 各个模块的负载都是不一样的，有多又少，即我们没有办法做到更细粒度的针对性扩容。

其次，随着代码库的变大， 代码以非常快的速度腐化着。 开发的人越多，共同维护一个代码库的冲突就会越多。 同时，由于模块直接没有明显的边界，各个模块非常强的耦合在一起。 整个代码就如同一个大泥球一般难以维护。

  

更糟糕的是，在一个共享的单体应用里面，所有的请求都会照成内存和CPU资源的竞争。 比如，在抢购环节，也许订单和支付模块是负载最大的模块。 假设每个应用要100的资源。 那么2个就是200，考虑资源竞争，其实大于200。 假如它们是分开的，我们可以2个100的物理机承载负载。 但是，当它们合在一起的时候，我必须有一台可以满足至少250的机器才可以承载。而摩尔定律限制了纵向扩容，单体应用设定了整体负载均衡扩容的上限。

  

单体应用的特定就是所有的服务都依赖于一个统一的平台。 共享一套代码库以及内存，CPU，IO这些资源。 

  

人们必须小心的运维着，针对所有服务的需求小心的调整着各种参数。祈祷这个单体应用正常的运行。 

  

同时，单体应用挂了，就意味着所有服务的不可用。 简单来说，整个网站挂掉。 这也就是我们说的容错性。 在不考虑负载均衡的情况下，单体系统没有容错性。 任何一个服务挂了，都会导致整个应用的不可用。

  

**【2】分布**

  

从单体应用转向分布式架构这个事情持续了几年。 当然，这里对分布式服务边界的划分，以及一致性提出了更多的要求。 

  

但是，当我们把单体应用拆分成多个分布式服务之后。 我们发现，服务多了，在同一时间，总有服务可用或者不可用。 

  

我们不像之前那么害怕一个服务挂掉。 因为任何一个服务挂了，整体系统还可用，或者只会出现部分不可用。 **虽然运维现在要管理的服务更多了，服务也总是会挂，但整体容错性却上升了**。

  

**【3】集群**

  

所有的区块链系统，或者说以比特币，以太，柚子为代表的**确定状态机系统**本质上可以看成是使用了不同共识算法的HA集群 （高可用集群）。 交易的打包生成区块，区块的同步让每个机器都有确定的历史。通过相同的代码，有确定历史的状态机都可以达到同样的结果。在这一点上，无论**中性化**还是**去中心的**HA集群都是同样的逻辑 （关于确定状态机也就是下一篇文章的重点）。

  

我觉得区块链带来的东西很多，但对于我来说，特别要提到的就是用最终一致性的方式解决分叉问题而非比如Raft的强同步方式。 

  

当然，还有一个，就是用经济学的方式保证了大部分节点是诚实的节点。 在本应该使用技术解决的地方，比特币引入了经济学，用非技术的方式解决了节点作恶问题。 

  

比特币是一个完美的工程学+经济学融合方案，解决了去中心化共识问题。

  

**【4】定义**

  

这里先给出一个我对区块链的定义。 从广义上来说，无论底层使用的协议是什么，又或者区块组织结构是树亦或者图，区块链的最终目的就是实现去中心化的证明。或者说，所有实现了去中心化证明的技术，我们都叫它区块链。

  

**【5】意义**

  

去中心化证明有什么作用，或者说有什么意义呢 换一句话说，解决了什么问题。 这个问题是以前无法解决的呢？

  

**去中心化证明可以解决一个以前无法解决的问题-即数据的去中心化剪切而不是复**制。 

  

当数据发送复制了，我们叫它信息，那么，当数据发生剪切了，我们叫它什么呢？ 我觉得，叫它价值是一个非常直接的推论【注：我觉得通证是代替价值更好的词语】。 

  

当然，也许有更好的名词。 所以基于以上推论，类比互联网解决了信息的去中心传递； **区块链的一个主要应用场景是实现价值的去中心化传递**（当然还有其他场景）**。** 

  

参考互联网，信息的去中心化带来了已经最可怕的事情就是**信息爆炸**。 那么，对于价值网络呢？ 价值会爆炸吗？？？ 在我看来这是必然的，这也是区块链带给这个社会最深远的变化。 未来一定会有各种各样的代币出现。

  

但是那样的社会好像变得更加复杂了，不是吗？ 就比如信息时代也让人们也变得更加复杂了，低头族，手机党，我们平静的生活总是要被干扰，这到底是不是一种进步呢？ 有什么好处呢？ 

  

对于互联网，好处很明显。 因为没有了可以依靠的信息来源，人们必须变得更加可以独立思考了。 要是没有这个能力，很难在信息时代生存。 

  

那么，对于价值网络呢？ 它让社会变得复杂了，好处呢？ 是进步吗？

  

【6】**狂想**

  

假如说比特币的成功是在工程学的基础上加入了经济学方法。 那么，反过来呢？ 经济学可以从工程学中学到什么？

  

我们现在的整个以国家为单位的经济体制，就如同单体应用一般。 各个行业，各个群体，都依赖于单一的价值体系。 就如同单体应用在竞争统一的cpu内存一个道理。 

  

假如是这个道理，那么，各行各业，各个群体，就是我们所谓的服务，这些服务每天都困恼于如何获得更多的内存和处理时间而相互制约。 效率，被大大降低了！

  

我们的国家， 也必须如同运维人员一样，如履薄冰的来调节各种参数，也就是我了解的宏观调控，来避免整个价值体系崩塌引起的结构性问题。

  

这是否以为着，是我们的经济体制太落后了，还处于“单体应用”这个阶段呢？

  

我知道宏观调控对于单体系统的重要性，我也知道看着各种指标此消彼长没办法瞒住全部服务的困恼。 那么，假如区块链技术最终打破了这种情况。 让每一个个体，群体，行业，都可以有自己的价值体系。 会是什么结果呢？ 

  

参考互联网工程学的结果，有一个直观的推论就是，这会释放生产力，提高负载能力。因为竞争的资源被打破了。

  

但这个好处隐含着另外一个可能就是，这些小经济体可能会因为配置错误或者其他原因很快的失败或者崩溃。 对的，就如同每天总是会有一些服务挂掉一样。 假如说一个经济体会很容易的破掉，的确是很令人不安的一件事情。

  

但假如，我们以分布式系统容错的角度看待整个体系，会发现，虽然个体错误发生的概率提高了\*\*，但是假如我们可以允许这些单发错误，整个系统的容错率随之上升。\*\* ​

  

所以，我的问题是

  

有没有这种可能\*\*，要是原来单体系统的奔溃是灾难性的，也就是所谓的经济危机。\*\* 那么当我们把**经济单元缩小**后，虽然多元化后**个体危机会呈现上升趋势**，但是对于**群体性集体不可用的概率反而降低**了呢？ 

  

这个答案，应该留给经济学家讨论了。

  

我坚信，未来各个学科互相学习，互相融合是发展的趋势。 我曾经和一个做游戏的朋友打趣到，你以后需要的不再是产品，开发，运营，美术了，你还需要经济学家和社会学家共同参与了。 

  

**【6】脑洞** 

  

我个人很喜欢各学科融合，我也喜欢物理学。 

  

爱因斯坦的广义相对论的最大发现是时间不是公共的。 每一个人都可以有自己的时间，只是因为我们的运动速度太低且基本相同（和光速对比），感觉大家时间相同罢了。这里虽然没有共识，但是却透着分布式时钟的概念。

  

量子力学发现量子处于空间中的位置完全是概率决定，只是大部分时间，它看起来像在某个位置。 虽然个体量子的确处于概率状态，但是从整体来看，它的绝大部分会形成确定的历史，也就是我们现在看到的现实。

  

**区块链带来了一种可能性，使用去中心化的方式，和最终一致性来选择历史树，是否也是这两者的结合呢？**

  

最后，以很佛系的一句话来结束我在币户的第一篇系列文章

  

**一花一世界，一叶一菩提**

![](https://storage.googleapis.com/papyrus_images/60b6c432fa44ca66eb76f23c8be87fc5d8b4c135e83116d46641ea05ee429c89.png)

---

*Originally published on [x1a](https://paragraph.com/@x1a/lkEYCEsJt1tijoqNSo46)*
