当今时代,令人激动不已的新技术层出不穷。每个人都在谈论着云、容器、大数据和机器学习。另一个新热点就是区块链。可能你已经听说过区块链,知道它是实现了 比特币 的底层技术。但实际上,比特币只展现出了冰山的一角。本文讨论了区块链背后的用例和技术概念,简单介绍了已有的服务,并且说明了为什么中间件是在这个领域内获得成功的关键。
截止到2016年7月11日,在线市场中已经有超过 700种 在交易中的加密货币了,但只有 9种的市场估值超过了1000万美元 。一个新名词也由此而生:山寨币(Altcoin,“Bitcoin Alternatives”,意思是“比特币的替代品”)。但事实上,山寨币与区块链并不一样,它只不过是金融交易的另一种替代品而已。
区块链是加密货币底下的一层,它的主题是关于“ 在商务网络内对资产的传输 ”。区块链技术使得在交易伙伴以及公众用户之间创建一个安全的、可信的、对等的网络成为可能,从而可以构建任意分布式商业应用。
因此,区块链的用途远不限于经济交易领域。下面是一些例子:
那么,为什么我们不能满足于已有软件和应用程序的现状,而必须关注区块链技术呢?我们已经有了Uber、Ebay,以及在SCM和IoT领域内的若干家公司了,不是吗?仔细考虑考虑下面几方面内容,就可以理解为什么区块链可能成为行业的颠覆者了:
接下来我们看一个例子,这种颠覆是怎样深刻地改变一个行业的:航空运输业中在航班延误或取消的情况下对乘客的赔偿。在许多国家里,当航班延误时乘客是有权要求一定数额的赔偿的。在欧洲,假如航班延误超过了三小时,每位乘客可以索取最高600欧元的赔偿。可是,航空公司不会也不必主动进行赔偿,你必须先索赔,通常还要在律师的帮助下进行。因此,许多乘客直接就放弃索赔了。
但在由区块链支撑的系统中,智能合约就可以非常安全地自动处理这样的事情了。国际航空运输协会(International Air Transport Association, IATA )之类的全球性非营利性航空组织的宗旨是“基于全球性标准,为航空的安全、保障、高效和可持续性提供支持”,政府可以与它们联合起来,强制各家航空公司自动对乘客做出赔偿,因为这是法律规定的。当然,航空公司并不喜欢出现这种情况,但这是一个绝佳的例子,证明了区块链可以怎样颠覆某些现有的商业模型,并且相应地强化某些行为或者业务流程。
接下来我们深入了解一下区块链技术背后的技术概念及框架。区块链是用于为交易构建一套不可变的历史记录的协议和账本。 对区块链的实现意味着 :
区块链背后没有什么新技术,仅仅是将现有技术用一种新方式组合在了一起而已——如微软的以太坊博客文章里的 FAQ 部分所说:
IBM的Bluemix文档中提到,“ 区块链组成了一个网络 ,在其之上各个成员跟踪并且交换资产,以及对所有交换行为的记录(账本),这些都会被复制给所有的参与成员。部署到区块链网络中的程序包含自动执行的合约,以及通过SDK或API与网络交互的客户端程序”。如图一所示:
(点击放大图像)
图一:一个区块链网络(内容取自 IBM )
现在已经有许多种不同的区块链技术了,它们之间可以按下面这些标准分类:
现在还没有大家都认可的区块链标准,但有些组织已经开始着手制定标准了: R3 Consortium 是一家区块链技术公司,它领导着一个包括了45家财务公司的联盟,专注于在财务系统中对区块链的使用进行研发。智能合约联盟( Smart Contracts Alliance )也是刚刚由Chamber of Digital Commerce创建的,致力于成为智能合约方面的权威。
最近似乎有两种开放式区块链框架吸引了许多眼球:
两套框架背后的理念不同,大概可以类比成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一样使用它吗?为什么它和中间件有关呢?答案很简单:“ 区块链会成为主力军,只不过是在各个场景的后台而已 ”。从许多业务用户的角度来看区块链和自己不会有什么关系,但对于许多分布式系统以及中间件来说,它却是底层的核心组件。设想一下区块链会怎样被用在企业的软件架构中,你就可以很快想明白它为什么和中间件有关了。关于中间件有两个主要挑战:
因为存在着这些挑战,所以在真实的区块链项目中我们就必须利用许多关键的中间件功能:
咱们现在再来回顾一下上文中提到的航班延误赔偿的问题。航空协会将实现区块链基础设施,并且定义智能合约,在出现航班延误或取消的情况下,强迫航空公司对乘客进行赔偿。由于存在着许多区块链独有的概念和需求,航空公司在把区块链基础设施与他们自己的系统和流程整合的过程中,会面临许多挑战。
这时候中间件就派上用场了。它可以用来弱化或化解这些挑战,因为它存在的根本就在于将各种系统用不同技术、标准和通信协议连接起来。此外,中间件还可以通过事件关联和可视化来增强系统的智能,以此来满足监管需求,或者通过发现新的洞察(比如错误的流程、性能问题、恶意使用以及额外的机会)来创造附加值。
图二展示了一个区块链和中间件的参考架构。
(点击放大图像)
图二:区块链和中间件的参考架构
参考架构包括:
现在网络上有各种各样的中间件可供使用:
接下来我们看一个在某次最近的黑客马拉松上实现的具体例子(见图三)。我们的目标是基于区块链基础架构实现一个投票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之类的动态弱类型语言,这样做更容易也更顺畅。
(点击放大图像)
图三:用区块链端点和集成中间件来实现投票APP的架构
我们实现了两种前端。第一种是Dapp的全量版。这是另一种以太坊节点(也就是说,这是区块链网络中的一个完全端点),它也是通过Geth客户端(作为外部拥有的账户,Externally Owned Account, EOA)实现的,运行在我们的笔记本电脑上。这些客户端可以直接与Dapp的后台节点相通信,智能合约就部署在后端。这个项目里只用了Geth客户端(Go客户端),你也可以在你的项目中使用各种其它类型的以太坊客户端,比如 cpp-ethereum (C++客户端), pyethapp (Python客户端)或者运行着Dapp的以太坊浏览器 Mist ,就像你正在用普通的浏览器访问一个普通网站一样。不过,你更应该把Mist看成是一个工作台,而不是浏览器。注意即使投票APP有前台和后台,区块链仍然是对等的。可以读读 关于以太坊客户端更进一步的解释 来理解更多细节。
另外,在我们的黑客马拉松项目中我们用了前端用户的笔记本电脑来进行挖掘,以产生Ether(用于支付区块链交易,在这个项目中是用于投票的票)。这是因为我们缺少硬件而采取的另一个“不好的实践”——也是使用有单独的挖掘节点的BaaS服务的另一个好理由。
另一个网页App就不是完全的区块链节点了,它通过中间件与区块链后台通信。我猜这是大多数公司在他们的项目中最想做的事(我说的不是像比特币一样的全球规模的项目,而是一些合作商之间的区块链),因为在客户一侧的完全的区块链节点总是要做出许多权衡。
因为项目的业务逻辑非常简单,我们的目的就只在于展示如何把集成中间件用于区块链项目:
我们接下来会做这些事,来改进终端用户的区块链体验:
区块链不是什么新东西,只不过是若干种已有技术的结合使得颠覆成为了可能而已。比特币只是冰山的一角。区块链的用途远不止于金融交易,各种不同行业都会有所相关。下一个主要采用区块链技术的行业可能是物联网,具体方式是在伙伴之间实现自动化智能合约。区块链即服务可以让大家快速采用区块链技术,用快速试错的方法来验证想法和初创项目等。
在企业架构中区块链获得成功的一个关键因素就是中间件。你需要实时地把区块链与区块链,以及许多其它系统集成起来,要用到各种不同的技术及通信协议。在真实的项目中,区块链还要用到许多中间件功能,比如数据发现、事件关联、API管理、安全审计及治理等。
如果你想参与到当今最令人激动和最具颠覆性的技术中来,开始你的区块链之旅,我建议你先看看这个视频:“ 区块链——中间件的下一件大事 ”,在里面用更多的图表和细节解释了这篇文章的内容。然后,你可以先从在BaaS云服务上搭建起自己的区块链基础设施开始入手,这是因为从头开始搭建全部东西又复杂又容易出错。现在用于区块链技术的工具和IDE也都刚刚成熟。对于新手来说,像Solidity Browser之类的简单的网页工具也是很有帮助的。接下来就是搭建起你自己的区块链基础设施,实现和部署一些最初的智能合约,然后把它与你的常用开发环境集成在一起,构建起流水线了。
Kai Wähner 是一位技术的传教士,也是TIBCO Software的社区负责人,这是一个集成和分析型中间件的龙头企业。他的主要经验在于大数据、高级分析、机器学习、集成、SOA、微服务、BPM、云、物联网和Java EE、Groovy及Golang等编程语言。他会经常在他的 博客 上发表一些关于新技术的文章,及会议记录等。
阅读英文原文: Blockchain – The Next Big Thing for Middleware