学习知识的流程是把书读薄,然后再学以置用,把书补充得厚些,最终分享给其它朋友:能够传播知识,才算真正掌握了知识。
一本书,最难懂的部分是绪论、序言、概述、总结等章节,以及一些看似和当前知识无关的内容。只有读懂了这些,才算理解了作者的思想。
先回顾下学习历程,依稀记得是这样:我看了很多有关比特币原理的文章,然后静下心来,看了几天比特币源代码之后,就一头扎到以太坊的学习上来了。虽然没有掌握比特币的代码,但是,有比特币的基础知识和意识后,学习以太坊的知识就比较轻松了。但拜占庭问题总是个痛点----似懂非懂,而且有很多的疑问。
在Centos 7下,跨过了无数的坑,终于熟悉了Ethereum的生态圈:Solidity,Ganach(TestRPC),Truffle,Remix,EthereumScan,MetaMask,mist,ERC 20,ERCXXX,......另外,还时不时看下Geth源代码,终于又精进了不少。
有了这些实践经验,这才敢回过头来,重新学习拜占庭将军问题----我总认为自己对这个问题不够了解,依然疑点重重。
区块链是去中心化的管理系统,而且,彻底去中心到对等式管理系统。
对等式系统的设计有多难呢?人与人的交流,一个人和整个人类社会的关系,都可以抽象为一个对等式系统。这就是它的设计难度。
对等式系统有什么优点呢?人类社会从动物社会进化到现代社会,就是 对等式系统成功案例。符合AI化趋势和必然成功就是它的优点。
如果对等式系统依靠计算机系统实现,那就绕不开分布式计算机系统。
在研究分布式计算机系统的科学家中,有一位叫Leslie B. Lamport的计算机科学家,被誉为分布式计算的开创者,他有5篇很有影响力的论文:
《事件的时间、时钟和时序》
《多处理器系统如何正确地执行多进程》
《拜占庭将军问题》
《快照----确定分布式系统的状态 》
《临时议会问题》
由此可知,拜占庭将军问题只是其中的一个。也就是说,为了让区块链系统能够稳定地工作,上面的问题都必须得道解决。
那么,为什么只有拜占庭将军问题被提出来呢?以至于有这么一种风气:“为人不识拜占庭,就称专家也枉然”。为什么不了解拜占庭问题,就不算懂区块链技术了呢?我想,原因有三:
1.它比其它的问题更加贴近业务,比底层的技术更加抽象;
2.有解决方案,但是,很多专家都不满意,都想改进它;
3.影响系统生态建设、运营成本和生存能力;
独立思考,是每个人应该具备的基本素质,在学习拜占庭问题及其解决方案前,我们应该对整个区块链系统面临的问题有个整体的预判。
Lamport的头衔--分布式系统创始人,一下把我思考问题的方法,带到分布式系统中了,我必须跳出来:很多问题,并不是分布式系统固有的。
提到区块链,词汇“去中心化”是绕不开的。说到去中心化,打开了维基百科的文章,又是一头雾水:下面这张图明明是真理,但是,总觉得有些地方不对头。
我整理了一下思路,认为如下表理解比较好,既照顾了底层硬件,又照顾了顶层应用,还把面向对象的部分思想结合进来了,最重要的是,概念术语分清后,区块链的技术路线和学习路径也很清晰了。比如:去中心是一种管理思想,曾经弥漫在下表的很多层级中。既然这样,就不如给每个语境一个专有名词。例如,区块链常说的去中心化,可以在网络层和业务逻辑层分别找到术语。
还有一个重要的问题:业务层的分布式管理的思想,一定要分布式系统才能实现么?答案显然是否定的。区块链“分布”了半天,不还是要把分布式的区块数据统一到一个被所有人共识的版本上,这明明是虚拟的中心化么!!!
序号 |
层面 |
分类 |
区块链技术路线 |
7 |
业务表现层 |
各种人机接口、合约、UI |
钱包 命令行 网站 |
6 |
业务逻辑层 |
集中管理,分级管理,对等管理,蜂群管理 |
对等管理 |
5 |
操作方法层 |
读写分离 读写合一 |
读写合一 |
4 |
状态记录层 |
分布式数据库 中心式数据库 |
分布式数据库 |
3 |
虚拟设施层 |
云设施 容器设施 混合设施 |
随意,可以没有此层 |
2 |
物理设备层 |
巨石单机 集群式架构 分布式架构 混合架构 |
分布式架构 |
1 |
网络层 |
星形结构 树形结构 网状结构 |
网状结构 |
上面那张图,放在网络层,可以,但是,名词要改成网络拓扑结构术语。可以放在业务逻辑层,但是,少了一类,术语也应该调整。
(记得在维基百科闲逛时,发现了一张彩图,这应该原创作者,好像是Lamport那伙人。但后来怎么也找不到了。希望看到的朋友,把这个链接发给我。)
我们所作的一切,就是改变物质的状态,程序也不例外。对所有程序而言,程序改变的是状态机的状态----改变寄存器,改变内存,改变磁盘等等。其过程就是写-读-写-读……,如此往复。这个改变,会影响外界,可以改变外界的物理世界,如一个控制战机的飞行控制系统,他的输出改变了战机飞行的路径,控制导弹摧毁目标。所谓智能,就是改变状态的方法。这种方法本身也在被不停地改变,所以才有了程序员这个职业。
同时写,就可能会造成冲突,造成系统状态和预想的不一样,和现实世界的状态不一样,这就是并发控制需要解决的问题。
并发控制本来就很复杂了,偏偏还要加上一个网状结构的网络层,分布式的物理设施,分布式的数据库,去中心化的对等业务,还要面对黑客,利欲熏心的客户端,糊里糊涂的消费者,正可谓是雪上加霜。
我想,首先应该把问题归类:
序号 |
层面 |
区块链技术路线 |
问题 |
区块链特有 |
7 |
业务表现层 |
钱包 命令行 网站 |
便捷性和安全性 |
否 |
6 |
业务逻辑层 |
对等管理 |
共识算法 |
是 |
5 |
操作方法层 |
读写合一 |
无 |
------ |
4 |
状态记录层 |
分布式数据库 |
区块式数据结构 |
是 |
3 |
虚拟设施层 |
随意,可以没有此层 |
如何与微服务结合 |
否 |
2 |
物理设备层 |
分布式架构 |
不挖矿,就没有问题 |
否 |
1 |
网络层 |
网状结构 |
可靠性、延迟 |
否 P2P 共性 |
我觉得,区块链的技术本质是,牺牲效率,牺牲成本,追求数据公开透明,防止篡改,可追溯,网络安全;业务本质是资产数字化(代币),流程自动化(智能合约);商业价值是代币(通证、通卡)转为法币或实物,降低转换成本。
序号 |
层面 |
区块链技术路线 |
问题 |
区块链特有 |
6 |
业务逻辑层 |
对等管理 |
共识算法 |
是 |