群内分享
1.平行区块链-EOS起源
4.HiBlock社区-杨镇干货|以太坊全景介绍及入门学习路径(分享实录)
群内讨论
来自彗星播报:
近期,随着区块链技术在社区中的声音越来越大,业界已经开始从技术角度对区块链进行全方位的解读。作为第一批区块链技术的实现,传统比特币与以太坊在共识机制、存储机制、智能合约机制、跨链通讯机制等领域并没有非常严密的设计,从而引发了一些在数据库与存储领域比较常见的问题,导致其数据规模无法无限增加(当前仅几百GB就产生了严重的性能瓶颈,几乎不可能到达上百TB规模),吞吐量极为有限,使其不可能适应通用分布式数据存储或通用结算体系的要求。
今天我从共识、存储、智能合约、多链、快速检索、以及通用接口等几个维度对区块链技术进行阐述,并会与数据库及大数据分布式计算技术进行横向对比。
区块链的本质即分布式多活数据库。
从产品功能的角度看,当前的区块链产品与数据库相比存在极大的差距。尤其是对于在业界存在了几十年的关系型数据库,其主要核心功能包括增删改查,而主要结构则包括SQL解析、日志、数据管理、以及索引管理几大模块。而大数据技术兴起后,业界开始使用PC服务器替代传统小型机,为了避免服务器掉电导致的数据页损坏,分布式数据库或存储普遍使用三副本对数据进行冗余保存。
尽管从功能上看,当前区块链技术仅仅是数据库的一个微小子集,但是其一系列设计机制,与传统数据库的内核理念极为相似。譬如,从其传输和存储的数据结构上来看,区块链的链式结构来源于传统数据库的事务日志。任何数据库的DBA都知道,数据库的事务日志本质上就是不可更改的链式结构,事务中的每一条操作记录都会有一个反向指针指向该事务中的上一条记录。因此,区块链的链式结构本质上脱胎于数据库事务日志,同时增加了区块之间的反向哈希值作为指针,且引入了默克尔树结构进行快速数据校验。因而,我们可以安全地进行认为:区块链的链式结构在存储体系中等价于数据库的事务日志。本质上数据库的任何操作同样是不可篡改的,只不过当前大部分数据库不会对外暴露事务日志的解析工具,仅保存每一条记录的最终状态而已。
1.1 一致性原理对比
在分布式数据库中,当前普遍采用PAXOS或RAFT算法进行数据多份冗余的一致性协商。一般来说,在分布式数据库体系中,每个数据分片由至少3个互相冗余备份的节点构成,而在正常运行时的数据库每个分片都会存在一个主节点与两个从节点。其中主节点负责数据的读写操作,从节点进行只读操作。当主节点写入数据时,其事务日志会被实时同步给其他从节点进行回放,以达到主从节点之间数据一致性的目标。
那么对比区块链的体系,可以认为数据库领域的主节点即日志生成节点,其每次生成事务日志的功能,与区块链中每次出块时矿工的功能完全等价。唯一不同的是,数据库在每次操作时对日志实时广播到从节点中,并且在事务提交时进行一致性判断。而区块链则采用检查点方式,每个节点接收自己的交易请求,并将请求广播到其他节点中,而每一次出块操作即产生一个检查点,该检查点包含的信息即出块节点向区块中写入的所有记录。这些记录被发送到其他节点后,每个节点对数据块中的记录进行验证并永久写入自身的交易日志(即区块文件)。
但是,区块链和数据库在一致性选择上最大的不同在于哪个节点成为检查点发起的节点。数据库由于采用了主从机制,主节点永远是日志的发起节点,而从节点永远是日志回放与验证节点。但是区块链则不同,其采用某些算法(例如PoW、PoS、DPoS等)在多个参与节点之间定期选取一个节点进行检查点确认,这也是区块链号称自身安全的一个理由所在:在全网大量的节点中攻击者无法确定下一个检查点确认的节点是谁(当然,就算攻击者确定了下一个出块节点,还有一系列的数字签名机制保障事务不被伪造和篡改)。
因此我们可以安全地认为,从检查点节点选择的领域来看,传统分布式数据库确定主节点生成事务日志的机制,是区块链共识机制的一种简单实现。也就是说,如果区块链共识机制每次都选取同一个节点作为出块节点,其机制基本等价于分布式数据库的主从复制原理(数据库按照事务提交进行一致性验证,区块链不存在事务的概念,因此按照数据块进行一致性验证)。
1.2 共识算法
由于区块链体系中并不存在某个节点永久作为检查点确认的节点,而是每个参与节点都有机会被选举成为该角色,因此在每个节点都能够进行读写操作时,整个区块链体系从功能上等价于一个不支持事务机制的多活数据库。而具体使用哪种算法选择出块节点(PoW与PoS之争)、哪些节点在接收到数据块时该如何验证(PoS与DPoS之争)、节点之间的数据以什么方式进行传播(DAG与链式结构之争)、以及如何确保一条交易被大多数参与节点所接受(PBFT、Paxos、RAFT、以及各种分叉解决方案等算法之争,Hyperledger 1.0甚至直接使用中央Kafka做排序也是醉了),则是区块链共识算法需要回答的问题。不同的解决方式制约着区块链的一致性、性能、吞吐量、以及可靠性。
1.2.1 挖矿
挖矿是来自于比特币的一种说法,其本质在于多个节点通过PoW算法选举出一致性检查节点。关于PoW的说明业界已有无数文章分析,这里笔者不再赘述细节。实际上,从数据管理的角度来看,PoW是一种效率极为低下的暴力机制,通过不停地循环生成随机数并进行散列,通过网络预先广播的规则(复杂度),让每个参与的节点自证明其是否符合成为检查点的资格。
对比分布式数据库的Paxos或RAFT算法,每个参与节点默认自身有资格成为主节点,在原本的主节点无法连通的情况下通过最新事务号或其他原则相互投票,从而选举出新的主节点。而由于竞争节点过多,区块链作为一个拥有几万甚至几十万复制节点的多活数据库,继续采用Raft或Paxos算法一方面复杂度太高,另一方面无法解决拜占庭问题,因此比特币采用PoW机制,通过大家公认的某种机制,让每个参与节点首先自己判断是否符合要求(即生成了随机数后自己进行散列并验证)。当节点自身认为符合条件后,将之前生成的随机数以及打包好的日志(数据块)广播给集群中其他节点,从而大幅度减少了节点间相互投票所需的复杂度。
节点通过循环生成随机数并自我验证的过程,即PoW中所谓的“挖矿”阶段。
因此,如果把挖矿的概念扩展,不论是PoS、PoW或DPoS算法中,节点间竞争成为检查点的过程即挖矿过程。
1.2.2 PoW与PoS的选择
PoW是一种极为粗暴原始,但却又及其有效防止恶意攻击的选举算法。该算法与计算机内核中多线程协作的自旋锁有异曲同工之处,自旋锁的原理在于通过线程自身不停循环判断一个内存地址状态,直到该状态设置为空闲后,通过CPU原子操作将其置为锁定状态,以此和其他线程进行互斥的机制。这种机制和PoW极为相似。
而PoS更倾向于类似Raft投票机制,通过固定时间协调所有节点参与投票,根据某种规则(例如持有代币数量、或提供存储空间大小等)判断每个节点的权重,最后选取权重最高的节点作为检查点节点。而在数据库一致性选择的Raft算法中,普遍会根据最新事务号作为权重,多个节点之间优先选择包含最新事务记录的节点作为主节点。
因此,可以看到PoW与PoS最大的区别在于,PoW在算法复杂度足够高的前提下,基本不需要太多的节点间互相通讯和确认,对代码的实现要求极低。而PoS对于多节点间一致性验证、防伪等要求较高,但是很大程度上可以沿用传统一致性选举的思路进行一定程度的优化即可。
但是PoW的缺点与自旋锁一样,对于计算资源的要求极高。一个被错误应用的自旋锁可以轻易消耗掉计算机中所有的CPU资源,同样PoW当前被人们诟病的最大问题也在于资源消耗。PoS在这方面则没有任何问题。
1.2.3 PoS与DPoS的选择
类似Paxos与Raft,集群内参与的节点越多则效率越慢。一个典型的分布式数据库,使用单副本的效率可能会是三副本的两倍,而三副本的效率则又是七副本的两至三倍。因此,为了满足足够的吞吐量,使用PoS在进行选举时务必不能在成千上万个节点之间进行投票选举,而是应当在有限的集合范围内进行投票验证。这就是DPoS的核心原理。
DPoS给出一种思路,将成千上万个PoS节点,通过某种机制(例如持有代币的数量)选举出若干(奇数个)节点,在这几个节点之间进行投票选举(在一些实现中甚至会在这些节点间以令牌环的方式进行轮询,进一步减少投票开销)出每次的检查点(出块)节点,而不用在网络中全部节点之间进行选择。
这种机制能够大幅度提升选举效率。在几十个最多上百节点之间进行一致性投票一般来说可以在秒级完成并达到共识,因此DPoS机制可以将检查点(事务确认时间)提升到秒级,通过减少投票节点的数量或采用令牌环机制甚至可以降低到毫秒级。
但是,DPoS的性能无法无限提升。在一个完美的软件实现中,其性能与吞吐量则物理制约于节点间通讯的网络带宽。一般来说,对于公网环境中两个节点之间的带宽能够维持在上下行均5MB/s(50兆带宽)则相当优秀了,大部分情况下远远无法达到该数值。而如果每条交易日志需要100字节,由于网络即需要广播交易也需要广播日志,则网络带宽消耗加倍,因此在两个节点的单链中最大吞吐量不超过2.5万每秒(5MB/100字节/2=25000),假设集群中包含更多节点,则最大吞吐量需要根据其使用的P2P同步机制成比例缩减。如果需要进一步提升则需要进行分链(类似于数据库分片的概念),该主题将会在下面的章节详细讨论。
1.2.4 DAG与链式结构的选择
DAG与链式结构的本质区别在于异步与同步通讯。在前文中已经讨论过链式结构的本质等同于数据库事务日志,而出块操作则为检查点操作,那么链式结构体系可以看做是定期同步检查点的数据库事务同步机制。
而DAG则通过将事务操作进行异步处理来增加网络吞吐量,采用谣言传播算法在节点间发送操作日志,并通过某种机制(IOTA每次验证前两条交易,并计算一个PoW代表权重)将一个权重赋给该操作。
相比起同步操作的链式结构,DAG结构与任何异步机制一样,能够带来的提升在于吞吐量(真的么?后文会有描述),但是产生的问题则在于无法有效预测交易被确认的时间与周期。
而IOTA架构对于DAG的实现机制更会导致几个额外问题:
在对历史交易验证时采用随机方式,而没有任何先后规则,那么有可能产生某些交易在极端情况下没有任何其他节点对其验证,从而永远不会被确认;
为了追踪每一笔交易与之前交易的关系,整个DAG图谱需要被随时检索和访问。在一个较大规模的系统中其交易图谱溯源会非常复杂,同时几乎不可能被全部保存在内存中以进行实时更新。而如果将这些数据保存在磁盘上,那么实时刷新每个Tangle的权重会造成大量随机I/O(也许可以通过大量部署SSD解决),导致极大的性能问题;
由于采用谣言传播的方式将每一笔交易广播到网络中的其他节点,随着网络中节点数的增加(IOTA结构中可能会有百亿级别的设备节点,而非链式结构中几万个全账本节点),整个网络中的通讯量会程指数级上升。因此,IOTA宣称其异步机制能够大幅度提升网络流量,但是忽略了该体系需要在网络中传播的数据量远超链式结构,因此在一个具有大量节点的网络中是否还能够达到优秀的传输速度需要仔细评估;
IOTA宣称每个设备节点即作为验证节点又作为交易的发起节点,会对接入IOTA的设备硬件处理能力要求较高。一般来说,类似智能电表、高速公路线圈等设备使用LoRa等LPWAN协议进行通讯,设备本身基本不具备任何计算能力。因此,IOTA才尝试通过软硬件一体化的方式(号称3进制的设备)将这些复杂逻辑写入芯片,并与其它设备进行集成。
如今从DAG衍生出一些其他数据结构(例如哈希树等),基本上只是从存储方式上有一些特定的优化,但是整体上与DAG所带来的问题保持一致。
笔者认为,DAG的异步数据分发思路完全可以与链式结构相辅相成。在一些完全可以接受部分数据丢失或最终一致性的非支付类业务中,采用受限(避免出现网络风暴)的谣言传播算法能够有效提升吞吐量,但是其无法满足类似支付结算等需要实时性与一致性较高的业务场景。
1.3 结论
在区块链的共识机制中,其本质与分布式数据库的一致性算法存在极多的相似之处。拜占庭问题的引入仅仅从算法和选举节点数量上对网络结构做出一些调整,但是并不从本质上改变分布式系统一致性选举的机制。
PoW采用简单粗暴但极为有效的方式,通过节点首先自证其资质后才进行广播的方式,大幅度减少了网络间的通讯压力,但与之带来的问题则在于自证资质的计算资源消耗极大。
PoS采用与传统分布式一致性验证类似的机制,通过代币数量(或存储容量等指标)作为权重依据,使用某种分布式算法选举出每次的检查点节点。这种机制的好处在于没有消耗计算资源的自证资质过程,但是带来的问题在于每次选举时在大量节点的网络中对网络压力极大。
DPoS作为PoS的变形,通过缩小选举节点的数量以减少网络压力,是一种典型的分治策略:将所有节点分为领导者与跟随者,只有领导者之间达成共识后才会通知跟随者。该机制能够在不增加计算资源的前提下有效减少网络压力,在优秀的软件实现中将会具有较强的应用价值。
DAG则采用异步机制替代链式检查点的同步策略,在优秀的软件实现中如果能够有效控制网络风暴带来的带宽需求指数增加,其不失为一种对最终一致性场景有较好应用前景的算法。但是DAG的局限性也极为明显,其体系无法被利用在需要进行同步操作或一致性要求较高的操作中(例如支付结算等)。
磨链输出计划
区块基础-区块链简介
区块链作为目前最为火热的计算机相关技术之一,收到越来越多人的关注,互联网巨头们纷纷入场,区块链创业公司也不停涌现,这里对区块链相关基础知识做一个系统介绍,旨在普及区块链基础知识点。不涉及项目推广投资,单纯的对区块链相关基础知识概念作一个说明讲解。涉及相关内容如理解有误,也请及时指正。
这里先简单对区块链及相关术语做一个整理。包括区块链的概念和在查阅资料时候会常见到的一些词汇。
首先是区块链,提到区块链,肯定会听到两个比较最为普遍的词汇,一个是中本聪,一个是比特币。
中本聪,《比特币-一种点对点的电子现金系统》 论文作者,同时也是比特币的创造者,2008年创世论文诞生,2009年一月三号,比特币系统运行,也是中本聪奇迹的开始。中本聪一个神秘的人物,有人认为是一个人,也有人认为中本聪是一个组织。
比特币,时下最为火爆的加密数字货币,2017年比特币价格一路疯涨,今天一个比特币的收盘价应该5万人民币左右。比特币在论文中,描述为一种电子货币及相关算法。之后比特币的底层技术,被人们逐渐认识重视,然后抽象出来,这就是现在所说的区块链技术,所以从认知普及来说,可以理解为,先有比特币,再有区块链。比特币实现了一种,不需要通过任何中介机构,即可实现比特币网络中各个节点之间的支付交易,保持使用者匿名,当然匿名这个概念之后有机会可以扩展理解下。同时比特币中交易无法撤销,所有记录不可修改,保证所有交易记录可被追溯。
说了中本聪和比特币后,进入正题,什么是区块链:
现在在网络上搜索区块链,大致是这样的解释:区块链是分布式数据存储、点对点存储、共识机制、加密算法等计算机技术的新型应用模式。本质上区块链是一个去中心化数据库,也常说是分布式统一账本,区块之间通过一串使用密码学相关的字符串相关联。一个个区块串联成为区块链,每一个区块中包含了网络中的交易数据及相关信息。
区块链实现的不简单是一种去中心化数据库或者分布式统一账本,通过时间顺序将区块顺序相连后,基于数学密码学,共识机制、保证了数据的不可篡改和不可伪造。
上面提到了一些相关技术,有计算机网络基础的人会发现,这些技术单独拆开来看,都不是一个新的技术,并且这些相关技术,之前都有成功的应用。所以我们常说,区块链是把之前相关成熟技术良好的结合在一块,创造的一种新的技术架构,这种新的架构,利用链式数据结构验证和存储数据,使用分布式共识算法来生成写入数据,通过密码学的方式来保证数据传输和访问的安全,同时利用智能合约编程和操作数据来建立一个全新的分布式基础架构。这种新的模式,实现了去中心化,信息匿名、数据不可修改可追溯,最为关键是创立了一种新的信任的模式。更多人理解,区块链是下一代价值互联网的基础。
对几个区块链相关概念做下简单说明:
去中心化,其实中本聪的论文中并没有明确说明去中心化这个概念,去中心这个概念也是国内翻译过来理解,随着现在区块链技术1.0、2.0、甚至3.0的发展,去中心化的概念在结合实际应用落地,现在更多提及为一种多中心化,弱中心的理解,当然可能在听到一些演讲的时候,针对区块链中这些中心化的概念都会有一定的争议,这个看个人的理解,但是不可否认,区块链的经典应用,比特币中去中心化被设计的很聪明且很成功。大多数人理解去中心化,就是不需要中介权威机构介入,各个节点直接达成协议即可把相关信息生成。网络中去中心化,那么权力就属于参与其中的大多数节点,而不是几个特权节点。这个之前传统的中心化认证有很大区别。
共识机制:在区块链系统中实现不同节点之间建立信任,获取权益的数学算法。先说明下所有的共识机制都不是完美的,或多或少都会发现共识机制在特定条件下都会出现一些不可避免的缺陷,所以根据各个共识机制的优缺点选择不停的应用场景。共识机制是解决各个独立节点之间互相信任的问题,在众多节点中达到一种较为平衡的一致性状态就是所谓的共识机制,共识机制是保障区块链一直稳定运行的关键,在《精通比特币》一书中,说到共识机制和挖矿的时候,提及过这样一个理解,区块链中的共识是一种保证区块链安全的手段,在比特币中使用的是POW的共识机制,这种方式最早出现在电子邮件系统中过滤垃圾邮件。这种共识就是向全网证明自己做了足够的工作才获得了记账权。
加密算法: 算法是学习区块链中最为头疼的一块,也是最为让人信服的一块,这里只说下非对称加密,简单理解为,加密和解密的过程中分别使用两套密码,加密时候的密码是公钥,公钥对外公开,每个人都可以用公开的公钥来加密一段字符,但在解密时需要个人自己保存的另一套密码,也就是私钥,个人用私钥来解密解读用公钥加密的字符。目前区块链中用到算法有hash算法、merkle tree哈希树算法、椭圆曲线算法、SHA-256哈希算法、Base58编码等。数学算法保证信任问题。
数字货币:货币的概念这里不做深入说明,我们先说下电子货币,电子货币是通过电子化方式支付的货币,一般理解为,使用一定量的现金或者存款,通过银行或者第三方快捷支付服务,将余额进行交易转移。虚拟货币,这个不是指真实的法币,不做太深刻的分析,就理解为qq中的q币或者一些网络游戏中的游戏币,用来购买交易游戏或虚拟环境中的的货物。数字货币比上述两种来的更为复杂,一般结合区块链,我们讲到的数字货币指的是加密数字货币。通过加密算法、共识机制来保证运行。以比特币为例,论文中称为点对点电子现金支付系统。
总结下:
区块链是一系列技术结合的新应用模式,它包含了密码学、算法、分布式架构、P2P网络等一系列的技术,2009年中本聪创造了比特币,随着比特币的火热让人们逐渐认识和重视区块链。区块链被理解为去信任化“机器”,普遍认为它能实现互联网的价值传递,是新一代价值互联网架构的基石。目前对区块链技术的应用研究也层出不穷,比特币、莱特币等一系列的数字货币,以太坊、IBM的超级账本,国内各大互联网巨头和一众区块链共识等,各家都在积极探索区块链技术。
区块链定义:网络中一种分布式架构系统,通过密码学、共识算法、P2P对等网络交互,实现网络中去信任化的方式全节点集体维护一致可靠分布式账本技术架构。换种通俗的说法,区块链就是网络中各个参与者,都有一份相同可靠的数据副本,数据的写入需要网络中节点达成一种共识,和之前传统化中心机构来记录数据不同,它不依赖中心来记录数据。从区块链定义来理解,区块链保证了网络中数据的可靠,不依赖中心认证保证了信任的传递,这是目前对区块链技术价值普遍的认为。根据这些特性设想了众多应用场景:金融支付清算、数字身份、物联网、供应链、艺术版权等。
最后说下三个误区:
区块链不是比特币,区块链是比特币底层技术架构,比特币是区块链的一个应用。两者不是同一个概念。
区块链降低成本,区块链无中心机构认证,简化交易环节,可节省第三方中介认证的成本,但这不代表区块链技术是一种廉价的技术,在区块中写入保存数据需要成本,再者区块链技术整个开发设计过程不是之前山寨币那种模式,也是需要大量的成本的投入。
区块链技术目前还在发展阶段,很多人都理解在技术发展前期,项目大多还是实验性质,不盲目因为区块链而去搭建区块链。在实验室中跑通了一段代码,不代表实际应用中可以真正应用,明知有缺陷的上线是对系统本身的不负责任。
群内工作
磨链(mochain)社区输出计划
招募条件:
1.需要一定的区块链基础。
2.对上述任何一方面有较为深入理解。
3.每周能保证一定的空余时间来折腾。
4.了解github相关
5.人员进行筛选,时间周期比较长。
有意向联系我。
磨链在线课程
对自己擅长方面有一定的沉淀,愿意开设在线课程,会考虑和一些专业培训机构合作,要求有一定的一线经验,实实在在分享课程。有兴趣的联系,有偿工作。
磨链(mochain)社区内容输出计划
磨链社区内容输出计划,社区内划分6个模块,针对各模块细化分解,社区成员领取任务进行写作内容输出。审核通过后发布,整个过程中即是自己的一个学习提高,同时也有交流分享,模块如下:
1.区块链基础(包括密码学、共识机制、分布式、P2P网络等)
2.以太坊(入门到精通,循序渐进学习以太坊)
3.比特币(入门到精通,比特币相关内容深入琢磨)
4.超级账本(架构、运行原理、共识机制、环境搭建配置开发相关)
5.EOS(概念介绍,由浅入深,持续学习)
6.DAG(DAG的概念、原理机制、项目技术解读)
PS:想加入磨链的,或者具体参与到磨链社区内容输出计划的,请加磨链组织者微信(jackyjin09)。欢迎每一位区块链技术爱好者加入磨链,一块琢磨区块链技术。
关于磨链和相关合作
磨链”---取磨炼之意,旨在普及区块链技术,磨炼技术,更好投身区块链行业。有兴趣一块琢磨区块链技术,联系笔者微信(jackyjin09)。
磨链社区是一个纯粹的技术社区,欢迎相关技术合作,在不违反原则的前提下,积极参与合作。
你可以在这里找到我们:
磨链社区公众号:
1. 磨链社区:http://mochain.info
2. Github : https://github.com/mochain
3. Gitter 聊天: https://gitter.im/mochain
4. 知识星球: https://t.zsxq.com/M3BMVZN
5. 知乎:https://www.zhihu.com/people/mochain
(持续更新中)
合作社区
网友评论