比特币的区块链机制其实是一种分布式的事件流日志,这个事件流记录着所有的比特币交易事件。比特币是一种虚拟货币,我们知道我们可以通过自己设立一个机器来专门挖矿,也就是“无偿”获得比特币,但是这个“无偿”并不是真正无偿,你的电脑将以算力和工作量的付出为代价,其实你的电脑就是参与一个全球的 分布式 系统。
虽然电脑系统是 分布式 的,但是比特币的所有交易需要记录在一起,解决这个记录问题有两种方式:
第一种是最简单的方式,设立一个中心存储库,所有的交易进出数据都发送到这个中心存储库,这是以数据库为中心的软件系统的普遍特征,这种模式问题是存在一个中心数据库,而比特币系统本身是 分布式 的,没有任何中心,因此这种中心数据库方式显然不适合比特币的记账管理方式;
第二种是用 分布式 方式完成业务上需要集中记账管理的模式,也就是说,全世界各地服务器的比特币交易肯定是必须记账到一个统一的流水账本上,只是这个统一流水账本不是对应一个中心存储库来保存它,而是每台机器上都保留一份统一流水账的拷贝。这个就非常类似 分布式 系统中读写操作了,每台机器可以自由地读取这一份统一的流水账本数据,但是如果需要将自己机器中发生的比特币交易数据写入这个流水账中,那么就需要拥有写的权限,实际是类似日志追加的权力,我们知道普通日志追加append就是打开日志文件,在文件最后一行追加新的一行即可,统一的流水账类似这个文件,首先,你需要找到流水账的最后一行,如同你排队,你需要排到队伍最后一个,但是你不需要了解整个队伍,你只要认准你需要跟在哪个屁股后面就可以,也就是你排在哪个人后面就可以。
一个区块是一个有唯一标识的数据块,唯一标识也就是主键是一个256位的哈希数字,使用网络一致统一的算法生成的,每个区块包含一个头部,指向上一个区块的主键哈希数字,如同数据表的外键指向另一个表的主键一样,每个区块除了头部,还有交易内容,也就是发生的比特币交易数据。多个区块就像这样靠着头部信息指向另外一个区块串联在一起,像个链条一样,称为区块链。
很显然,这种区块链如同Stream,是一种交易的事件流,如同事件日志保存的是交易事件流一样。
区块链是一系列交易事件组成的“流水账”,它是 分布式 的,可以在不同服务器中共享,能够基于大多数参与者的共识进行修改(如同 分布式 的Paxos Raft算法一样),一旦交易事件数据加入就永远不会被删除(日志只能永远被append添加),比特币的区块链包含了每个比特币过去发生的每次交易记录。
因此,如果你有Event Sourcing和 分布式 知识背景,对于数据一致性有过一定了解,那么了解比特币的区块链就会非常容易。
区块链最重要的核心是如何解决竞争性追加数据的情况,也就是说:同时有多个机器需要写入交易事件,这时必须进行排队,技术架构上我们使用一个中心化的消息系统对写入事件进行排队,但是在一个完全 分布式 的系统中,不可能设立中心化的消息系统,因此,并发的多个机器需要进行竞选。
比特币的区块链设计了竞争记账和激励机制,每个计算机以自己的计算能力也就是算力来竞争写入记账权力,算力高的赢得记账的概率大,一旦获得记账权力,还能够得到一定数量的比特币奖励。算力高是通过工作量等公开量化指标来衡量比较的。
比特币的区块链机制是基于自由的自然法则,每台服务器如同每个生物自由追求自己利益最大化,最终看不见的手形成一种正反馈的自然进化生态系统。
比特币区块链机制的核心思想是 分布式 +事件流日志,这种核心思想可在业务领域更广泛的应用。如数字出版、音乐发行等很多网络应用领域。区块链技术实际上宣判了传统数据库技术的死亡,连金融这样的行业都可以不必使用传统的中心数据库,那么其他行业可想而知。
A blockchain is a distributed, concurrency safe, eventually consistent stream of transactions (ownership changed events) #EventSourcing –Danny Zamorano
作者:板桥里人