美文网首页区块链
区块链开发的 DevOps 实践初探

区块链开发的 DevOps 实践初探

作者: TheAris | 来源:发表于2019-06-25 19:51 被阅读0次

    摘要:本文首先对区块链技术和 DevOps 进行了介绍。在此基础上,对比分析了传统的区块链开发流程和现代化工具对区块链开发的帮助。同时也推荐在进行区块链项目开发时,能够积极采用 Truffle 等现代化的开发框架,自动化部分开发流程,提高开发效率。

    区块链已然是当今最热门的技术之一了,与此同时,DevOps 理念也越来越获得各大公司的认可并逐渐开始实施转型了。就两者来说,区块链技术具有去中心化、匿名隐私性、记录的不可篡改等特点,而在 DevOps 理念支持下的公司则通常拥有高效组织的团队,并且通常能够通过自动化的工具进行协作和沟通,从而能够更快、更好的交付稳定的软件以产生价值。这么来看,区块链技术和 DevOps 彼此都具有较大的特点和相当的优势,但可能由于区块链项目相对于传统交付项目的特殊性,对于区块链项目的 DevOps 实践却鲜有人提及。那么,若能够较好地在区块链项目中实践 DevOps,会遇到哪些挑战和机会呢。

    首先,我们先来重温一下区块链技术和 DevOps 分别是什么。

    区块链

    图片来源于网络

    简单来说,区块链是一个去中心化的账本,由“区块”和“链”组成。区块用来存储信息,且是不可变的,区块内部存储的信息无法被修改。

    “区块”由区块头和区块体组成。区块头拥有固定的格式信息,比如:当前区块产生的时间戳、上一个区块的地址、当前区块的地址、区块大小等信息。区块体用来存储相关的业务数据,比如:A 向 B 转了 100 元钱、或者像创世区块那样,中本聪存入了当天的头条新闻标题。

    “链”是各个区块的组织形式,各个区块的区块头中都会存有上一个区块的地址,因此通过每一个区块中存储的上一个区块地址就可以将多个区块链接起来,形成区块链。不过第一个区块就不会有上一个区块地址,也被称为创世区块。

    简明区块链结构

    因此,在这样的结构下,区块链具有了以下特征:

    • 去中心化:区块链网络是基于 P2P 连接的分布式网络,多数情况下任何实体都可以很方便的在该网络中创建一个节点。且该区块链网络中所有节点拥有的权利和义务都是相同的,任一节点停止工作或退出网络都不会影响到系统的整体运行。
    • 匿名可追溯:虽然全世界都在找中本聪的身份,但始终没有答案。在公有的区块链网络中,只要有一把私钥就可以创建一个身份,无需中心机构进行认证和授权即可参与到网络中来。区块链中每一个区块的内容是不可变的,且当前区块的地址是由之前区块地址等一系列数据计算得来的,也就是说,如果修改了区块中的内容,便无法再次计算出正确的区块地址,只会产生一个新的区块。而区块链另一个特点就是它会在尽可能短的时间内保证最新的区块被确认并添加至区块链网络中,从而保证网络中各个节点存储的信息一致且不分叉,这其中的一个关键流程就是共识。
    • 节点之间无需信任:由于这是一个去中心化的网络,没有任何的中间机构的背书,且整个系统的运作都是公开透明的。在该区块链网络的上下文内,节点之间无法彼此欺骗,因此凭着对区块链技术本身的信任,在网络中的任何节点之间是不需要其他信任就可以进行交易的。
    • 可靠性:如果将区块链看做是一个分布式数据库的话,那么它就是一个可靠的数据库,因为在该网络中任何一个节点都拥有最新的完整的数据拷贝,且在共识机制的影响下,若仅修改单个节点的数据也是无效的。

    DevOps

    随着公司内项目的规模和复杂度逐渐变大,如何能够高效的组织各个团队,进行更快速、更稳定的产品交付越来越成为亟待解决的问题。

    在传统的组织模式中,开发人员更多的被鼓励多开发 Feature,因此开发人员会尽可能多的写代码,自然就需要不断的部署新代码上线;而运维人员则更多的被强调系统的稳定性,尽量不要让系统宕机以免影响用户使用从而影响公司业务。相比较之下,少部署新代码上线甚至不部署代码上线,相对更容易使系统保持稳定状态,因此一定程度上开发和运维人员的职责是有些冲突的,这样难免会导致系统开发的整体效率低下。

    在此基础上,提出了 DevOps 的理念,其更强调组织内部的高效,强调要优化企业组织内部文化,同时采用一定的自动化工具以优化流程,从而完成软件的生命周期管理,最终能够更快、更稳定的交付软件产品。

    DevOps responsibility

    DevOps 将团队内各个角色联系起来,集文化工具于一体。文化是指团队内部要能够进行良好沟通、各角色之间能够互相学习、团队成员之间包容、理解、自驱动、减少职责、快速试错,拥有共同的责任感。工具是指采用一系列工具进行自动化,比如:持续集成、持续部署、自动化测试、以及一系列的敏捷实践等。

    区块链技术和 DevOps 两者本身的 Scope 都还是蛮大的,那么接下来,就先看一下去中心化应用(Decentralized application,也称为 Dapp)在 DevOps 中自动化流程这部分的情况。

    Dapp 的传统开发方法

    若采用传统的开发方法,以在以太坊网络(Ethereum) 中编写 Dapp 为例,大概需要以下几个步骤:

    • 采用 Solidity 语言编写智能合约
    • 采用线上编译器 Remix 进行 Solidity 的编译
    • 部署智能合约到本地开发网络 (ganache-cli)中
    • 将智能合约部署到测试网络中,如 RopstenRinkeby
    • 手工测试智能合约功能是否正常
    • 部署到区块链主网

    在这个流程中,我们会发现许多步骤需要手工完成,例如:采用 Remix 线上编译器编译智能合约、部署到测试网络、在测试网络中手工测试、部署到主网络。由于在整个 Dapp 开发的流程中有许多需要手工操作,因此必然会造成开发效率的极大降低,并增加了因工具配置错误、区块链网络连接配置错误、手工粘贴复制错误等产生 Bug 的概率。

    而这种类型的 Bug,通常都是我们无意识而为之的,它们通常都难以排查。并且这整个开发流程也是针对于个人的开发流程,在团队内部根本无法协作与配合。总之,这是一个效率低下,没有完全自动化的开发流程。

    图片来源于网络

    现代化工具助力 Dapp 开发

    以 DevOps 的自动化原则为指导,我们可以思考在传统的 Dapp 开发流程中哪些流程可以进行自动化,从而可以加强团队成员的协作以提升开发效率。例如:可以加入持续集成以自动检查并编译已提交的智能合约代码、在合约代码编译成功后能够自动部署合约到测试网络中、能够在测试网络中自动执行智能合约的单元测试以及集成测试等。也确实有一些现代化的工具可以帮助我们承担这部分职责,尽管这些解决方案还不算完美。

    Truffle

    Truffle 开发套件 (图片来源于网络)

    Truffle 第一次出现在技术雷达中是在 2017 年 11 月,处于“评估”象限,随后又在 2018 年 5 月再次出现。在技术雷达中是这么评价它的:

    “Truffle 是一个开发框架,它为Ethereum 平台带来了现代化的 Web开发体验。…… Truffle 受人喜爱的另一个原因是它鼓励开发者尽可能为智能合约编写测试代码,且智能合约通常与金钱有关,因此你需要认真的对待所写的测试代码。且通过其内置的测试框架以及与 TestRPC 测试网络的集成,Truffle 也可以采用 TDD 的方式进行开发。因此,我们希望能看到更多类似于 Truffle 的技术来促进区块链开发中的持续集成。”

    如技术雷达中所说,我也相信 Truffle 的出现就是为了解决上述传统区块链开发中的某些痛点。若采用 Truffle 框架进行 Dapp 的开发,就可以在本地自动进行智能合约的编译、执行单元测试以保证智能合约逻辑的正确性、并通过 Migration 自动化部署智能合约到本地测试网络中。当然 Truffle 框架的特性还不止于此,但这些特性就已经在一定程度上自动化了相关的工作流,消除了在 Dapp 开发过程中手工操作的步骤。

    Embark

    还有另外一款工具 Embark,它也是一款基于以太坊平台的 DApp 开发框架,可以帮助开发者创建智能合约、编译智能合约、执行测试并部署 DApp,同时 Embark 还可以很好的集成存储和网络资源。

    Embark 也在 2019 年 4 月出现在技术雷达的“评估”象限中。如在技术雷达中所说:“Embark 提供了诸如项目搭建、项目构建、自动化测试和调试等功能,同时也与分布式存储技术(例如:IPFS)做了集成。通过它声明式的配置,我们可以对智能合约的配置、依赖、工件和部署工作进行管理。同时,Embark 所提供的交互式 cli 命令行控制工具也令人印象深刻。”

    相较于 Truffle ,Embark 显得更加的简便,若采用 Embark 框架进行 Dapp 的开发,它能够很快的给予开发者反馈。它既可以在开发者完成智能合约代码之后以可视化的形式快速得到所编写智能合约代码的反馈,还可以进行智能合约的调试工作。

    Truffle 和 Embark 框架能够在很大程度上帮助开发者改善其开发工作流,我认为这也是区块链开发在 DevOps 领域中的值得称赞的技术。与此同时,还有一些其它的工具也在该领域持续贡献,比如:Infura,它提供了托管的以太坊节点。因此,若再进行区块链项目的开发,也推荐使用 Truffle 或 Embark 这样的现代化工具,积极拥抱 DevOps,提高 Dapp 的开发效率。

    自动化遇到的其他挑战

    除此之外,区块链开发中还会遇到了一些其他的挑战,例如:智能合约的自动升级。由于智能合约一旦部署成功后就是不可变的了,但有时难免由于业务的变化而出现升级智能合约的需求。在传统的软件项目中,我们对于可发布到服务器的软件版本有绝对的控制权,我们可以选择发布哪个版本的代码到服务器中供用户使用,但是在基于区块链网络的应用中,升级智能合约确是一项复杂的任务。

    不过我相信区块链与 DevOps 的结合也不仅如此,随着区块链技术的发展,DevOps 实践一定还能够更好的促进区块链项目的开发和部署工作。

    相关文章

      网友评论

        本文标题:区块链开发的 DevOps 实践初探

        本文链接:https://www.haomeiwen.com/subject/eognqctx.html