区块链技术zookeeper
⑴ 共识算法系列之一:私链的raft算法和联盟链的 pbft 算法
对数据顺序达成一致共识是很多共识算法要解决的本质问题
Fabic的pbft算法实现
现阶段的共识算法主要可以分成三大类:公链,联盟链和私链
私链,所有节点可信
联盟链,存在对等的不信任节点
私链:私链的共识算法即区块链这个概念还没普及时的传统分布式系统里的共识算法,比如 zookeeper 的 zab 协议,就是类 paxos 算法的一种。私链的适用环境一般是不考虑集群中存在作恶节点,只考虑因为系统或者网络原因导致的故障节点。
联盟链:联盟链中,经典的代表项目是 Hyperledger 组织下的 Fabric 项目, Fabric0.6 版本使用的就是 pbft 算法。联盟链的适用环境除了需要考虑集群中存在故障节点,还需要考虑集群中存在作恶节点。对于联盟链,每个新加入的节点都是需要验证和审核的。
公链:公链不仅需要考虑网络中存在故障节点,还需要考虑作恶节点,这一点和联盟链是类似的。和联盟链最大的区别就是,公链中的节点可以很自由的加入或者退出,不需要严格的验证和审核。
在公有链中用的最多的是pow算法和pos算法,这些算法都是参与者的利益直接相关,通过利益来制约节点诚实的工作,解决分布式系统中的拜占庭问题。拜占庭容错算法是一种状态机副本复制算法,通过节点间的多轮消息传递,网络内的所有诚实节点就可以达成一致的共识。
使用拜占庭容错算法不需要发行加密货币,但是只能用于私有链或者联盟链,需要对节点的加入进行权限控制;不能用于公有链,因为公有链中所有节点都可以随意加入退出,无法抵挡女巫攻击(sybil attack)
raft 算法包含三种角色,分别是:跟随者( follower ),候选人(candidate )和领导者( leader )。集群中的一个节点在某一时刻只能是这三种状态的其中一种,这三种角色是可以随着时间和条件的变化而互相转换的。
raft 算法主要有两个过程:一个过程是领导者选举,另一个过程是日志复制,其中日志复制过程会分记录日志和提交数据两个阶段。raft 算法支持最大的容错故障节点是(N-1)/2,其中 N 为 集群中总的节点数量。
国外有一个动画介绍raft算法介绍的很透彻,链接地址为: http://thesecretlivesofdata.com/raft/ 。这个动画主要包含三部分内容,第一部分介绍简单版的领导者选举和日志复制的过程,第二部分内容介绍详细版的领导者选举和日志复制的过程,第三部分内容介绍的是如果遇到网络分区(脑裂),raft 算法是如何恢复网络一致的。
pbft 算法的提出主要是为了解决拜占庭将军问题
要让这个问题有解,有一个 十分重要的前提 ,那就是 信道必须是可靠的 。如果信道不能保证可靠,那么拜占庭问题无解。关于信道可靠问题,会引出两军问题。两军问题的结论是,在一个不可靠的通信链路上试图通过通信以达成一致是基本不可能或者十分困难的。
拜占庭将军问题最早是由 Leslie Lamport 与另外两人在 1982 年发表的论文《The Byzantine Generals Problem 》提出的, 他证明了在将军总数大于 3f ,背叛者为f 或者更少时,忠诚的将军可以达成命令上的一致,即 3f+1<=n 。算法复杂度为 o(n^(f+1)) 。而 Miguel Castro (卡斯特罗)和 Barbara Liskov (利斯科夫)在1999年发表的论文《 Practical Byzantine Fault Tolerance 》中首次提出 pbft 算法,该算法容错数量也满足 3f+1<=n ,算法复杂度为 o(n^2)。
首先我们先来思考一个问题,为什么 pbft 算法的最大容错节点数量是(n-1)/3,而 raft 算法的最大容错节点数量是(n-1)/2 ?
对于raft算法,raft算法的的容错只支持容错故障节点,不支持容错作恶节点。什么是故障节点呢?就是节点因为系统繁忙、宕机或者网络问题等其它异常情况导致的无响应,出现这种情况的节点就是故障节点。那什么是作恶节点呢?作恶节点除了可以故意对集群的其它节点的请求无响应之外,还可以故意发送错误的数据,或者给不同的其它节点发送不同的数据,使整个集群的节点最终无法达成共识,这种节点就是作恶节点。
raft 算法只支持容错故障节点,假设集群总节点数为n,故障节点为 f ,根据小数服从多数的原则,集群里正常节点只需要比 f 个节点再多一个节点,即 f+1 个节点,正确节点的数量就会比故障节点数量多,那么集群就能达成共识。因此 raft 算法支持的最大容错节点数量是(n-1)/2。
对于 pbft 算法,因为 pbft 算法的除了需要支持容错故障节点之外,还需要支持容错作恶节点。假设集群节点数为 N,有问题的节点为 f。有问题的节点中,可以既是故障节点,也可以是作恶节点,或者只是故障节点或者只是作恶节点。那么会产生以下两种极端情况:
第一种情况,f 个有问题节点既是故障节点,又是作恶节点,那么根据小数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即 f+1 个节点,确节点的数量就会比故障节点数量多,那么集群就能达成共识。也就是说这种情况支持的最大容错节点数量是 (n-1)/2。
第二种情况,故障节点和作恶节点都是不同的节点。那么就会有 f 个问题节点和 f 个故障节点,当发现节点是问题节点后,会被集群排除在外,剩下 f 个故障节点,那么根据小数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即 f+1 个节点,确节点的数量就会比故障节点数量多,那么集群就能达成共识。所以,所有类型的节点数量加起来就是 f+1 个正确节点,f个故障节点和f个问题节点,即 3f+1=n。
结合上述两种情况,因此 pbft 算法支持的最大容错节点数量是(n-1)/3
pbft 算法的基本流程主要有以下四步:
客户端发送请求给主节点
主节点广播请求给其它节点,节点执行 pbft 算法的三阶段共识流程。
节点处理完三阶段流程后,返回消息给客户端。
客户端收到来自 f+1 个节点的相同消息后,代表共识已经正确完成。
为什么收到 f+1 个节点的相同消息后就代表共识已经正确完成?从上一小节的推导里可知,无论是最好的情况还是最坏的情况,如果客户端收到 f+1 个节点的相同消息,那么就代表有足够多的正确节点已全部达成共识并处理完毕了。
3.算法核心三阶段流程
算法的核心三个阶段分别是 pre-prepare 阶段(预准备阶段),prepare 阶段(准备阶段), commit 阶段(提交阶段)
流程的对比上,对于 leader 选举这块, raft 算法本质是谁快谁当选,而 pbft 算法是按编号依次轮流做主节点。对于共识过程和重选 leader 机制这块,为了更形象的描述这两个算法,接下来会把 raft 和 pbft 的共识过程比喻成一个团队是如何执行命令的过程,从这个角度去理解 raft 算法和 pbft 的区别。
一个团队一定会有一个老大和普通成员。对于 raft 算法,共识过程就是:只要老大还没挂,老大说什么,我们(团队普通成员)就做什么,坚决执行。那什么时候重新老大呢?只有当老大挂了才重选老大,不然生是老大的人,死是老大的鬼。
对于 pbft 算法,共识过程就是:老大向我发送命令时,当我认为老大的命令是有问题时,我会拒绝执行。就算我认为老大的命令是对的,我还会问下团队的其它成员老大的命令是否是对的,只有大多数人 (2f+1) 都认为老大的命令是对的时候,我才会去执行命令。那什么时候重选老大呢?老大挂了当然要重选,如果大多数人都认为老大不称职或者有问题时,我们也会重新选择老大。
四、结语
raft 算法和 pbft 算法是私链和联盟链中经典的共识算法,本文主要介绍了 raft 和 pbft 算法的流程和区别。 raft 和 pbft 算法有两点根本区别:
raft 算法从节点不会拒绝主节点的请求,而 pbft 算法从节点在某些情况下会拒绝主节点的请求 ;
raft 算法只能容错故障节点,并且最大容错节点数为 (n-1)/2 ,而 pbft 算法能容错故障节点和作恶节点,最大容错节点数为 (n-1)/3 。
pbft算法是通过投票来达成共识,可以很好的解决包括分叉等问题的同时提升效率。但仅仅比较适合于联盟链私有链,因为两两节点之间通信量是O(n^2)(通过优化可以减少通信量),一般来说不能应用于超过100个节点。
pbft有解的前提是 信道必须是可靠的 ,存在的问题是 可扩展性(scalability)差
部分来自: https://blog.csdn.net/kojhliang/article/details/80270223
区块链在设计上就是为了BFT
⑵ 24 年 “年薪百万” 的 Java 程序员,都要学什么
大家好,我叫程序员鱼皮,分享一篇关于2024年Java架构师必备技能的文章,了解国外同行的高要求。作为国内Java开发者,要想提升,以下技术值得关注:
1. 微服务架构
掌握Spring Boot和Spring Cloud,构建松耦合、可扩展的系统,是关键。
2. 云原生应用
学会利用云平台部署,如大厂云服务,善用弹性与自动化。
3. 容器化与编排
掌握Docker镜像制作与Kubernetes基础,提升部署效率和应用可靠性。
4. 响应式编程
理解Spring Webflux,适应实时应用,如Spring 5的响应式特性。
5. 无服务器计算
利用云服务进行部署,关注简化运维。
6. 事件驱动架构
理解事件通信和协作,如RabbitMQ或Kafka的使用。
7. 安全校验
JWT和Spring Security是保证应用安全的必备工具。
8. DevOps & CI/CD
了解GitHub Actions或GitLab CI/CD,加快软件交付效率。
9. API与集成
设计RESTful API,使用Swagger和了解GraphQL的选学。
10. 数据管理
精通MySQL和Redis,理解NoSQL选择,如MongoDB。
11. 分布式系统
掌握Dubbo和Zookeeper,实现分布式开发。
12. 并发与优化
学习JUC,理解并发编程和性能调优。
13. Java生态与更新
持续关注Java新版本,确保最佳实践。
14. 架构模式
学习MVC,理解经典设计模式,如策略模式。
15. 测试驱动开发
掌握JUnit和Mockito,理解TDD理念。
16. 图数据库与大数据
图数据库作为扩展知识,理解Elasticsearch。
17. 人工智能与机器学习
了解AI接口调用,提升应用安全性。
18. 区块链技术
接触区块链,理解去中心化应用开发。
总结,成为Java架构师需要不断学习和实践,技术日新月异,持续关注和提升是关键。祝各位程序员在技术道路上不断进步!
⑶ SuperCell--超级细胞
超级细胞
一.前言:
2100万枚,总量固定永远不通胀,这是比特币最鲜明特征之一。与“总量固定”的比特币不同,以太坊和EOS等加密币都保留了一定速率的通胀。从而超级细胞(SuperCell)横空而世。
二.介绍:
英文名:SuperCell 中文名:超级细胞 代币名称:“SC” “超级细胞(SC)”是一种基于ERC20智能合约的通货紧缩类自销毁的加密货币SC。SC得到国际知名区块链研发团队R4,区块链联盟,超级账本linux基金会的支持。SC作为一项社会实验和金融案例研究而出现在ERC20智能合约,来探索衡量通货紧缩类加密货币的可行性。
“超级细胞”的主要特征:
1.代币初始发行量666万
2.每次ERC20链上转账时,百分之1的交易量会被像细胞分裂怡亚通销毁
3.永远不会有代币增发
4.IBO在交易平台上线后,以IBO总数量的90%的ETH在交易平台以单价不低于0.00275ETH回购。参与IBO的矿工会有稳地收益,直至IBO完成,流通总量达到2000000SC。IBO总数量的10%用于应用开发。
三.项目背景:
“销毁代币”相信这4个字在ERC20智能合约加密货币中已经非常常见,不少交易所、项目方为了提升代币价值,都会通过回购代币销毁的方法,来减少流通量从而提高代币市场价格,如此研发团队提出大胆的设想与创新:通过智能合约自动销毁代币,每一次转账都会自动销毁1%的交易量。而之前很多加密货币的销毁模式,大都是基于人为主动操作,带有明显的人治色彩,无论是透明度还是可信任度都不高。 “超级细胞(SC)”研发团队表示:超级细胞出来的意图不是仅仅用于日常交易,而是用作对传统加密货币通货膨胀工具的一种去中心化对冲方案,一种分散的价值储存,它作为一项社会实验和金融案例研究,来探索衡量通货紧缩货币的可行性。
四.token经济模型
总发行量666万 (永不增发)
社区生态激励200万(每月糖果计划)
基金会200万(锁仓,每年释放百分之20%)
矿工IBO 200万 (参与SC矿工计划)
创史团队奖励 66万 (上线知名交易所奖励团队)
五.ERC20智能合约地址:
六.团队人员
大卫Vyravipillai ,是一名新加坡基金会的主席校长,自1985 年以来37年投资管理经历,毕业于哈佛大学,圣安德烈斯大学,大卫Vyravipillai是现超级细胞首席执行官创始人,负责超级细胞整个项目运营与发展。
乔什·肖尔斯,北卡罗来纳大学哲学与计算机研究学士,主修计算 机专业。曾是虚拟货币在线/国际支付和欺诈方面的专家,也是 Kraken 的创始人兼首席执行官,Kraken 是世界上最值得信赖和 最大的比特币交易所之一,是深入虚拟货币行业 15 年的资深人 士,现为超级细胞首席技术官 CTO,主攻技术研究与开发。
Manish Sharma,中文名:曼尼什·沙玛.曾是美国facebook工程师,拥有丰富的交易系统开发经验,能够做到 精细化控制事物;并精通主流开源框架,如 rocketmq,iBatis,netty,bbo,zookeeper,cat,mycat等,熟悉微服务化开发, 大数据量、高并发系统,拥有大型网站构建经验。现为超级细胞分布式工程师。
Brandon Arrindell 中文名:布兰登·阿林德尔 ,BBA Hons(会计与金融)新加坡国立大学出身,美国企业家、投资者、软件工程师。布兰登·阿林德尔是著名的 Mosaic 浏览器共同开发者,第一个被广泛使用的浏览器;网景通讯公司的 创始人;硅谷风险投资公司 Andreessen Horowitz 创始人和普通 合伙人,现为超级细胞顾问。
超级细胞(SC)将打造智能合约加密货币,第一可实用性通货紧缩类加密货币,打开加密货币通往世界的另一扇大门。
⑷ 区块链私链如何变成公链
如何通俗解释区块链?“区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人们的生产力,电力解决了人们基本的生活需求,互联网彻底改变了信息传递的方式,那么区块链作为构造信任的机器,将可能彻底改变整个人类社会价值传递的方式。”
刚刚接触区块链,有太多太多需要了解和知道的基础知识,大家先不要着急,今天给大家科普这些知识。今天咱们一起先来看看公链、私链、联盟链以及侧链到底是什么吧。
一、什么是区块链?
区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算范式。其具有去中心化、公开透明、不可篡改、分布式存储、智能合约等特点。简言之,区块链就是一个分布式的公共账本技术。大家可以查看这个账本的内容,并参与账本的维护与更新。
二、公链、私链和联盟链的区别
区块链根据去中心化的程度,可以分为公链、私链和联盟链。
公链——完全去中心化,所有用户都可以读取、写入;
联盟链——部分去中心化,写入参与者被提前筛选,读写权限由被选定的参与者们决定;
私链——部分去中心化,写入权限仅在一个组织手里,读写权限由该组织决定;
公链是完全去中心化的,链上数据都是公开透明的,不可更改,任何人都可以通过交易或挖矿读取和写入数据。其典型代表就是比特币区块链,在比特币区块链上,任何人都可以在其链上进行交易,并且查看链上的所有交易信息。比如说虎妞可以在链上查看自己BTC地址的转出、转入信息(具体操作请点击【实操指南】充值提现迟迟未到账,别着急);大家也可以看到中本聪是否有从他的BTC地址中提取比特币(前提是知道中本聪的BTC地址)。
联盟链是部分去中心化的,其开放程度和去中心化程度是有所限制的。其参与者是被提前筛选出来或者直接指定的,数据库的读取权限可能是公开的,也可能像写入权限一样只限于系统的参与者。前阵子用于日韩国际汇款及日本本国银行间汇款的瑞波区块链,就是一个联盟链。它为加入联盟的金融机构提供跨境支付服务,只有该联盟内的成员,获得多数联盟成员的同意后,才有资格在其链上写入数据。同时,其链上数据是对所有人开放,还是对一部分人开放,也由其联盟决定。
私链跟联盟链类似,其开放程度和去中心化程度是有所限制的,其读写权,记账权由组织决定。与联盟链最大的不同在于,联盟链是为一个联盟,比如一个行业服务的;而私链则是为一个组织,比如一家公司内部服务。据每日新闻最新的报道,日本最大的金融机构——三菱UFJ集团打算发行自己的代币(MUFG),用以解决电子货币转账在不经过银行的情况下,转账金额不能超过100万日元(约6万多RMB)的问题。在该场景中,三菱UFJ集团使用的就是为公司内部服务的私链。
三、侧链
“侧链”从严格上来说,其本身并不是区块链,可以理解为区块链的一种扩展协议。早期“侧链”是为了解决比特币区块链技术的限制问题,先锁定主链上的资产,然后将锁定的那部分资产在侧链上做参数修改(如修改,并进行自由交易和转换。例如修改10分钟记一次账、区块大小1M限制等,赋予侧链上自己的交易定义。
当前闪电网络就是基于侧链技术做了些扩展,达到快速转账和交易的目的。接下来简单介绍下闪电网络是怎么运作的。
若AB经常交易,就可以在AB间建立一个含有2个比特币的通道,AB各发送1个比特币到多重签名地址,然后将这些币暂时锁在主链上。
只要AB为交易签名,这两个币就可以在双方中免费发来发去。能免费的原因是这2个比特币根本没有移动,只是在区块链之外,交易了币的所有权。当最后关闭通道时,交易才会被写到区块链上,双方就可以拿到属于自己的那部分币。
在闪电网络上,不是建立通道的AB之间转账时,比如说A支付给没有建立通道的D时,可以通过就近的节点传播,从A?B?C?D,A只需要支付小额的手续费给B、C即可。如果BC之间已经建立通道了的话,又可以省掉一笔手续费。需要注意的是,如果在主链上操作这个步骤,需要全网所有节点同步这个信息,其手续费就要高很多,速度也会慢很多;而在闪电网络上,因为只需要传播ABCD这几个节点,所以速度会快很多,手续费也会便宜很多。
简单归纳下侧链的特性:
1.侧链是一种扩展协议,为了解决主链(如比特币区块链)技术的限制问题;
2.一般先锁定主链上的资产,然后将锁定的那部分资产在侧链上做参数修改;
3.用以实现低手续费、高转账速度等目的。
共识算法系列之一:私链的raft算法和联盟链的pbft算法
对数据顺序达成一致共识是很多共识算法要解决的本质问题
Fabic的pbft算法实现
现阶段的共识算法主要可以分成三大类:公链,联盟链和私链
私链,所有节点可信
联盟链,存在对等的不信任节点
私链:私链的共识算法即区块链这个概念还没普及时的传统分布式系统里的共识算法,比如zookeeper的zab协议,就是类paxos算法的一种。私链的适用环境一般是不考虑集群中存在作恶节点,只考虑因为系统或者网络原因导致的故障节点。
联盟链:联盟链中,经典的代表项目是Hyperledger组织下的Fabric项目,Fabric0.6版本使用的就是pbft算法。联盟链的适用环境除了需要考虑集群中存在故障节点,还需要考虑集群中存在作恶节点。对于联盟链,每个新加入的节点都是需要验证和审核的。
公链:公链不仅需要考虑网络中存在故障节点,还需要考虑作恶节点,这一点和联盟链是类似的。和联盟链最大的区别就是,公链中的节点可以很自由的加入或者退出,不需要严格的验证和审核。
在公有链中用的最多的是pow算法和pos算法,这些算法都是参与者的利益直接相关,通过利益来制约节点诚实的工作,解决分布式系统中的拜占庭问题。拜占庭容错算法是一种状态机副本复制算法,通过节点间的多轮消息传递,网络内的所有诚实节点就可以达成一致的共识。
使用拜占庭容错算法不需要发行加密货币,但是只能用于私有链或者联盟链,需要对节点的加入进行权限控制;不能用于公有链,因为公有链中所有节点都可以随意加入退出,无法抵挡女巫攻击(sybilattack)
raft算法包含三种角色,分别是:跟随者(follower),候选人(candidate)和领导者(leader)。集群中的一个节点在某一时刻只能是这三种状态的其中一种,这三种角色是可以随着时间和条件的变化而互相转换的。
raft算法主要有两个过程:一个过程是领导者选举,另一个过程是日志复制,其中日志复制过程会分记录日志和提交数据两个阶段。raft算法支持最大的容错故障节点是(N-1)/2,其中N为集群中总的节点数量。
国外有一个动画介绍raft算法介绍的很透彻,链接地址为:。这个动画主要包含三部分内容,第一部分介绍简单版的领导者选举和日志复制的过程,第二部分内容介绍详细版的领导者选举和日志复制的过程,第三部分内容介绍的是如果遇到网络分区(脑裂),raft算法是如何恢复网络一致的。
pbft算法的提出主要是为了解决拜占庭将军问题
要让这个问题有解,有一个十分重要的前提,那就是信道必须是可靠的。如果信道不能保证可靠,那么拜占庭问题无解。关于信道可靠问题,会引出两军问题。两军问题的结论是,在一个不可靠的通信链路上试图通过通信以达成一致是基本不可能或者十分困难的。
拜占庭将军问题最早是由LeslieLamport与另外两人在1982年发表的论文《TheByzantineGeneralsProblem》提出的,他证明了在将军总数大于3f,背叛者为f或者更少时,忠诚的将军可以达成命令上的一致,即3f+1=n。算法复杂度为o(n^(f+1))。而MiguelCastro(卡斯特罗)和BarbaraLiskov(利斯科夫)在1999年发表的论文《》中首次提出pbft算法,该算法容错数量也满足3f+1=n,算法复杂度为o(n^2)。
首先我们先来思考一个问题,为什么pbft算法的最大容错节点数量是(n-1)/3,而raft算法的最大容错节点数量是(n-1)/2?
对于raft算法,raft算法的的容错只支持容错故障节点,不支持容错作恶节点。什么是故障节点呢?就是节点因为系统繁忙、宕机或者网络问题等其它异常情况导致的无响应,出现这种情况的节点就是故障节点。那什么是作恶节点呢?作恶节点除了可以故意对集群的其它节点的请求无响应之外,还可以故意发送错误的数据,或者给不同的其它节点发送不同的数据,使整个集群的节点最终无法达成共识,这种节点就是作恶节点。
raft算法只支持容错故障节点,假设集群总节点数为n,故障节点为f,根据小数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即f+1个节点,正确节点的数量就会比故障节点数量多,那么集群就能达成共识。因此raft算法支持的最大容错节点数量是(n-1)/2。
对于pbft算法,因为pbft算法的除了需要支持容错故障节点之外,还需要支持容错作恶节点。假设集群节点数为N,有问题的节点为f。有问题的节点中,可以既是故障节点,也可以是作恶节点,或者只是故障节点或者只是作恶节点。那么会产生以下两种极端情况:
第一种情况,f个有问题节点既是故障节点,又是作恶节点,那么根据小数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即f+1个节点,确节点的数量就会比故障节点数量多,那么集群就能达成共识。也就是说这种情况支持的最大容错节点数量是(n-1)/2。
第二种情况,故障节点和作恶节点都是不同的节点。那么就会有f个问题节点和f个故障节点,当发现节点是问题节点后,会被集群排除在外,剩下f个故障节点,那么根据小数服从多数的原则,集群里正常节点只需要比f个节点再多一个节点,即f+1个节点,确节点的数量就会比故障节点数量多,那么集群就能达成共识。所以,所有类型的节点数量加起来就是f+1个正确节点,f个故障节点和f个问题节点,即3f+1=n。
结合上述两种情况,因此pbft算法支持的最大容错节点数量是(n-1)/3
pbft算法的基本流程主要有以下四步:
客户端发送请求给主节点
主节点广播请求给其它节点,节点执行pbft算法的三阶段共识流程。
节点处理完三阶段流程后,返回消息给客户端。
客户端收到来自f+1个节点的相同消息后,代表共识已经正确完成。
为什么收到f+1个节点的相同消息后就代表共识已经正确完成?从上一小节的推导里可知,无论是最好的情况还是最坏的情况,如果客户端收到f+1个节点的相同消息,那么就代表有足够多的正确节点已全部达成共识并处理完毕了。
3.算法核心三阶段流程
算法的核心三个阶段分别是pre-prepare阶段(预准备阶段),prepare阶段(准备阶段),commit阶段(提交阶段)
流程的对比上,对于leader选举这块,raft算法本质是谁快谁当选,而pbft算法是按编号依次轮流做主节点。对于共识过程和重选leader机制这块,为了更形象的描述这两个算法,接下来会把raft和pbft的共识过程比喻成一个团队是如何执行命令的过程,从这个角度去理解raft算法和pbft的区别。
一个团队一定会有一个老大和普通成员。对于raft算法,共识过程就是:只要老大还没挂,老大说什么,我们(团队普通成员)就做什么,坚决执行。那什么时候重新老大呢?只有当老大挂了才重选老大,不然生是老大的人,死是老大的鬼。
对于pbft算法,共识过程就是:老大向我发送命令时,当我认为老大的命令是有问题时,我会拒绝执行。就算我认为老大的命令是对的,我还会问下团队的其它成员老大的命令是否是对的,只有大多数人(2f+1)都认为老大的命令是对的时候,我才会去执行命令。那什么时候重选老大呢?老大挂了当然要重选,如果大多数人都认为老大不称职或者有问题时,我们也会重新选择老大。
四、结语
raft算法和pbft算法是私链和联盟链中经典的共识算法,本文主要介绍了raft和pbft算法的流程和区别。raft和pbft算法有两点根本区别:
raft算法从节点不会拒绝主节点的请求,而pbft算法从节点在某些情况下会拒绝主节点的请求;
raft算法只能容错故障节点,并且最大容错节点数为(n-1)/2,而pbft算法能容错故障节点和作恶节点,最大容错节点数为(n-1)/3。
pbft算法是通过投票来达成共识,可以很好的解决包括分叉等问题的同时提升效率。但仅仅比较适合于联盟链私有链,因为两两节点之间通信量是O(n^2)(通过优化可以减少通信量),一般来说不能应用于超过100个节点。
pbft有解的前提是信道必须是可靠的,存在的问题是可扩展性(scalability)差
部分来自:
区块链在设计上就是为了BFT
区块链三大公链是什么?区块链的三大公链指的是BTC,ETH,ADA
区块链公链也被称之为区块链共有链,公链的意思就是说任何人都可以在任何时间读取系统中的数据,公链往往都是完全去中心化的,这样的特点让所有人和机构都不能控制或是篡改链上的数据。
拓展资料:
区块链是一个信息技术领域的术语。从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”“全程留痕”“可以追溯”“公开透明”“集体维护”等特征。基于这些特征,区块链技术奠定了坚实的“信任”基础,创造了可靠的“合作”机制,具有广阔的运用前景。
类型
1、公有区块链
公有区块链(PublicBlockChains)是指:世界上任何个体或者团体都可以发送交易,且交易能够获得该区块链的有效确认,任何人都可以参与其共识过程。公有区块链是最早的区块链,也是应用最广泛的区块链,各大bitcoins系列的虚拟数字货币均基于公有区块链,世界上有且仅有一条该币种对应的区块链。
2、联合(行业)区块链
行业区块链(ConsortiumBlockChains):由某个群体内部指定多个预选的节点为记账人,每个块的生成由所有的预选节点共同决定(预选节点参与共识过程),其他接入节点可以参与交易,但不过问记账过程(本质上还是托管记账,只是变成分布式记账,预选节点的多少,如何决定每个块的记账者成为该区块链的主要风险点),其他任何人可以通过该区块链开放的API进行限定查询。
3、私有区块链
私有区块链(PrivateBlockChains):仅仅使用区块链的总账技术进行记账,可以是一个公司,也可以是个人,独享该区块链的写入权限,本链与其他的分布式存储方案没有太大区别。传统金融都是想实验尝试私有区块链,而公链的应用例如bitcoin已经工业化,私链的应用产品还在摸索当中。
区块链中的公链是什么?公链也称“公有链”,即指全世界任何人都可以随时进入到系统中读取数据、发送可确认交易、竞争记账的区块链。公有链通常被认为是“完全去中心化”的,因为没有任何个人或者机构可以控制或篡改其中数据的读写。而从应用上说,区块链公有链则主要包括比特币、以太坊、超级账本、大多数山寨币以及智能合约,其中区块链公有链的始祖则为比特币区块链,具有以下特点:
1、代码开源
代码上传到github,每个人都可以通过下载得到完整的区块链数据,接受大众的考验。
2、完全去中心化
任何人都可以成为一个节点,每一个节点都是公开的,每个人都可以参与区块链的计算,任何节点都不是永久的,而是阶段性的,任何中心对节点都不具有强制性。任何人都可读取的、且能发送交易,而且交易能够在区块链上得到有效的确认,任何人都可参与其中共识过程。共识过程决定某个区块可以添加到区块链中,以及确切的当前状态。每个人都可以从中得到经济奖励,和在共识过程中所作的贡献成正比。这些公有链通常被认为是“完全意义上的去中心化”。
3、开发去中心化应用
程序开发者通过此公链,可以很方便地开发出去中心化应用。公有链可以保护用户权益免受程序开发者的影响。
区块链的链分类前两天有朋友微信上问了许多关于区块链的一些问题,其中一个问题就是区块链的这个链怎么去分类。区块链目前可以分为四类:公链,私链,联盟链以及侧链。北京木奇移动技术有限公司,专业的区块链外包开发公司,欢迎洽谈合作。下面带大家了解区块链这几个链各自的特点以及如何应用,希望对大家有所帮助。
1.公链——人人可参与
公链是指任何人都可读取的、任何人都能发送交易且交易能获得有效确认的、任何人都能参与其中共识过程的区块链。
公链采取了采取工作量证明机制(POW)、权益证明机制(POS)、股份授权证明机制(DPOS)等方式,并将经济奖励和加密数字验证结合了起来,并建立一个原则就是每个人从中可获得的经济奖励与工作量成正比。这些区块链通常被认为是完全去中心化的。
特性:
1.开源,由于整个系统的运作规则公开透明,这个系统是开源系统;2.保护用户免受开发者的影响,在公有链中程序开发者无权干涉用户,所以区块链可以保护使用他们开发的程序的用户;3.访问门槛低,任何拥有足够技术能力的人都可以访问,也就是说,只要有一台能够联网的计算机就能够满足访问的条件;4.所有数据默认公开,尽管所有关联的参与者都隐藏自己的真实身份,这种现象十分的普遍。他们通过他们的公共性来产生自己的安全性,在这里每个参与者可以看到所有的账户余额和其所有的交易活动。
案例:公有链中有许多我们熟悉的身影:BTC,ETH,EOS,AE,ADA等
2.私链——权利掌握在少数人手里
私链是指其写入权限仅在一个组织手里的区块链。读取权限或者对外开放,或者被任意程度地进行了限制。相关的应用囊括数据库管理、审计、甚至一个公司,尽管在有些情况下希望它能有公共的可审计性,但在很多的情形下,公共的可读性并非是必须的。
特性:
1.交易速度快,一个私链的交易速度可以比任何其他的区块链都快,甚至接近了并不是一个区块链的常规数据库的速度。这是因为就算少量的节点也都具有很高的信任度,并不需要每个节点来验证一个交易。2.隐私性好,给隐私更好的保障私有链使得在那个区块链上的数据隐私政策像在另一个数据库中似的完全一致;不用处理访问权限和使用所有的老办法,但至少说,这个数据不会公开地被拥有网络连接的任何人获得。3.交易成本低交易成本大幅降低甚至为零私有链上可以进行完全免费或者至少说是非常廉价的交易。如果一个实体机构控制和处理所有的交易,那么他们就不再需要为工作而收取费用。
案例:Linux基金会、R3CEVCorda平台以及GemHealth网络的超级账本项目(Hyperledgerproject)或在开发或在使用私链。
3.联盟链——部分去中心化
联盟链开放程度和去中心化程度是有所限制的。其参与者是被提前筛选出来或者直接指定的,数据库的读取权限可能是公开的,也可能像写入权限一样只限于系统的参与者。
特性:
1.交易成本低,交易只需被几个受信的高算力节点验证就可以了,而无需全网确认;2.节点容易连接,若是出了问题,联盟链可以迅速通过人工干预来修复,并允许使用共识算法减少区块时间,从而更快完成交易;3.灵活,如果需要的话,运行私有区块链的共同体或公司可以很容易地修改该区块链的规则,还原交易,修改余额等。
案例:瑞波用于日韩国际汇款及日本本国银行间汇款建立了联盟链,同时之前火过一阵子的迅雷链克也是一种半开放的联盟链。
4.侧链——拓展协议
侧链”从严格上来说,其本身并不是区块链,可以理解为区块链的一种扩展协议。早期“侧链”是为了解决比特币区块链技术的限制问题。侧链就像是一条条通路,将不同的区块链互相连接在一起,以实现区块链的扩展。侧链完全独立于比特币区块链,但是这两个账本之间能够“互相操作”,实现交互。
特性:
1.独立性,侧链架构的好处是代码和数据独立,不增加主链的负担,避免数据过度膨胀。侧链有独立的区块链,有独立的受托人或者说见证人,同时也有独立的节点网络,就是说一个侧链产生的区块只会在所有安装了该侧链的节点之间进行广播。2.灵活性,侧链所有的区块链参数是可以定制的,简单的比如区块间隔、区块奖励、交易费的去向等,高级用户还可以修改共识算法。
案例:LSK,RDN,ARDR等币种是利用的侧链技术。
对于目前整个数字货币领域而言,今年可能仍然是底层公有链项目的竞争大赛,原因是目前公链作为区块链的基础设施还是存在明显的不足,尚且无法实现真正的安全、可靠和高效。这也明显制约着整个区块链产业的发展。
什么是公链公链也称“公有链”,而公有链是指全世界任何人都可读取、发送交易且交易能获得有效确认的、也可以参与其中共识过程的区块链。根据区块链网络中心化程度的不同,分化出3种不同应用场景下的区块链:
1、全网公开,无用户授权机制的区块链,称为公有链;
2、允许授权的节点加人网络,可根据权限查看信息,往往被用于机构间的区块链,称为联盟链或行业链;
3、所有网络中的节点都掌握在一家机构手中,称为私有链。
(4)区块链技术zookeeper扩展阅读:
根据区块链网络中心化程度的不同,分化出3种不同应用场景下的区块链:
(1)全网公开,无用户授权机制的区块链,称为公有链;
(2)允许授权的节点加人网络,可根据权限查看信息,往往被用于机构间的区块链,称为联盟链或行业链;
(3)所有网络中的节点都掌握在一家机构手中,称为私有链。
联盟链和私有链也统称为许可链,公有链称为非许可链。