单纯从技术的角度来讲,区块链的应用技术自己其实并不复杂,它是多种原有的技术的组合。java
咱们常常碰到的第一个问题每每是:为何要选择用区块链技术来解决咱们的问题?node
这个问题在开发的过程当中,以及社群的讨论中常常被说起。算法
先举个相似的例子,当时在引入微服务的时候,对于已经习惯了这种单体开发的人来讲,发现引入微服务后对于业务自己开发上的变化并非特别大,可是在运维层面上要求反而更高了,要有一系列看起来好像跟开发业务没什么关系的东西,好比服务注册已发现、熔断器等,因此在引入微服务的时候也会有不少争论。数据库
“原来的业务开发模式不是挺好的吗?有新的问题多加几台服务器不就解决了吗?”这是一个思惟认知的差异,从理论上看起来可行的解决方案,实际上在现实上并不见得可行。安全
由于不少的时候,没有考虑到人的因素,你们在一个项目中,混杂在一块儿进行开发,牵一发而全身,影响开发团队的士气,大大下降了开发效率。服务器
说到区块链技术,其实也是同样的状况,从技术上来看,彷佛中心化的解决方案也能解决几乎全部的问题,可是实际上并不是如此,好比就很难解决组织或者各个实体之间的信任问题。网络
在一个行业里,或者一个生态系统里,有不一样的实体。这些实体之间有不一样的利益,以及彼此之间信任问题。某个中心想要垄断全部的业务,其实是也不太可能,由于每每其余个体由于信任问题,可能彻底就不会使用某个中心的服务。架构
其次,当服务愈来愈复杂的时候,中心化提供服务的成本其实都会不断地提升,并且开发效率和服务水平都会愈来愈低,这也是为何一些大的平台会经过开放平台的方式吸引其余开发者入住提供更为丰富的服务。运维
而区块链提供了一个很是好的解决方案,能够连接起互不信任的陌生个体,为他们提供了一个良好的相互协做的价值网络。微服务
接下来,本次分享的主题是联盟链,会更多介绍联盟链的实际用处,以及相关碰到的问题。
这里思考**另一个值得思考的问题:**对于区块链应用,彻底去中心化就必定是最好的选择吗?首先所谓彻底去中心化,是不太可能出现的,只是在某些层面消灭了某些中心化的东西,但颇有可能会引入一种新的中心化的东西。
去中心化可能意味着牺牲效率,而中心化程度提高可使得某些效率提高,因此在实际的落地中,是须要一个权衡。
另外我认为多中心化或弱中心化,多是在某些场景中也是解决问题的更好的方案。
如今不少大的企业,尤为是一些偏金融的大公司,基本上都比较倾向于使用联盟链。
大企业落地区块链为何倾向首选联盟链?
相比公链对全部人开放,任何人不用通过受权就能够直接进入网络而言,联盟链要求全部想进入联盟的成员必需要有联盟的受权。因为企业对于数据安全的要求和管控更严格,不可能对全部人彻底开放,因此联盟链更适合企业落地。
从面向的用户角度来看,联盟链更可能是2B,公链更可能是2C,好比比特币,任何人均可以加入到这个网络中来,而联盟链更多的是企业加入使用。
**到底什么是联盟链?**你们能够参考网上的定义。
联盟链属于半公开、半私有的区块链,换句话说就是**只有获得受权和许可才能进入到这个网络中。**无论是联盟链、公链、私链,本质都是区块链,只是各自在不一样行业、不一样场景中的应用,只是开放程度不同,其本质没有太大差异,都是利用区块链的底层技术。
联盟链有什么优势?
目前相对来讲是最容易落地的一种区块链技术。
联盟链的特色:
**权限可控。**联盟链的好处就在于权限可控,每一个联盟成员进来都须要通过认证,每每都是行业领域内的合做伙伴,信任度自己相对来讲比较高,而且可以控制整个联盟的规模,一旦出现问题也更容易从源头排查和修复或下降由此带来的危害程度。
**数据隐私保护。**大公司都对数据安全很是重视,因为联盟链有权限认证,因此相对来讲在隐私保护层面更加让人放心。
**部分去中心化。**联盟链每每须要一个中心认证机构对联盟成员进行受权认证,而在联盟内,各个成员进行协做是去中心化的。
**交易速度快。**联盟链的成员相对公链不会太多且数量每每相对固定,因此无论采用哪一种共识算法,其事务执行的效率也会比较快。
联盟链的应用领域
联盟链的应用领域最主要仍是在金融行业,其中包括:供应链金融、小额信贷、票据、股票、公证、政权发行交易等。例如:最简单的应用能够是作一个内部联盟成员范围内的金融资产的交易系统。
Fabric 超级帐本的架构设计
目前比较流行的联盟链技术应用之一是IBM的Hyperledger,它其实包括四个子项目,其中最火的是Fabric 超级帐本,目前至关多的企业使用它来搭建联盟链。
若是想要入手学习Hyperledger Fabric,最好的方式之一是先从了解它的整个架构设计开始入手。
不少系统都有一个特色:采用所谓的三层架构:底层、中间层(也是核心层)、应用层。若是对于大多数应用开发者来讲,通常只须要关注应用层怎么使用和交互。
若是想要作一些底层的研发,这时就须要更多关注项目的中间层。
Fabric超级帐本的架构也是分为三层:
网络层,实现了P2P网络,提供构建区块链网络的基本能力,包括表明不一样角色的节点和服务。
中间层,包括区块链结构,状态数据库,共识机制以及基于PKI体系数字证书的权限管理,为联盟链的帐本,交易,事件上层应用等提供技术实现基础。
应用层,这多是绝大多数开发人员要关心的地方,包括帐本,交易,事件,链码等。应用开发人员,经过编写chaincode实现各类应用。Fabric提供SDK来访问联盟链,这样大大简化了开发。
Hyperledger Fabric 的Transaction Flow
联盟链或者说区块链,它很是重要的落地应用之一,就是用来做为数据资产的清算系统。
这是Hyperledger Fabric 的Transaction Flow,这张图是官方提供的事务处理流程图,经过这张图能够看到整个Fabric里事务执行的交互流程,以及客户端或应用端怎么跟联盟链进行交互。
首先,应用经过联盟链所提供的SDK工具,将交易请求消息进行序列化,而后经过gRPC协议向联盟链的某一个节点发送请求,这个请求的处理是分阶段的,在第一阶段它只是一个提案不会被真正执行落地到帐本中。
当请求发送到了背书节点时,全部的相关的背书节点都会收到请求,而且验证该请求,经过则会调用链码,而后执行获得一个结果,包括生成一些读写集,加上本身相关的签名等,再经过网络把执行结果返回给应用方,这个过程只是一个模拟执行的操做,不会真正把帐本更新,能够理解成一个预处理的过程。
应用方收到相应的执行结果后要经过SDK对它作一个验证以及比较,而后进行下一步的动做。
接下来应用经过SDK会把交易请求,发送给Ordering Service,咱们称之为排序服务。联盟链有一个比较有意思的地方,在于共识服务和记帐是分开的,这样能更好地提高事务的处理的效率。当应用把服务提交给Ordering Service时,排序服务会对服务进行校验、处理、排序,生成一个新的区块,前面提到过通道的概念,这个区块是分通道的,也就是说Fabric能够实现多链多帐本,而不像比特币同样只有一条区块链,维护同一个帐本。
排序服务器把排序好的结果打包成一个区块,发送给对应的记帐节点,记帐节点把接收过来的交易列表进行逐条校验,校验完了以后把整个区块上的交易进行执行,并把相应结果写入到帐本中,更新world state。
最后一步是记帐节点更新完后经过广播的方式把事务处理结果通知给应用端,整个过程就结束了。
提供一些学习经验和学习资料,供你们参考。
首先推荐官方手册,专门介绍了Fabric的使用教程,包括核心架构设计的相关知识内容。
若是想了解Fabric的动态,能够关注两个地方:官网和IBM,IBM有一个开发者中心,里面有不少相关的技术文章,质量很高。
PPT里面推荐了一篇文章,《IBM关于超级帐本的简介》,这是一篇介绍Fabric技术应用的文章。
目前关于超级帐本的技术图书推荐:《深刻探索区块链》
思考一:做为初学者怎么入门?
首先得掌握相关语言,由于如今不少比较知名的区块链开源项目都是基于go开发的,因此我认为go语言是必须的掌握的基础语言之一,固然还有java,node等其余开发语言也是须要掌握的。其次,还包括,关于区块链的一些相关的底层算法,尤为是各类共识算法的掌握和深刻理解。
思考二:对区块链技术开发的保持高度的热情
目前你们都在相同的起跑线上,我以为能成事的很重要的一点,就是保持对区块链技术开发学习的高度热情,若是不喜欢的话很难坚持下去。虽然如今概念很是火,但真正要落地还得一行一行敲代码才能实现,因此这是一个长期的过程,只有持续学习才是有效的学习。
思考三:区块链技术的迭代将是长期的过程
在技术层面来讲,区块链技术仍是很是有挑战的,好比区块链,由于它去中心化的特质,一旦出现bug怎么测试出来?怎么修复?这对运营和开发人员提出来更高的要求,须要掌握更多技术以及技术以外的知识和能力。
思考四:把握机会,多参与社群的活动,为社群贡献本身的力量
区块链开发是一个将来前景很好的行业,对于技术开发者来讲也是一个很好的机会,能够实现弯道超车,这一点从招聘职位和薪酬标准能看出来。因此你们能够抓住机会提高本身,自学是一方面,参与项目实战是一方面,可是积极参与社群活动,在交流中学习也是一个很好且很重要的提高的途径。
内容来源:HiBlock区块链课堂003期 胡华杰老师的线上分享《一线开发者在超级帐本项目开发实践——hyperledger开发分享》
本文编辑:Cynthia
点击“阅读原文”便可回听课程分享。
如下是咱们的社区介绍,欢迎各类合做、交流、学习:)