区块链已经从一个奇特的概念发展成为许多应用的一项重要技术。它为数据和资金的存储和传输提供了一个新的安全级别。使用DevOps工具来实现区块链可以使开发过程更快、更轻松、更可控。
在本文中,我们将研究区块链基础架构部署,并向您展示如何将DevOps工具与区块链结合使用。我们还将部署一个私有的平价Ethereum区块链网络从零开始。
这篇文章对于正在寻找通过实现DevOps工具来改进区块链开发方法的开发人员和项目经理非常有用。
目录
为什么区块链开发需要DevOps?
DevOps是一组软件开发实践,将软件生命周期中的开发和操作部分结合起来。使用DevOps,开发和操作团队同时处理软件,满足彼此的需求。在一些DevOps模型中,QA和安全团队也包括在该过程中。
区块链技术正在金融领域以外迅速普及。一些专家相信到2022年,大多数财富500强公司将使用区块链。
DevOps改善了公司各部门之间的沟通,从而加快了开发速度。DevOps工具对于区块链开发和编写智能合约尤其重要,因为它们促进了快速交付和对客户需求的关注。
DevOps工具还可以加快和自动化部署,节省时间并防止由手动编码引起的错误。此外,有几个DevOps工具可用于监控和分析区块链网络运营。
让我们看看如何用DevOps工具改进区块链开发:
- Terraform-创建AWS实例并管理配置
- Ansible-配置环境并执行脚本
- Docker-启动区块链节点
- 普罗米修斯和cAdvisor -监控网络节点的活动
- Grafana -可视化普罗米修斯数据
用Terraform创建区块链基础架构
起程拓殖是一种用于编排云基础设施的工具,允许您基础设施代码.支持AWS、谷歌cloud、Heroku等多个云提供商。
Terraform有一个声明性语法。您可以使用它来创建、修改和删除基础架构元素。Terraform支持各种类型的数据结构:
- 阵列
- 关联数组
- 对象
- 集合(用于对所需环境进行可扩展和灵活的描述)
- 具有可变结构的数据集
此外,由于项目组件的有用显示,Terraform可作为新DevOps专家的备忘单。
让我们看看Terraform为区块链开发人员提供了哪些优势。在手动配置AWS基础设施的背景下,它有助于:
- 避免在配置复杂基础架构时出现人为错误
- 更直观、更系统地配置流程
- 让新员工跟上新项目的进度
- 使您的基础架构具有可扩展性和可移植性
我们的团队在使用Terraform方面拥有丰富的经验。我们为开发、测试和生产环境创建了基础架构,并创建和配置了监控服务器。让我们使用Terraform为我们的私有区块链配置区块链节点。
配置区块链节点
我们将通过选择一个Amazon Machine Image运行我们节点的操作系统。对于我们的项目,我们将使用Ubuntu 16.04服务器:
现在我们需要一个aws_密钥对资源来添加公共密钥SSH我们的AWS主机的密钥。在本例中,我们将使用本地生成的aws_dev_key.pub密钥:
接下来,我们需要为传入和传出流量设置规则。这是通过aws_安全组
资源在我们的示例中,我们允许移动所有端口的所有传入和传出流量。但是,您只能指定必要的端口。
最后,我们创建了弹性计算云(EC2)不要忘记创建标签,因为它们在使用Ansible和Prometheus时会很有用。
还有,aws_eip
我们为每个实例选择了一个弹性IP:
此配置的完整源代码存储在演示存储库.
最后,我们将为我们的私有区块链网络创建一个简单的基础设施。Terraform通过一次创建所有EC2实例来帮助我们优化这个过程。现在,让我们使用另一个有用的工具Ansible来配置和编排它们。
使用Ansible协调您的环境
Ansible是一个用于自动化配置和部署的DevOps工具。在我们的项目中,我们使用它:
- 部署区块链网络
- 部署智能合约
- 配置测试环境和测试流程
- 精心配置监控服务器
- 和更多的
Ansible连接到目标主机(通常使用SSH),并运行许多小脚本模块.一组模块及其参数构成一个剧本-可移动的执行单位。
此工具通过以下方式标识目标主机:库存文件。此类文件可以是静态的(使用硬编码的IP地址、域等)或动态的(从API获取信息)。在我们的示例中,我们将使用动态清单文件。
与其他自动化工具相比,Ansible有以下几个优势:
- 一套广泛的模块。您可以使用SSH自动执行几乎所有手工执行的过程。
- 与AWS完全集成。您可以使用简单的配置文件为目标主机生成资源清册。
- 幂等脚本。这些脚本在第一次运行后不会更改系统。这对于区块链网络的发展至关重要。
此外,Ansible允许我们使用分子而且不需要额外的守护进程、数据库等。
Ansible与AWS集成
在前面,我们创建了5个EC2实例:4个用于区块链节点,1个用于监视。现在我们需要将它们集成到我们的AWS环境中。
注意,在这个项目中,我们使用了一个基本的Ansible配置。
我们的实例具有以下标记:
让我们使用它们来生成动态Ansible库存:
这个配置文件告诉Ansible:
- 查找us-west-2区域中的所有EC2实例
- 拾取实例,没有
环境:开发
标签 - 为每个实例名称创建相关的Ansible组
因此,Ansible将创建五个组:节点0、节点1、节点2、节点3和监视。每个组将只包含一个成员。这看起来可能不舒服,但这种配置在我们的案例中很有用。
使用Ansible配置一个基本的EC2实例
我们的EC2实例需要几个基本工具:
- Python 3
- 旋度
- 做сker
- pip3
- Pip3包:docker-compose, docker,请求
为了在配置实例时节省一些时间,您可以将这些工具添加到单独的Ansible playbook中,并仅运行一次。
我们的演示存储库包含此类配置的示例。
部署区块链节点
对于我们的项目,我们将部署四个节点:两个权威节点和两个常规节点。当我们部署私有奇偶校验以太坊区块链时,我们可以使用本教程从它的文档。以下是部署的基本算法:
- 部署权限节点(node_0, node_1):
- 将.toml config和spec.json复制到AWS实例。
- 在Docker中启动Parity Ethereum节点,并为每个实例创建一个帐户。生成的地址集形成了权限列表。
- 将新的spec.json文件(带有指定的权限列表)和新的.toml配置文件(带有指定的挖掘信息)复制到AWS实例。
- 在Docker中重启Parity以太坊节点。
- 部署常规节点(节点2、节点3):
- 将.toml config和spec.json(具有相同的权限列表)复制到AWS实例。
- 在Docker中启动Parity Ethereum节点,并为每个实例创建一个帐户。
- 连接所有节点:
- 使用parity_enode远程过程调用(RPC)函数获取每个节点的地址。
- 使用“parity_addresservedpeer”RPC函数连接节点。
我们项目的区块链节点部署脚本存储在演示存储库.
在那之后,我们的基础设施已经部署并准备就绪。现在让我们创建一个监控系统,以收集数据并发布报告。
使用Prometheus & Grafana监控您的环境
出于以下几个原因,我们需要监控我们的区块链环境:
- 获取事务流的状态更新
- 分析和优化资源使用
- 收集统计信息
- 以便更好地理解系统操作
- 和更多的
正如我们提到的,对于这个项目,我们将使用普罗米修斯用于网络监控和Grafana用于数据可视化。
普罗米修斯是从系统的各个部分收集指标的工具。指标由导出器收集,导出器是侦听目标端口并在导出后收集信息的进程收到
对于我们的区块链项目,我们需要以下指标:
- 关键节点和验证器的硬件参数(CPU、RAM、硬盘使用情况等)
- 事务流和成功
- 关键节点的平衡(可以用以太坊出口商)
- 其他指标的导数
所有这些数据都有相应的时间戳。它们将在我们项目的最后一步:与Grafana合作中发挥作用。
Grafana是一个开源的分析工具,用于收集指标、可视化指标,并对可疑指标发出警报。它的主要优势是集成了许多流行的平台和数据库:Kubernetes,谷歌云平台,AWS, Azure云,MySQL, Oracle等。
为监控环境做准备
在开始使用监控服务器之前,我们需要为每个网络节点创建一个Prometheus导出器。
在我们的项目中,我们将使用码头工人容器出口国和cAdvisor-最流行的输出指标的工具。它们允许我们监视每个容器的基本指标,如CPU、RAM和硬盘驱动器的使用。
Docker容器导出器嵌入码头工人,因此我们需要将此配置传递给Docker以激活它:
cAdvisor的安装速度也很快。我们需要将Docker映像拉到AWS主机,并使用简单的配置运行一个容器。
您可以在演示存储库(base_setup.yml和install_cadvisor.yml)。
普罗米修斯与AWS集成
我们将用这个集成文件集成Prometheus和AWS:
根据此配置,普罗米修斯将通过端口9323(运行Docker容器导出器)和端口8080(运行cAdvisor)从us-west-2区域请求所有EC2实例。
另外,Prometheus将使用实例元数据更改指标中的一些数据字段。我们的配置文件将使这些字段更加友好。例如,它会将"__meta_ec2_tag_Name"更改为"instance"。
为了确保Prometheus能够访问AWS,我们将在容器开始时分配两个环境变量:AWS\u access\u KEY\u ID和AWS\u SECRET\u access\u KEY。
配置监控服务器
注意:在本文中,我们跳过了使用身份验证保护敏感端口的过程。
我们已经在Terraform部署期间创建了一个监控服务器。现在,让我们对其进行配置,以便以最佳方式使用它收集的信息。我们将通过部署普罗米修斯和格拉法纳来做到这一点。普罗米修斯可以分三步部署:
- 为Docker中的进一步结构虚拟化创建配置文件夹结构。
- 复制配置文件(必选)和规则文件(可选)。
- 容器运行。
之后,我们可以访问监控主机的9090端口,以便查看Prometheus找到的目标列表:
在我们建立普罗米修斯之后,让我们部署格拉法纳。算法是一样的。唯一的例外是Grafana允许在启动容器时创建Prometheus数据源。看起来是这样的:
我们可以通过计算监视容器中的CPU使用情况来检查这些工具是否正确工作。这可以通过使用以下查询创建一个Grafana面板来实现:
无cpu的平均值(速率(容器、cpu、使用时间、秒数、总{image=~“(*prometheus.*grafana.*cadvisor.*.*2m])*100
这个命令显示了区块链节点的CPU使用率:
没有(cpu)的avg(率(container_cpu_usage_seconds_total{图像= ~”(*平价。*)”}[2 m])) * 100
下面的屏幕截图显示了这两个命令的结果。注意,Grafana在图表下面提供了一个图形解释。
您可以在演示存储库(monitoring.yml)。
结论
DevOps对于区块链的重要性是不可低估的。为区块链网络配置环境需要大量的责任心、专注力和庞大的知识库。
Ansible和Terraform允许我们自动化区块链网络部署过程,从而:
- 节省开发、测试和支持期间的时间
- 消除人为错误的风险
用于监控的DevOps工具为我们提供了系统在任何给定时刻的状态的完整记录。Prometheus收集您需要的所有指标,并在api出现问题时向您发出警报。在Grafana的帮助下,所有收集到的数据都可以很容易地可视化。
在Apriorit,我们热衷于增强块链具有新开发方法的解决方案。除了基于敏捷或scrum之外交付过程,我们实现DevOps工具以更好地自动化和资源监控。
我们拥有丰富的开发经验,可以构建和测试任何复杂性的基于区块链的解决方案。想用你的项目挑战我们吗?联系我们开始讨论吧!