微众银行张开翔:联盟链兼顾创新与稳定性,技术开源能更好的发展生态(附全文)
摘要:他提出微众银行“3+2”的联盟链技术路径主张。
文 | 李嘉轩
火星财经APP一线报道,12月20日,在由CSDN主办的「2019中国区块链开发者大会」上,微众银行区块链首席架构师张开翔发表题为《微众银行区块链开源技术探索和社区生态建设》的主题演讲。
张开翔提出微众银行“3+2”的联盟链技术路径主张。“3”指合规、安全、稳定;“2”指易用友好及高性能。
“银行做任何事情都要合规,金融业是强监管行业,选择兼顾创新和稳定的路线 ,区块链分联盟链和私链,私链没太大意义,公链不适合,联盟链是最务实的选择。”张开翔表示,区块链技术和运作达到合规、安全和稳定这三点,才能满足金融业务以及广泛产业的需求,易用优化且高性能都属于加分项。他强调,这个次序是兼顾创新和稳定性的,不能倒过来。
以下为演讲全文:
非常感谢CSDN的邀请,感觉跟回家了一样,我工作了20年,注册CSDN已经19年了,2000、2001年那时我刚毕业不久,可说是一无所有,一个人到深圳 ,所幸有CSDN的论坛和朋友们帮我度过职业生涯起步的那几年,我在CSDN学习、交流,对于我来说,CSDN就是我的同行交友网站,当时的很多朋友现在还在保持联系,CSDN的氛围真的非常好。时间过得很快,有些东西变了,但有些东西还没变,我还是个程序员,还是个搞技术的,头发还跟20年前差不多,这是作为程序员还挺成功的一件事情:)。
今天讲的题目有点长,其实就三句话:我来自微众银行,我们研究技术,然后开源了。微众银行是中国第一家互联网银行,完全是在线上服务,,科技人员占了银行人数一半以上,这在金融业是很特别的,而且金融业人士像我这样出来不穿西装的也不多,比较互联网范儿,这也是微众银行的一个特点。
因为我们的业务需要在线上广泛和普惠的服务个人用户和小微企业,触达大量场景,例如,贷款、理财、车和出行,我们要连接各种各样的生态合作伙伴,所以生态开放、技术开源是我们必然的选择,研究具备很强的连接性和开放性的区块链技术是理所当然的。这个过程很长,我研究区块链是从2015年开始的,之前我在腾讯工作了差不多10年。
2015年到现在,首先参与联盟链底层技术平台FISCO BCOS的开发,目前已经相当好用了。但刚才有老师说到,当下大家更关注区块链技术怎么落地应用,在应用和底层之间需要构建一个桥梁。于是我们发布了一系列的开源解决方案,其中,消息协作是面向物联网的,未来5G是趋势和潮流,面向高速网络的物联网怎么上链?要解决一系列设备适配、消息传输、复杂的网络拓扑结构以及期间的安全问题,我们提供WeEvent基于事件消息的框架解决物联网的接入问题。还有WeBASE中间件,怎么理解这个组件呢?技术底层是黑盒子,WeBASE中间件可以面向程序员和用户降低使用门槛,甚至做到连文科生都能用区块链,就像用鼠标和键盘操作交互式网页一样访问区块链。程序员接入区块链,只需写一个API,通过接口接入,相当的轻松。WeCross跨链和WeDPR隐私保护也是适应发展趋势的方案。基于这些底层加一系列方案,我们可以快速支撑各种各样的业务应用。
今年我在全国出差接近100天,讲了无数场,讲过很多趋势、政策、应用的内容,今天面向开发者们,我可以好好讲讲技术、讲讲开源 。
开源不是把代码丢出去就完事了,它首先是个生态,开源社区里有各种各样的人,人有不同的需求、对系统有不同的诉求,引用经典的马斯洛需求层次的理论,人的基本需求是要活着、要吃好、要生存,那么对开源项目来说首先要稳定、高性能、功能全、文档可读,这是最基本的。然后是安全感,如果开发团队不能保证持续投入和敏捷更新,社区不活跃,用户就没有安全感,用户会有疑问:这个东西半年、一年后还能不能用?第三,生态,如果开源社区不活跃,有人问问题却没有人回答,这样是有问题的。我为什么是CSDN的用户,我在CSDN上可以搜到问题的答案,我问的问题、发了帖,一定有人答,每个板都非常热闹。用户需要活跃的、热烈的、能够互助的生态,而且这个生态是互相尊重的,开发者因为技术贡献而得到尊重,而不是给他钱,当然,给物质回报也可以,但是开发者会更看重精神上的东西。最后,还是要回到产业,产业会有商业因素,投入要有回馈,否则是不可持续的。
说到产业,我们作为银行人,做任何事情都要合规,毕竟金融行业是强监管行业。衡量之下,我们选择兼顾创新和稳定的路线,联盟链是最合适的选择。我们首先要做到合规、安全和稳定这三点,才能满足金融业务以及广泛产业对区块链的需求,安全是金融的生命线,不能保证安全就是一票否决,而稳定性要求很苛刻,达到99.999%的可用,即系统故障时间一年不能超过几分钟。易用友好且高性能算是加分项,所以次序是先保证前面的三个(合规、安全、稳定),再发展后面的两个(易用友好、高性能)。
怎么理解加分项之一:开源软件的体验?我比喻一下,作为开源软件初创者、第一作者,就像父母对孩子一样,孩子长大了,把孩子送出去,开源就是这样,只要发布代码到GitHub上,这个项目就不只是你自己的,它是社区的,你也许不能护送他一生,但是可以要求他稍微穿得好一点,待人接物礼貌一点,有问必答、有责任感,这是做人的基本要素。所以区块链开源软件首先得做到代码风格很优雅,我曾经被人吐槽过,2017年刚开始做FISCO BCOS的时候被人说代码很烂,现在看来…嗯,确实有点烂,但是现在我们把它做优雅了;我们对代码风格和质量有严格的检查,有20多万字的文档。程序员写代码很嗨,写文档很痛苦,好不容易写了10万字,一个谷歌的博士过来了,看了说这不行,又重新做了一版,代码和文档都是项目的风格,既要内涵又要脸面。所谓手感就是这个软件你操作起来爽不爽,每个输入是不是立刻有清晰到位的反馈,链搭建过程是不是愉快,用起来是不是很顺畅,开发体验、调试体验是不是够好,这是对开发者和用户的尊重,我们认为这是基本要求。
我们思考开源软件“完备性”时有个角度是从角色出发,我2005年就在CSDN上发过一篇文章是“从角色出发”,当时我已经开始建立个人对软件的世界观,到现在来看依旧没太大变化,我认为软件是给人用的,开源软件尤其区块链牵涉无数角色,我们要为这些角色打造顺手的产品,从安装到开发到运维到应用,以最后的监管审计为终。我们的一个架构师提出了“15分钟原则”:如果一个开发者从接触到你的开源软件开始计算,15分钟还没从GitHub上拉取到这个软件、安装跑起来,这个用户可能就会流失。然后,要求这个软件要能够快速学习入门,要有全面的文档教程,开发起来很方便,维护起来不那么痛苦,至少不要影响夜生活,否则每天晚上报警还是挺麻烦的。
除了易用好用外,区块链还有很多诉求:
1.节点数多。现阶段如果一个联盟链能建起100多节点的网络,其实就了不起了,但是未来联盟链是要遍布全国甚至全球的,上千上万的节点都是有可能的,比如目前比特币的节点已经上万,我们要从网络拓扑和共识算法等层面解决网络规模问题。
2.数据量大。之前区块链是探索阶段,起步期的业务流量不太大,人们可能不太关注数据量,但目前越来越多应用跑了一年两年,很多伙伴已经遇到了数据量的瓶颈或者挑战。我们提供了大量的工具和策略,使得数据可以按照时间分割、按照用户分片,能引入大数据和数据仓库的方案,以解决数据量的容量问题。
3.带宽要省。其实这是分布式网络业务的痛点,目前带宽蛮贵的,大家可以看看买2兆和买10兆价格差多少(接近10倍多),如果是专线更贵,而200G硬盘和1T硬盘价格差距就没这么大。分布式网络要频繁的同步区块交易等等信息,消耗的就是带宽,影响性能最严重的一个环节也是带宽。所以我们会极致的优化协议包,同步频率以及同步内容,为用户省带宽。
4.保护隐私,这是毋庸置疑的,后面展开介绍。
面对这么多诉求,我们怎么优化呢?有两个方向,一个是ScaleUP(向上扩展),即机器的CPU、内存、硬盘IO跑满,但是一个机器性能终究是有限的。如果要服务海量用户,ScaleOUT是一定要做到的,这就是平行扩容。其实区块链架构的性能优化跟其他优化没有什么区别,我们2018年做了一次代码重构,当时我们内部有些争议和路线的磋商,有人说重构为主,迭代升级,而处女座的架构师表示实在看不下去,要重写,最后我们达成了共识,优先重用原来可用的模块,但是把它解耦、模块化,面向接口编程。同步功能、虚拟机、共识机制都是模块,把这些模块灵活的组合起来,拒绝意大利面条式编程,做到模块隔离、低耦合、高内聚,基于模块化架构做并行化,一个个模块像个小积木,可以放到多线程多进程里跑,可以给它设计各种并行策略,看情况使用乐观锁悲观锁,非常容易的组合起来,同时做到交易并行计算、共识并行处理、网络并行传输和编解码。最后一点,使用数据高速缓存,区块链有个特点,数据一旦生成,历史数据就不会再改,只会新增,我们有很多办法把一些热点的历史数据,比如刚刚产生的仓单或者存证,放在内存里。这要有些策略和技巧,怎么识别哪些是“热”的或“冷”的,怎么做LRU(最近最少使用算法)、怎么分配缓存大小。经过优化,TPS可以从千级提升到万级。
但是这还不够,区块链业务的性能和事务指标很明确,受带宽等因素影响很严重,我们也给自己提了很苛刻的要求,我们要求交易具备极强的事务性,一旦产生完成就不会再回滚、不会再分岔,而且我们强调一定是单链,采用智能合约跑实际业务逻辑的性能,不能空跑的、也不是多链的。同时,并发事务的正确性是可验证的,如果结果是错的当然没有意义,尤其金融的帐目。所以在单链且保持快速响应、正确、稳妥的情况下,我们做到接近3万TPS,目前来看还可以够用,我们一般不会和双11瞬间十几二十万的TPS相比,区块链的意义是服务于多方共识的、核心的、高价值的交易。金融里中等或者高负载的业务大概是几千左右TPS。其实这跟我以前在腾讯做海量业务已经不太一样了,互联网业务上线有千万用户,在线十万TPS都是常见的。
说到腾讯,我们跟互联网对比一下海量服务架构,一个互联网业务如果面向千万级、亿级用户怎么做?很简单,分层分片、分库分表,把架构分分层,用各种中间件和框架把用户的请求按路由分发、负载均衡到不同的服务上,每个服务是无状态的,每个服务只做一件事情,服务和服务间不用校验互相的信任性,因为这些服务都在一个公司内部,这是典型的一个互联网的架构,如果各位现在有做网站、做APP的,这套应该都是比较熟悉的,我自己做这套东西差不多十几年。但是在做区块链时,你的观念就要变了,因为在之前模型里你是面向公司内部系统编程,无论分多少层多少片,它都在公司内部,但是区块链每个节点都跑在不同的机构、不同的主体、不同的地域里,这样的开源软件尤其是区块链软件,当你把它发布出去,它真的不是你的了,它跑在别人的机房里,你想跟别人要个详细日志,人家都未必会给你,你只有通过信任模型的判断、节点连接判断、共识状态判断这个网络是不是健康的活着,而且每个节点可能存了全量数据,目前比特币、以太坊都是这样子的,大家参与共识,互相验证,互不信任。
如果我想模仿互联网公司的海量服务的分散、丰富的架构怎么办?首先看看多链。是一个机构接入了一个业务一条链, 假定1万TPS还是不够,那就再建一条链变成2万TPS,有1000条链是不是就变成1000万TPS了。但问题在于,这样一定会占用大量资源,每个区块链节点都会存所有的数据,这其实是个很严重的问题,它可能在一开始看起来还挺美的,慢慢的就太重了。运维也挺头疼的,每条链都要占用几个网络端口,要开黑白名单,要配置安全策略,都挺头疼的。
我们现在的研究方向是灵活分解,能够分群、分组、分片。目前有行业通常说的Layer2,侧链,都是很好的方案,我们也考虑未来物联网接入,物联网会有很强的地域特性,它强调边缘计算,一个小区、一个加油站附近就是边缘,数据要在这里面达成共识,然后再上到上面一层。所以要考虑怎么能够把区块链上的记账者、数据同步、网络结构灵活组合在一个地域、一个场景里面。
在商业场还有一个挑战,就是A跟B交易,不能让C知道,这是商业隐私的考虑,是非常常见的诉求。现在我们有群组架构,做到像拉群一样组建商业关系,大家都在联盟里参与一个大业务,但某些交易只跟其中一些人相关,可以通过链上拉个小群把这些交易共识,同时也可以在链上进行全局的验证,群组结构是基于我们架构优化的成果,各组件进行模块化、高内聚、解耦合,能灵活组合一系列分层分组的关系。其实商业协作是非常复杂的,商业的关系会有利益纠葛、得失搏弈,极其复杂,我们需要更灵活的架构。
当有了分片、分组、分链的架构之后,在未来一定有个诉求叫“跨链”,这条链做存证业务,那条链做供应链业务,供应链的仓单要在这条链做存证,怎么办?跨链是个解决方案。跨链的基础逻辑是让这条链相信那条链,同步那条链所有的核心状态信息,验证交易和结果是否存在和是否正确,用SPV、HASH时间锁等算法来证明和资产交换,还有一些零知识证明方法。链内达成信任本来已经很难,链和链之间的信任难度是信任的平方,为了降低跨链的实现成本,我们会发布易用高效的跨链组件,主旨是抽象共同接口,大家只要符合接口通过用约定就可以对接起来。
再回到隐私问题,我是谁?我住哪?我手机号是多少?这是我的资产信息,然后,每天做了多少笔交易在比特币上是完全公开的,而大家想象下,有的事务要求拿你的银行流水去办,你想不想让别人知道你的交易细节?希望不希望接收者基于明细对你做行为画像?其实这是现在商业社会每天都在做的事情,存在并不完全合理。隐私的保护不仅仅是个技术问题,也是一个管理问题,它是一系列的策略和管理手段的组合。
我们针对隐私的方案是独立的模块,它可以跟区块链有关,也可以不跟区块链有关,只要是多方协作的系统,都遇到严峻的隐私问题。我们的WeDPR,就是为了解决大量网络服务、商业服务都会面临的问题。我们的目标是利用一系列的技术组合,对数据加密、多样化的签名以及引入零知识证明,使得身份可以加密、账可以加密,加密后还可以运算验证,在会计规则上转账后双方总额是一样的,账是平的。在社会治理场景,比如一个人投票给了某某,零知识证明可以做到在不透露他的身份和他投票给谁的前提下,认证他这个投票是有效的是符合规则的。整体来看有点一个高强度的算法游戏,需要评估的不仅仅是性能,还要评估它是否有事先设定,比如可能有一个长老掌握了密钥,还有需要不需要繁琐的交互、可不可以硬件加速。我们致力于打造一套透明可信、合规可管、易用可控、集成友好的隐私保护策略,以支持大量分布式商业的场景。
区块链包含的东西还有很多,比如共识模块、网络协议、身份权限、治理模型..这些我们都会完全开放开源,希望跟行业合作伙伴一起对接,区块链自己运作没意义,我们认为开源是基本面,大家互联互通形成一个大生态才是未来。
既然区块链有这么多技术要素,怎么来学习呢?这最先是我内部培训的一张图:往下沉可能是技术专家路线,研究细致的技术,包括算法、数学、编译器、计算机体系,我们内部有这样一组做底层的技术专家;同时,区块链一定要在商业中应用起来,所以要有人写智能合约,他们要理解商业流程,理解金融领域的会计、支付等这些知识,更重要的是他们应该懂搏弈论、懂社会学、懂经济学,这都是能够解决商业问题的重要因素,这方面人才也非常缺;编程语言呢?大家都是开发者,当然同意PHP是最好的语言嘛?其实极客世界比较倾向选择新的语言,比如Go、Rust、和Haskell什么的, 我们主打C++和Java,也有各种语言的开发工具实现。
前面那张图有那么多框框,怎么选?这是我给创业公司做的一个参考,有些创业公司会顾虑在区块链上探索所投入的成本,其实有开源软件的前提下做区块链应用非常简单,最快3天就可以做出来,投入的人力精力更多是业务层面,一个业务架构除了区块链可能还有AI、大数据、物联网,首先理顺这些业务流程,然后生成的数据锚定在区块链上,剩下的无非写个智能合约,调一下SDK的事情。
这是我最近写给业界新人的文章,你要做区块链技术,首先得是个合格的程序员或者合格的系统管理员,然后学习一些区块链特有的知识,在网络上找或者读开源项目文档都可以学到。最近几篇文章都是科普风格,感谢区块链大本营头条发布,一篇是讲区块链世界里不能信什么?我深入剖析了信任从哪来,你必须验证才能信任。再一篇是进阶必读,把里面的秘密都列出来了,可以坐地起飞的去学习区块链。
发展开源社区是我们这两年一直做的事情,我今年出差接近100天,我们的团队遍布12个城市,给全国高校以及产业讲课超过400课时,面对面的超过1小时的实操和原理课程,影响覆盖人数超过了5000人。我们很用心在线上线下让更多人了解区块链。现在真的找回了在CSDN论坛抢技术分的感觉,当微信群里用户抛出一个问题,我比我的同事先一步回答问题就会很开心,我可以证明现在我还能写代码、懂技术。对行业的效益呢,如果从头开发区块链底层以及一系列配套的东西可能需要3年,这是一个客观的数字,因为我真的做了3、4年,从2015年到现在,包括研究、开源。而目前只要用一个开源软件,可以把时间从3年缩短到3天,你可以有更多时间去获得市场机会,去做运营,做优化。
我们这几年也做了很多应用,取得了一些成绩,目前也加入了“国家队”,成为加入BSN的首个国产联盟链底层平台,作为开源的安全可控的区块链平台,支撑国家队的区块链网络运营。同时最让我欣慰的是很多应用从社区冒出来了,社区合作伙伴有自己的团队,他们有工业、税务、版权、农业等垂直领域的经验,只需要开源区块链方案加持,就可以服务好产业,区块链生态是大家一起打造的,生态壮大了,我们作为银行从业人士,也有机会发展金融服务,所以,生态发展起来对大家有长远的意义。
我们努力的方向,总结起来三点:
1.技术过硬。区块链技术研究也是这样的。
2.广泛开源。广结善缘,一起把生态做大。
3.善良规范。为什么我们要坚持合规?因为我们做的事情都是关于国计民生、服务实体领域的,关系到别人身家性命的事情,所以我们要善良,要规范,要追求持续良性的发展。
谢谢大家!