单纯从技术的角度来说,区块链的应用技术本身其实并不复杂,它是多种原有的技术的组合。
我们经常碰到的第一个问题往往是:为什么要选择用区块链技术来解决我们的问题?
这个问题在开发的过程中,以及社群的讨论中经常被提及。
先举个类似的例子,当时在引入微服务的时候,对于已经习惯了这种单体开发的人来说,发现引入微服务后对于业务本身开发上的变化并不是特别大,但是在运维层面上要求反而更高了,要有一系列看起来好像跟开发业务没什么关系的东西,比如服务注册已发现、熔断器等,所以在引入微服务的时候也会有很多争论。
“原来的业务开发模式不是挺好的吗?有新的问题多加几台服务器不就解决了吗?”这是一个思维认知的差别,从理论上看起来可行的解决方案,实际上在现实上并不见得可行。
因为很多的时候,没有考虑到人的因素,大家在一个项目中,混杂在一起进行开发,牵一发而全身,影响开发团队的士气,大大降低了开发效率。
说到区块链技术,其实也是一样的情况,从技术上来看,似乎中心化的解决方案也能解决几乎所有的问题,但是实际上并非如此,比如就很难解决组织或者各个实体之间的信任问题。
在一个行业里,或者一个生态系统里,有不同的实体。这些实体之间有不同的利益,以及彼此之间信任问题。某个中心想要垄断所有的业务,实际上是也不太可能,因为往往其他个体因为信任问题,可能完全就不会使用某个中心的服务。
其次,当服务越来越复杂的时候,中心化提供服务的成本其实都会不断地提高,而且开发效率和服务水平都会越来越低,这也是为什么一些大的平台会通过开放平台的方式吸引其他开发者入住提供更为丰富的服务。
而区块链提供了一个非常好的解决方案,可以链接起互不信任的陌生个体,为他们提供了一个良好的相互协作的价值网络。
接下来,本次分享的主题是联盟链,会更多介绍联盟链的实际用处,以及相关碰到的问题。
这里思考另外一个值得思考的问题:对于区块链应用,完全去中心化就一定是最好的选择吗?首先所谓完全去中心化,是不太可能出现的,只是在某些层面消灭了某些中心化的东西,但很有可能会引入一种新的中心化的东西。
去中心化可能意味着牺牲效率,而中心化程度提升可以使得某些效率提升,所以在实际的落地中,是需要一个权衡。
另外我认为多中心化或弱中心化,可能是在某些场景中也是解决问题的更好的方案。
现在很多大的企业,尤其是一些偏金融的大公司,基本上都比较倾向于使用联盟链。
大企业落地区块链为什么倾向首选联盟链?
相比公链对所有人开放,任何人不用经过授权就可以直接进入网络而言,联盟链要求所有想进入联盟的成员必须要有联盟的授权。由于企业对于数据安全的要求和管控更严格,不可能对所有人完全开放,所以联盟链更适合企业落地。
从面向的用户角度来看,联盟链更多是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
点击“阅读原文”回听胡华杰老师的课程分享。
以下是我们的社区介绍,欢迎各种合作、交流、学习:)