比特币区块链是一种分布式的事件流日志

比特币的区块链机制其实是一种分布式的事件流日志,这个事件流记录着所有的比特币交易事件。

比特币是一种虚拟货币,我们知道我们可以通过自己设立一个机器来专门挖矿,也就是“无偿”获得比特币,但是这个“无偿”并不是真正无偿,你的电脑将以算力和工作量的付出为代价,其实你的电脑就是参与一个全球的分布式系统。

虽然电脑系统是分布式的,但是比特币的所有交易需要记录在一起,解决这个记录问题有两种方式:
第一种是最简单的方式,设立一个中心存储库,所有的交易进出数据都发送到这个中心存储库,这是以数据库为中心的软件系统的普遍特征,这种模式问题是存在一个中心数据库,而比特币系统本身是分布式的,没有任何中心,因此这种中心数据库方式显然不适合比特币的记账管理方式;

第二种是用分布式方式完成业务上需要集中记账管理的模式,也就是说,全世界各地服务器的比特币交易肯定是必须记账到一个统一的流水账本上,只是这个统一流水账本不是对应一个中心存储库来保存它,而是每台机器上都保留一份统一流水账的拷贝。这个就非常类似分布式系统中读写操作了,每台机器可以自由地读取这一份统一的流水账本数据,但是如果需要将自己机器中发生的比特币交易数据写入这个流水账中,那么就需要拥有写的权限,实际是类似日志追加的权力,我们知道普通日志追加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

区块链或者Eventsourcing实际上宣判了传统数据库技术的死亡,连金融这样的行业都可以不必使用传统的中心数据库,那么其他行业可想而知。

在业务层使用ES:最终一致性;
使用关系数据库:强一致性。

区块链或ES本身天然实现事务性,不必另外多余事务机制来保证。

据说目前区块链技术性能还太差,想在银行普及还不行呢。。。

外行问题:完全分布式环境怎么实现event sourcing 达到最终一致

2016-03-30 09:38 "@tecentID52F6F"的内容
完全分布式环境怎么实现event sourcing 达到最终一致 ...

在主从架构下,也就是有一个主master服务器,其他是slave从服务器,将主服务器上发生的领域事件(写操作事件)复制到从服务器上即可,复制策略参考Paxos或Raft。比较简单。

在完成分布式架构下,没有主从,类似P2P,都是主服务器,master-to-master,可采取区块链技术,通过在多个主服务器中竞选出一个服务器作为领域事件的“主写服务器”,也就是将领域事件(交易事件)写入事件流日志中(交易流水账),其他竞选失败的就作为“从服务器”接受“主写服务器”的领域事件的复制拷贝,这个过程也可以参考Paxos或Raft。

也就是说:完全分布式架构比主从架构多一个选举过程,选举策略可参考服务器的算力和工作量等。

分布式情况,节点连接都不充分,形成孤岛,甚至不知道有哪些节点存在,如何有效开启选举过程?

2016-03-30 10:59 "@banq"的内容
完全分布式架构比主从架构多一个选举过程,选举策略可参考服务器的算力和工作量等 ...

2016-04-01 10:05 "@tecentID52F6F"的内容
分布式情况,节点连接都不充分,形成孤岛,甚至不知道有哪些节点存在 ...

这个情况属于CAP中P(分区容错性),也就是说分布式网络默认是不可靠的,如何在这些不可靠的网络主机之间达成最后状态的共识,这涉及到Paxos等共识算法,见:
http://www.jdon.com/47927

在blockchain中,提交交易事务的机器是挖矿机miner,如果一台机器一直是孤岛,它就不可能有挖矿得分,而且挖矿得分比其他网络连接质量好主机性能高的得分要低,就很难取得选举权,更难获得交易事务日志的写入权力。

在blockchain数据库这个wiki中总结其优点,第一条就是:
The ability for independent nodes to converge on a consensus of the latest version of a large data set such as a ledger, even when the nodes are run anonymously, have poor interconnectivity and have operators who are dishonest or malicious (see Sybil attack).
有能力汇聚大量数据的最后版本状态,即使节点匿名 有很差的连接性,甚至有不诚实和恶意主机节点参与.
详细见:https://en.wikipedia.org/wiki/Block_chain_(database)