30. 多节点和区块的链:让存证系统永远在线

这一章,我们尝试解决这样的问题:万一我们的数字档案馆断网了,倒闭了,被灾难摧毁了,怎么办?

玩过游戏的都知道,防止老家被一波摧毁的策略就是开分基地。

在这里,我们拿加盟连锁店来类比。我们的数字档案馆必须有很多个“连锁店”。它们都有独立经营的能力,当其中一部分连锁店关闭时,剩下的连锁店可以正常工作,随后新的连锁店又可以随时加盟。只要不是同时瘫痪,我们的存证服务就可以一直运行。为了让全球各地都能享受到高效服务,最好各地都有连锁店。

需要注意的是,我们不能有“总部”,有总部就会有弱点!

用户在使用的时候,需要向多个节点都发送数据。这时,我们会发现一个新的问题,多个连锁店的数据不一致怎么办?

举个例子。如下面这幅地图所示,巴黎、迪拜、北京各有一家连锁店。在某一时刻,伦敦、伊斯坦布尔、上海同时有人发出数据请求存证,数据分别是A、B、C。

假设,数据传输的时间和城市之前的距离成正比,那么图中 3 个连锁店接收到的 3 条数据的顺序就会不一致:

  • 巴黎:A - B - C

  • 迪拜:B - A - C

  • 北京:C - B - A

所以,它们制造的哈希链条也会不一样。

哈希链条不一样会有什么后果呢?后果就是历史没有统一的标准,遇到有冲突的数据,无法判断哪一个是真实的历史数据。新加盟的连锁店,可以自己制造一个哈希链条,调换里面数据的顺序,或者直接修改数据,谁也不能说它是错的。所以,这些连锁店的历史数据是一定要保持一致的。

怎么让哈希链条一致呢?我们想一个开创性的办法,把哈希链条分割成很多段,每一段以其中某一个连锁店为准。

那怎么划分“段”?按时间划分还是按长度划分?

由于要做到“每一段以其中某一个连锁店为准”,意味着这些连锁店之间要通信,拿到某“段”话语权的连锁店,需要将它的这一段哈希链条的排列顺序告知其他连锁店。

如果按长度划分段,那么随着社会发展,数据量越来越大,每一个段对应的时间就会越来越短,最终短到几毫秒,几微秒,远低于信息在地球上传播所需的时间,这样的系统很难设计。

所以,我们考虑按时间划分段。具体多长时间,我们以后再定。假设是 10 分钟,哈希链条就被划分成 10 分钟一段的链条,如下图所示。

我们换一种方式画图,注意,仅仅是换了图示,并没有改变数据结构:

可以发现,哈希链条可以被看做“段的链条”,我们给“段”换个名字,叫“区块(block)”,那么哈希链条就变成了“区块的链(chain of blocks)”。这就是区块链的雏形了。

那么,目前我们的结论是:每一个区块服从某一个连锁店,如下图。

到这里,我们应该给“连锁店”再换一个概念。和生活中的连锁店不同的是,我们不能给前来加盟的商家设置任何门槛,它们不需要得到我们的许可就可以加盟。只有这样,这个系统才能脱离我们,永远运行下去。这些连锁店应该被称作我们的全球统一存证系统的节点。

所以,这篇文章的结论是:

为了存证系统永远在线,我们需要多个节点。

每个区块服从一个节点,保持历史区块链条一致。

这时,又引出多个新问题:

  • 什么原因能驱使节点提供存证服务?

  • 如何决定每个区块听谁的?

  • 何时以及如何在节点之间同步区块?

不用担心,我们都能解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值