关键点
区块链不是仅仅用于支撑比特币的技术。
区块链是用于为交易构建一套不可变的历史记录的协议和账本。
区块链的背后没有什么新技术,只是用新的方式将已经有组件组合在了一起而已。
中间件是成功地将区块链与其它企业架构整合起来的关键。
自己搭建一套区块链系统是很复杂的,区块链即服务(Blockchain as a Service,BaaS)可以帮您更快取得成功。
当今时代,令人激动不已的新技术层出不穷。每个人都在谈论着云、容器、大数据和机器学习。另一个新热点就是区块链。可能你已经听说过区块链,知道它是实现了比特币的底层技术。但实际上,比特币只展现出了冰山的一角。本文讨论了区块链背后的用例和技术概念,简单介绍了已有的服务,并且说明了为什么中间件是在这个领域内获得成功的关键。
区块链的动机和用例
截止到2016年7月11日,在线市场中已经有超过700种在交易中的加密货币了,但只有9种的市场估值超过了1000万美元。一个新名词也由此而生:山寨币(Altcoin,“Bitcoin Alternatives”,意思是“比特币的替代品”)。但事实上,山寨币与区块链并不一样,它只不过是金融交易的另一种替代品而已。
区块链是加密货币底下的一层,它的主题是关于“在商务网络内对资产的传输”。区块链技术使得在交易伙伴以及公众用户之间创建一个安全的、可信的、对等的网络成为可能,从而可以构建任意分布式商业应用。
因此,区块链的用途远不限于经济交易领域。下面是一些例子:
那么,为什么我们不能满足于已有软件和应用程序的现状,而必须关注区块链技术呢?我们已经有了Uber、Ebay,以及在SCM和IoT领域内的若干家公司了,不是吗?仔细考虑考虑下面几方面内容,就可以理解为什么区块链可能成为行业的颠覆者了:
创新,并提供新的服务和分布式程序;
在许多行业的流水线处理流程中,智能合约可以取代昂贵而又缓慢的中间人,比如转让契约等;
现在我们能用区块链实现的还都是比较肤浅的用例。事实上我们没办法想像出客户和他们的伙伴们到底会构建出什么样的系统。这与开放式API的想法很相似,我们只是通过组合各种各样的内部或外部API,就实现了新的附加值,甚至新的业务模型;
接下来我们看一个例子,这种颠覆是怎样深刻地改变一个行业的:航空运输业中在航班延误或取消的情况下对乘客的赔偿。在许多国家里,当航班延误时乘客是有权要求一定数额的赔偿的。在欧洲,假如航班延误超过了三小时,每位乘客可以索取最高600欧元的赔偿。可是,航空公司不会也不必主动进行赔偿,你必须先索赔,通常还要在律师的帮助下进行。因此,许多乘客直接就放弃索赔了。
但在由区块链支撑的系统中,智能合约就可以非常安全地自动处理这样的事情了。国际航空运输协会(International Air Transport Association,IATA)之类的全球性非营利性航空组织的宗旨是“基于全球性标准,为航空的安全、保障、高效和可持续性提供支持”,政府可以与它们联合起来,强制各家航空公司自动对乘客做出赔偿,因为这是法律规定的。当然,航空公司并不喜欢出现这种情况,但这是一个绝佳的例子,证明了区块链可以怎样颠覆某些现有的商业模型,并且相应地强化某些行为或者业务流程。
技术概念及框架
接下来我们深入了解一下区块链技术背后的技术概念及框架。区块链是用于为交易构建一套不可变的历史记录的协议和账本。对区块链的实现意味着:
区块链背后没有什么新技术,仅仅是将现有技术用一种新方式组合在了一起而已——如微软的以太坊博客文章里的FAQ部分所说:
一个名为区块链的数据结构被用作分布式后台数据库;
一个加密令牌,比如比特币协议中的比特币(Bitcoin,BTC),或以太坊用到的以太(ether,ETH);
用于发现和通信的对等网络(peer-to-peer,P2P);
一致性形成算法。请注意许多企业区块链并不和比特币一样,使用挖矿来达到一致性;
一台虚拟机,用于支持比特币中的可编程货币,以及在以太坊中完成程序的去中心化;
IBM的Bluemix文档中提到,“区块链组成了一个网络,在其之上各个成员跟踪并且交换资产,以及对所有交换行为的记录(账本),这些都会被复制给所有的参与成员。部署到区块链网络中的程序包含自动执行的合约,以及通过SDK或API与网络交互的客户端程序”。如图一所示:
区块链技术、框架和标准
现在已经有许多种不同的区块链技术了,它们之间可以按下面这些标准分类:
公有与私有(内部与合作伙伴);
已经采用的、新的和已经被淘汰的;
不同的特性(速度、安全、一致性算法等);
现在还没有大家都认可的区块链标准,但有些组织已经开始着手制定标准了:R3 Consortium是一家区块链技术公司,它领导着一个包括了45家财务公司的联盟,专注于在财务系统中对区块链的使用进行研发。智能合约联盟(Smart Contracts Alliance)也是刚刚由Chamber of Digital Commerce创建的,致力于成为智能合约方面的权威。
最近似乎有两种开放式区块链框架吸引了许多眼球:
Hyperledger:通过共同努力来推进区块链技术的发展,具体方式是为分布式账本识别和判断出重要特征,以此形成跨行业的开放式标准,改变在全球范围内进行商业交易的方式;
以太坊(Ethereum):一个运行智能合约的去中心化平台:应用程序可以以一种无宕机、无审查、无欺诈或第三方介入的方式进行编程。ConsenSys是以太坊背后的主要推动公司。
两套框架背后的理念不同,大概可以类比成IaaS和PaaS技术之间的区别。Hyperledger更多的是基础设施即服务,有些像公有云中的亚马逊网页服务(Amazon Web Services,AWS)或私有云的OpenStack。而以太坊则是平台即服务,可以类比为CloudFoundry或OpenShift。
区块链即服务
许多公司并不会为了区块链项目而完全自己构建自己的基础设施。他们会使用云服务,也就是所谓的区块链即服务(Blockchain as a Service,BaaS)。IBM和微软在这方面起着主导作用。他们基于开放式技术和框架在为开发和企业提供着云平台。他们提供的服务组合包括区块链和对他们其它云服务的整合。
IBM为区块链提供了Bluemix,它底层用的是Hyperledger项目。而微软在Azure上提供的区块链即服务用的是以太坊平台。另外,微软还和各种其它的区块链服务商结成了伙伴关系,包括Ripple、Eris、Coinprism和Factom等。
令人惊奇的是另外两大云服务商,亚马逊的AWS和谷歌的GCP(Google Cloud Platform)却没见到在区块链市场中有什么明显动作。谷歌投资了银行业的区块链技术初创公司Ripple。亚马逊没有为区块链提供什么专门的基础设施服务,只是通过它的市场提供了Eris。Eris是一个基于Docker和区块链技术的应用程序平台,支持各种不同的区块链框架。
区块链与中间件
区块链会不会是又一场炒作而已?每个人都会像使用网页浏览器或手机APP一样使用它吗?为什么它和中间件有关呢?答案很简单:“区块链会成为主力军,只不过是在各个场景的后台而已”。从许多业务用户的角度来看区块链和自己不会有什么关系,但对于许多分布式系统以及中间件来说,它却是底层的核心组件。设想一下区块链会怎样被用在企业的软件架构中,你就可以很快想明白它为什么和中间件有关了。关于中间件有两个主要挑战:
区块链架构没有中间节点,只有自依赖的对等网络。要与这个网络整合起来,你必须成为它的一部分,也就是说,你必须在你的系统里运行区块链客户端,或者集成一个。考虑到安全审计与治理的要求、分布式系统的概念、可信对端、区块链网络底层的公钥架构等等,这种整合的工作量并不小。
区块链每时每刻都在产生着新事件,附带着技术和业务信息,但却没有中心数据库。要处理这些区块链事件,你就要能够分析、关联和对这些事件做出响应。除了与区块链进行整合之外,你还要能够分析并将这些事件可视化,再把这些数据中携带的信息与其它非区块链网络中的数据关联起来。
因为存在着这些挑战,所以在真实的区块链项目中我们就必须利用许多关键的中间件功能:
实时地与许多不同的数据源进行整合,比如区块链客户端、各种不同后台(比如ERP、CRM、旧系统等)、云服务、合作伙伴的API、以及各种网关和API管理等;
组合各种不同的区块链;
在历史数据中进行数据发现活动,以找出洞察和某种模式,有时也要用上机器学习;
实时地将区块链和非区块链事件进行关联,有些场景也包括应用机器学习和分析模型;
在企业架构中对服务进行分辨和加密,以保证各个合作方之间的通信可以满足安全和治理需要;
咱们现在再来回顾一下上文中提到的航班延误赔偿的问题。航空协会将实现区块链基础设施,并且定义智能合约,在出现航班延误或取消的情况下,强迫航空公司对乘客进行赔偿。由于存在着许多区块链独有的概念和需求,航空公司在把区块链基础设施与他们自己的系统和流程整合的过程中,会面临许多挑战。
这时候中间件就派上用场了。它可以用来弱化或化解这些挑战,因为它存在的根本就在于将各种系统用不同技术、标准和通信协议连接起来。此外,中间件还可以通过事件关联和可视化来增强系统的智能,以此来满足监管需求,或者通过发现新的洞察(比如错误的流程、性能问题、恶意使用以及额外的机会)来创造附加值。
区块链和中间件的参考架构
图二展示了一个区块链和中间件的参考架构。
图二:区块链和中间件的参考架构
参考架构包括:
区块链网络的底层使用了各种不同的框架,比如Hyperledger、以太坊基础设施等;
云整合层包括了API管理功能,可以将区块链和其它系统或云服务集成起来。请参考“对进代应用程序集成架构的调查”,中间讲到了中间件集成可以使用的可选技术;
数据发现和可视化分析,加上大数据存储(比如Apache Hadoop)和机器学习框架(比如R、Apache Spark ML或H2O.ai等),可以在区块链和非区块链的历史数据中发现洞察和模式。而且,在把不同的数据源整合起来的过程中,你也经常可以发现许多非常有价值的洞察;
流式分析可以将不同的区块链和非区块链事件关联起来,实时地应用模式或分析模型;
现在网络上有各种各样的中间件可供使用:
Bletchley项目是一个微软实现的开源框架,支持区块链网络和其他应用程序的集成。它关注安全和治理的需求,因此包含了网关、鉴权、密钥和加密服务等功能,让非区块链客户端可以与区块链网络通信;
Interledger是一个轻量级区块链协议和集成框架,可以将区块链与其它的银行、Paypal或Skype等接口集成起来;
Software AG或TIBCO Software等中间件供应商已经可以提供集成、事件处理、流式分析、数据发现、可视化分析和机器学习等服务,这有助于将区块链事件与现有企业架构集成并关联起来;
一个在黑客马拉松上用以太坊和集成中间件实现的例子
接下来我们看一个在某次最近的黑客马拉松上实现的具体例子(见图三)。我们的目标是基于区块链基础架构实现一个投票APP,并利用中间件来与各种非区块链客户端进行集成。
我们选择用以太坊来实现区块链,因为现在看起来,它似乎与Hyperledger相比是“做应用开发的更加全面的平台”。不过从我作为一个开发者的角度来看,Hyperledger也有许多不错的特性,比如它是基于Docker的,自带提供REST接口,可以用Go做编程语言来实现智能合约而不必去学一种独特的智能合约语言……等等。总之,在真地建立起一套区块链基础设施之前,你非常有必要了解一下两者之间的优劣对比(还有其它的可用的选择)。
在以太坊上,你开发的是所谓的Dapp(decentralized app),也就是去中心化的APP,它包含两部分:一个前端(用HTML写成的网页APP,或者任意它支持的编程语言写成的别的客户端),和一个后端(可以把它当成是你的前端的数据库)。前端可以是区块链的一个端点,直接与后端进行通信。这样做有个非常大的好处,就是每个客户端都是可信区块链网络的一个完全的成员。这就是理想的区块链场景。不过,这样也让实现和部署这些客户端变得更加复杂:想想供应链管理或者物联网的场景就可以明白了。因此,另一个选择就是从一个完全的区块链端点“将信任传递”给中间件,这样只需要运行一个轻量级区块链客户端就够了,而不是一个完全的对端。我们把这两种选择结合起来,就有了完全的弹性。在一个真实场景中这也是有效的,就是让完全的客户端具备全部功能,另外所有人都可以通过中间件访问区块链网络,但却只能做一部分受限的事情。
现在我们再深入地了解一下这个项目。首先,我们在一个AWS EC2实例上安装并配置了一个以太坊Geth客户端(用作合约账户),来实现Dapp的后台。投票APP的业务逻辑是用Solidity实现的,这是一种用来定义智能合约的区块链语言。Solidity Browser是一个非常简单易用的网页IDE,有了它就可以更容易上手来实现新的智能合约。
中间件也是后端节点的一部分。它与以太坊Geth客户端整合在一起,对外提供REST服务接口。这样做极大地简化了使用方法,因为以太坊节点只提供了非常底层的JSON-RPC接口用于通信,只允许轻量级非区块链对端来与后台进行通信。我们也通过node.js实现了一个网页APP,用于为终端用户提供一个非常基本的网页用户接口。通常来说,实现一个侦听本机之外连接的RPC协议的以太坊节点是非常不好的实践,最好是在以太坊的后端相同的服务器上运行中间件。
我们用了Web3 JavaScript Ðapp API来与以太坊进行整合,但下一次可能会使用web3j或EtherumJ之类的Java区块链API;在企业架构中使用类型安全的Java来与中间件技术进行整合,而不是JavaScript之类的动态弱类型语言,这样做更容易也更顺畅。
我们实现了两种前端。第一种是Dapp的全量版。这是另一种以太坊节点(也就是说,这是区块链网络中的一个完全端点),它也是通过Geth客户端(作为外部拥有的账户,Externally Owned Account, EOA)实现的,运行在我们的笔记本电脑上。这些客户端可以直接与Dapp的后台节点相通信,智能合约就部署在后端。这个项目里只用了Geth客户端(Go客户端),你也可以在你的项目中使用各种其它类型的以太坊客户端,比如cpp-ethereum(C++客户端),pyethapp(Python客户端)或者运行着Dapp的以太坊浏览器Mist,就像你正在用普通的浏览器访问一个普通网站一样。不过,你更应该把Mist看成是一个工作台,而不是浏览器。注意即使投票APP有前台和后台,区块链仍然是对等的。可以读读关于以太坊客户端更进一步的解释来理解更多细节。
另外,在我们的黑客马拉松项目中我们用了前端用户的笔记本电脑来进行挖掘,以产生Ether(用于支付区块链交易,在这个项目中是用于投票的票)。这是因为我们缺少硬件而采取的另一个“不好的实践”——也是使用有单独的挖掘节点的BaaS服务的另一个好理由。
另一个网页App就不是完全的区块链节点了,它通过中间件与区块链后台通信。我猜这是大多数公司在他们的项目中最想做的事(我说的不是像比特币一样的全球规模的项目,而是一些合作商之间的区块链),因为在客户一侧的完全的区块链节点总是要做出许多权衡。
因为项目的业务逻辑非常简单,我们的目的就只在于展示如何把集成中间件用于区块链项目:
通过集成层来对外提供REST API(在我们的例子中用了TIBCO BusinessWorks Container Edition,这是一个基于云的平台无关的中间件),而不是通过更复杂的区块链API。当然,对于区块链要求的安全和治理需求也是要满足的(即哪些用户可以访问哪些区块链API和数据)。
将区块链端点与各种其它技术结合起来,包括同步网页服务(REST、SOAP)、异步消息(JMS、MQTT)、SaaS产品(Salesforce、Marketo)以及现有系统(ERP、Mainfrae)。注意集成并不仅仅意味着连接,也意味着其它的关键整合需求,比如企业级、故障转移、协议转换、错误处理,以及使用Enterprise Integration Patterns或Service Compensation之类的设计模式等。
接管第三方客户端在通信中的受信义务,隐藏区块链安全和治理需求的复杂度。
因为每个以太坊交易都要消耗计算资源(即挖掘)和以太(即Ether,以太坊中的货币),所以要通过分流和缓存的办法来限制对区块链的服务调用。
我们接下来会做这些事,来改进终端用户的区块链体验:
使用区块链Java API来构建以太坊连接器,而不是JavaScrip API。集成中间件的好处在于你只需要构建连接器一次,然后在你的编辑器里重用就好了,再也不必重复开发代码来将以太坊与其它技术连接起来,或者应用集成模式;
在集成层之上增加API管理功能,来通过用户友好的开发者入口暴露API。API提供者可以配置服务级的协议,以及现有的区块链API的铸币过程。如果现有的软件供应商支持对现有集成层的直接集成,那这事很容易完成;
将数据可视化,来获得对区块链通信、区块链用户的行业及智能合约的洞察。这样做可以优化业务逻辑(考虑一下欺诈检测或其它预测行为)。通过流式分析进行关联可能会实时地将这些新洞察应用于新的区块链事件;
最后,我们还想通过建立一套Hyperledger区块链基础设施(作为一个云服务)的方法来改进这个黑客马拉松项目,再从两种不同的区块链技术中整合并关联数据。尽管有些区块链供应商的愿景是有一套单一但是全面的区块链,我认为比较可行并且更好的将来,是不同的区块链基础设施并存,用于不同的用例,比如有公共的支付区块链(比如比特币),也有私有区块链(比如用于物联网或在合作商之间的供应链管理的智能合约)。
区块链会颠覆现有企业解决方案,中间件是成功的关键
区块链不是什么新东西,只不过是若干种已有技术的结合使得颠覆成为了可能而已。比特币只是冰山的一角。区块链的用途远不止于金融交易,各种不同行业都会有所相关。下一个主要采用区块链技术的行业可能是物联网,具体方式是在伙伴之间实现自动化智能合约。区块链即服务可以让大家快速采用区块链技术,用快速试错的方法来验证想法和初创项目等。
在企业架构中区块链获得成功的一个关键因素就是中间件。你需要实时地把区块链与区块链,以及许多其它系统集成起来,要用到各种不同的技术及通信协议。在真实的项目中,区块链还要用到许多中间件功能,比如数据发现、事件关联、API管理、安全审计及治理等。
如果你想参与到当今最令人激动和最具颠覆性的技术中来,开始你的区块链之旅,我建议你先看看最开始的那个视频:“区块链——中间件的下一件大事”,在里面用更多的图表和细节解释了这篇文章的内容。然后,你可以先从在BaaS云服务上搭建起自己的区块链基础设施开始入手,这是因为从头开始搭建全部东西又复杂又容易出错。现在用于区块链技术的工具和IDE也都刚刚成熟。对于新手来说,像Solidity Browser之类的简单的网页工具也是很有帮助的。接下来就是搭建起你自己的区块链基础设施,实现和部署一些最初的智能合约,然后把它与你的常用开发环境集成在一起,构建起流水线了。
作者介绍
Kai Wähner,一位技术的传教士,也是TIBCO Software的社区负责人,这是一个集成和分析型中间件的龙头企业。他的主要经验在于大数据、高级分析、机器学习、集成、SOA、微服务、BPM、云、物联网和Java EE、Groovy及Golang等编程语言。他会经常在他的博客上发表一些关于新技术的文章,及会议记录等。
CIO之家 www.ciozj.com 公众号:imciow