
按:原文发表于2017年8月。
那一年架构大师Martin Fowler写了一篇名字就叫Microservices的著名文章,微服务的观念却是在哪之前就流行在架构师的圈子里边。这观念与结构化编程的模式一脉相承,即硬件平台的功能需要切分为尽可能的简洁的组件,然后借助某些标准的方法组装出来。在进程内我们可以将代码解耦成一个个类和对象,通过对象间消息把他们组合出来;在UNIX平台上面我们推动了一个个极小而专一的工具,利用管道组合很多小软件能够完成各类复杂的任务;于是在企业级架构中,将平台分拆成一个个独立的应用,相互之间借助HTTP协议或是企业消息总线进行联结,也就是自然而然的事情了。
每一个微服务都是一名匠人,它只专注于一件事情,而且无法较好的完成它。将一个软件平台构建为微服务架构的过程,就是不断的将单个独立的任务发掘起来仍然将其代理给一位位值得托付的工匠的过程。(还真是像我们发展创业队伍的过程哟 0_0)
如果我们认真观察交易从被客户构造出来发送至网络开始的整个处理步骤,我们会看到主要有这种几个阶段:
交易在网路上被广播,扩散。网络给交易安排一个唯一并且递增的“序号”,例如交易所在的区块高度+区块内index就是一个“序号”。每个节点都发现了交易的序号,并且根据排序对交易进行处置,例如将交易成为参数传给智能合约就是一种处理方法。用户借助节点提供的接口,获得交易被处理后的结果

这几个主要阶段正好对应了cita里面的四个主要微服务:
网络服务共识服务执行服务RPC服务
cita网络中的每一个全节点就会运行这一组服务。由于这种服务可以运行在多台服务器上,因此cita里面的节点概念不再和服务器一一绑定,而是成为了由一台或者多台物理服务器构成的集群。集群运行在企业外部,因此同一节点的微服务之间可以互相认同,共享相似的安全界限。

image

微服务通过消息中间件连接(虽然cita v0.8只支持RabbitMQ,但对消息中间件透明从一开始就是cita的设计目标,对kafka的支持正在开发中,很快还会与你们见面_)。网络酱负责与P2P网络中的其他节点构建连接,交换消息。无论交易被发送到什么节点,都会被扩散并被本节点的网络酱接收到,网络酱接收到这个交易过后微服务架构 云计算,会借助消息的方式把它递交给共识酱。共识酱又会请网络酱帮忙和其它节点的议题酱交换消息,以对这个交易的序号达成共识。在共识完成以后,执行酱会接手,调用某个智能合约对交易进行处置。最后用户借助询问RPC酱,获取交易的处理结果。
通过这种一种相互配合、团队协同的流水线作业,cita节点将一个个交易放到了区块链上。在这种一种作业模式中,节点不再是一位需要自己完成所有工作的小作坊老板,而是一座拥有长期熟练工人的工厂。每一位微服务酱都专心一件事情,因此可以把这件事做得很高很高效。不仅如此,流水线的每位环节都可以有众多选项:我们可以请CITA-BFT酱来负责共识,也可以请PBFT酱以及PoA酱来做这件事,只要结果一样,流水线其他环节的员工完全不会意识到他们是在跟共识部门的哪位工人在协作。在cita“工厂”里面,组件能插拔不是口号,而是现实。

image
同样的,小作坊受制造流程所限,产出上限固定,无法规避销售旺季交易量保障的状况;而cita工厂因为推行了一套标准的协同体系,只应该降低更多的流水线和员工能够够从容应对这些状况!

cita的这个特征就是传说中的scalability。
“等等,scalability不是区块链的一个尚未解决的难题吗?你们不是吹牛吧?”
目前区块链网络的scale问题源自其多复本的设计模式,由于每一个交易就会被复制到所有节点上处理跟验证,节点在验证交易的同时也有在进行重复计算,造成了整个网络的交易处理能力约等于网络中单个节点的处理能力,无论如何提高节点都没有用。我们经常探讨的,就是如何可作出一个方案微服务架构 云计算,在确保安全的前提下才能通过降低节点来提升区块链的处理能力,行话既称为水平扩展(scale out)。
我们清楚,scalability可以分为两种,除了上述水平扩展外,还有垂直扩展(scale up):如果降低节点没用,能不能想办法提高单个节点的素质呢?既然整个网络的处理能力约等于网络中的单个节点,如果单个节点的能力更强,那么整个网络的处理能力不是就增加了吗?


image
这就是cita具有scalability的理由。通过节点的微服务架构,cita可以做到节点内的水准扩展,从区块链这个层面看,便是节点在平行扩展了。相较于国际大公司通过专有硬件来提高单节点处理能力的方案,cita只应该运行在普通PC服务器上,不仅无法为客户节省费用,水平扩展能力也比单机架构最强。
敏锐的读者或许早已看到了难题所在:中心化。
对于公有链的设计者来说,节点需要被尽可能多的客户运行在尽可能多的计算机上。运行一个计算机集群虽然可提高节点能力,但是维护集群所必须的知识及其资源投入,却是普通用户不具备的。如果在公有链中使用这种的设计,必然发生的状况是唯有少数具备知识、能够投入一定资源的人才有素质运行全节点,这与公有链的结点对等无中心的目标是相悖的。
cita则是对于企业级用户设计的区块链。作为cita的目标客户,企业天生就具备运行一个集群的资源跟能力。在云计算或者容器化技术尚未十分成熟的现在,企业级用户可以轻松的将cita服务推进至多台服务器上,并对这种服务进行管控。相较于其他区块链技术,cita微服务架构能够真正发挥云服务的潜力,可以说,cita不仅仅是对于企业级用户设计,也是对于云服务设计的区块链。秘猿技术团队正在研发cita部署软件与模块,如果您有兴趣成为我们的合作伙伴以及客户,欢迎与我们联系,共同推进BaaS(Blockchain as a Service)的发展。
不同的设计目标,需要不同的设计模式。作为秘猿科技完全自主开发的区块链框架,cita凝结了秘猿技术队伍对区块链的了解与理解,对区块链设计做出了大胆的变革与突破。微服务架构并非cita设计的一个方面,本文也对cita微服务进行了简化,实际上在节点部署中会涉及更多的微服务,例如成员管理等,微服务之间的交互流程也会很复杂。更多的介绍可以阅读cita的白皮书,或者关注我们公众号阅读下一篇文章咯~ : >
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-136415-1.html
后来震撼到我了