先验的

区块链已经从一个奇特的概念发展成为许多应用的一项重要技术。它为数据和资金的存储和传输提供了一个新的安全级别。使用DevOps工具来实现区块链可以使开发过程更快、更轻松、更可控。

在本文中,我们将研究区块链基础架构部署,并向您展示如何将DevOps工具与区块链结合使用。我们还将部署一个私有的平价Ethereum区块链网络从零开始。

这篇文章对于正在寻找通过实现DevOps工具来改进区块链开发方法的开发人员和项目经理非常有用。

目录

为什么区块链开发需要DevOps?

用Terraform创建区块链基础架构

配置区块链节点

使用Ansible协调您的环境

Ansible与AWS集成

使用Ansible配置一个基本的EC2实例

部署区块链节点

使用Prometheus & Grafana监控您的环境

为监控环境做准备

普罗米修斯与AWS集成

配置监控服务器

结论

为什么区块链开发需要DevOps?

DevOps是一组软件开发实践,将软件生命周期中的开发和操作部分结合起来。使用DevOps,开发和操作团队同时处理软件,满足彼此的需求。在一些DevOps模型中,QA和安全团队也包括在该过程中。

区块链技术正在金融领域以外迅速普及。一些专家相信到2022年,大多数财富500强公司将使用区块链。

DevOps改善了公司各部门之间的沟通,从而加快了开发速度。DevOps工具对于区块链开发和编写智能合约尤其重要,因为它们促进了快速交付和对客户需求的关注。

DevOps工具还可以加快和自动化部署,节省时间并防止由手动编码引起的错误。此外,有几个DevOps工具可用于监控和分析区块链网络运营。

读也:
将安全性集成到DevOps中,并使用AWS交付DevSecOps

让我们看看如何用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服务器:

       
Data "aws_ami" "ubuntu" {most_recent = true filter {name = "name" values = ["ubuntu/images/hvm-ssd/ubuntu- xenal -16.04-amd64-server-*"]} filter {name = "虚拟化类型" values = ["hvm"]} owners = ["099720109477"]}

现在我们需要一个aws_密钥对资源来添加公共密钥SSH我们的AWS主机的密钥。在本例中,我们将使用本地生成的aws_dev_key.pub密钥:

       
资源“aws_key_pair”“aws_dev_key”{key_name=“dev_node”public_key=“${file”(“aws_dev_key.pub”)}

接下来,我们需要为传入和传出流量设置规则。这是通过aws_安全组资源在我们的示例中,我们允许移动所有端口的所有传入和传出流量。但是,您只能指定必要的端口。

       
资源“aws_security_group”“allow_all”{name=“allow_all”description=“allow all traffic”入口{from_port=0 to_port=0 protocol=“-1”cidr_blocks=[“0.0.0.0/0”]}出口{从_port=0 to_port=0 protocol=“-1”cidr u blocks=[“0.0.0.0/0”]}

最后,我们创建了弹性计算云(EC2)不要忘记创建标签,因为它们在使用Ansible和Prometheus时会很有用。

       
resource“aws_instance”“dev node”{count=“${var.nodes_count}”//在variables.tf ami=“${data.aws_ami.ubuntu.id}”instance_type=“t2.micro”key_name=“${aws_key_-pair.aws_-key.key_-name}”安全组=[“${aws_-security_-group.allow_-all.name},]“aws_实例”“开发监控”{ami=“${data.aws_ami.ubuntu.id}”实例_type=“t2.micro”key_name=“${aws_key\u pair.aws_dev_key.key_name}”安全监控组=[“${aws_security_group.allow_all.name},]标记{name=“监控”环境=“开发”}

还有,aws_eip我们为每个实例选择了一个弹性IP:

       
资源"aws_eip" "node-eip" {count = "${var. php ";node_${count.}"标签= {Name = "node_${count.}"{tag = {Name = "monitoring" Environment = "dev"}} resource "aws_eip" "monitoring-eip"

此配置的完整源代码存储在演示存储库

最后,我们将为我们的私有区块链网络创建一个简单的基础设施。Terraform通过一次创建所有EC2实例来帮助我们优化这个过程。现在,让我们使用另一个有用的工具Ansible来配置和编排它们。

使用Ansible协调您的环境

Ansible是一个用于自动化配置和部署的DevOps工具。在我们的项目中,我们使用它:

  • 部署区块链网络
  • 部署智能合约
  • 配置测试环境和测试流程
  • 精心配置监控服务器
  • 和更多的

Ansible连接到目标主机(通常使用SSH),并运行许多小脚本模块.一组模块及其参数构成一个剧本-可移动的执行单位。

此工具通过以下方式标识目标主机:库存文件。此类文件可以是静态的(使用硬编码的IP地址、域等)或动态的(从API获取信息)。在我们的示例中,我们将使用动态清单文件。

与其他自动化工具相比,Ansible有以下几个优势:

  • 一套广泛的模块。您可以使用SSH自动执行几乎所有手工执行的过程。
  • 与AWS完全集成。您可以使用简单的配置文件为目标主机生成资源清册。
  • 幂等脚本。这些脚本在第一次运行后不会更改系统。这对于区块链网络的发展至关重要。

此外,Ansible允许我们使用分子而且不需要额外的守护进程、数据库等。

Ansible与AWS集成

在前面,我们创建了5个EC2实例:4个用于区块链节点,1个用于监视。现在我们需要将它们集成到我们的AWS环境中。

注意,在这个项目中,我们使用了一个基本的Ansible配置。

我们的实例具有以下标记:

       
名称:node_0、node_1、node_2、node_3,监控环境:dev

让我们使用它们来生成动态Ansible库存:

       
plugin: aws_ec2 regions: - us-west-2 filters: tag:Environment: dev keyed_groups: - key: tags。名称分隔符:“

这个配置文件告诉Ansible:

  • 查找us-west-2区域中的所有EC2实例
  • 拾取实例,没有环境:开发标签
  • 为每个实例名称创建相关的Ansible组

因此,Ansible将创建五个组:节点0、节点1、节点2、节点3和监视。每个组将只包含一个成员。这看起来可能不舒服,但这种配置在我们的案例中很有用。

使用Ansible配置一个基本的EC2实例

我们的EC2实例需要几个基本工具:

  • Python 3
  • 旋度
  • 做сker
  • pip3
  • Pip3包:docker-compose, docker,请求

为了在配置实例时节省一些时间,您可以将这些工具添加到单独的Ansible playbook中,并仅运行一次。

我们的演示存储库包含此类配置的示例。

部署区块链节点

对于我们的项目,我们将部署四个节点:两个权威节点和两个常规节点。当我们部署私有奇偶校验以太坊区块链时,我们可以使用本教程从它的文档。以下是部署的基本算法:

  1. 部署权限节点(node_0, node_1):
    1. 将.toml config和spec.json复制到AWS实例。
    2. 在Docker中启动Parity Ethereum节点,并为每个实例创建一个帐户。生成的地址集形成了权限列表。
    3. 将新的spec.json文件(带有指定的权限列表)和新的.toml配置文件(带有指定的挖掘信息)复制到AWS实例。
    4. 在Docker中重启Parity以太坊节点。
  2. 部署常规节点(节点2、节点3):
    1. 将.toml config和spec.json(具有相同的权限列表)复制到AWS实例。
    2. 在Docker中启动Parity Ethereum节点,并为每个实例创建一个帐户。
  3. 连接所有节点:
    1. 使用parity_enode远程过程调用(RPC)函数获取每个节点的地址。
    2. 使用“parity_addresservedpeer”RPC函数连接节点。

我们项目的区块链节点部署脚本存储在演示存储库

在那之后,我们的基础设施已经部署并准备就绪。现在让我们创建一个监控系统,以收集数据并发布报告。

使用Prometheus & Grafana监控您的环境

出于以下几个原因,我们需要监控我们的区块链环境:

  • 获取事务流的状态更新
  • 分析和优化资源使用
  • 收集统计信息
  • 以便更好地理解系统操作
  • 和更多的

正如我们提到的,对于这个项目,我们将使用普罗米修斯用于网络监控和Grafana用于数据可视化。

普罗米修斯是从系统的各个部分收集指标的工具。指标由导出器收集,导出器是侦听目标端口并在导出后收集信息的进程收到对于我们的区块链项目,我们需要以下指标:

  • 关键节点和验证器的硬件参数(CPU、RAM、硬盘使用情况等)
  • 事务流和成功
  • 关键节点的平衡(可以用以太坊出口商
  • 其他指标的导数

所有这些数据都有相应的时间戳。它们将在我们项目的最后一步:与Grafana合作中发挥作用。

Grafana是一个开源的分析工具,用于收集指标、可视化指标,并对可疑指标发出警报。它的主要优势是集成了许多流行的平台和数据库:Kubernetes,谷歌云平台,AWS, Azure云,MySQL, Oracle等。

为监控环境做准备

在开始使用监控服务器之前,我们需要为每个网络节点创建一个Prometheus导出器。

在我们的项目中,我们将使用码头工人容器出口国cAdvisor-最流行的输出指标的工具。它们允许我们监视每个容器的基本指标,如CPU、RAM和硬盘驱动器的使用。

Docker容器导出器嵌入码头工人,因此我们需要将此配置传递给Docker以激活它:

       
{“metrics addr”:“0.0.0.0:9323”,“实验”:true,“日志选项”:{“max size”:“1g”//同时限制日志的大小}

cAdvisor的安装速度也很快。我们需要将Docker映像拉到AWS主机,并使用简单的配置运行一个容器。

您可以在演示存储库(base_setup.yml和install_cadvisor.yml)。

普罗米修斯与AWS集成

我们将用这个集成文件集成Prometheus和AWS:

       
---全局:求值间隔:30s刮取配置:-作业名称:docker ec2\u sd\u配置:-区域:us-west-2端口:9323 relabel\u配置:&ec2\u relabel\u配置-目标标签:实例regex:'(.+)'源标签:[uu meta\u ec2\u标签名称]-目标标签:环境regex:'(.+)'源标签:[uu meta ec2\u标签]环境]-目标标签:regex:(.az)'源标签:[[uuuuuuuMETA\uEC2\u可用性\u区域]-作业名称:cadvisor ec2\u sd\u配置:-区域:us-west-2端口:8080 relabel\u配置:*ec2\u relabel\u配置

根据此配置,普罗米修斯将通过端口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。

读也:
在开发Web服务时使用Docker:你需要考虑什么?

配置监控服务器

注意:在本文中,我们跳过了使用身份验证保护敏感端口的过程。

我们已经在Terraform部署期间创建了一个监控服务器。现在,让我们对其进行配置,以便以最佳方式使用它收集的信息。我们将通过部署普罗米修斯和格拉法纳来做到这一点。普罗米修斯可以分三步部署:

  1. 为Docker中的进一步结构虚拟化创建配置文件夹结构。
  2. 复制配置文件(必选)和规则文件(可选)。
  3. 容器运行。

之后,我们可以访问监控主机的9090端口,以便查看Prometheus找到的目标列表:

普罗米修斯号上的目标清单

在我们建立普罗米修斯之后,让我们部署格拉法纳。算法是一样的。唯一的例外是Grafana允许在启动容器时创建Prometheus数据源。看起来是这样的:

       
---apiVersion:1数据源:-名称:普罗米修斯类型:普罗米修斯url:http://prometheus:9090

我们可以通过计算监视容器中的CPU使用情况来检查这些工具是否正确工作。这可以通过使用以下查询创建一个Grafana面板来实现:

无cpu的平均值(速率(容器、cpu、使用时间、秒数、总{image=~“(*prometheus.*grafana.*cadvisor.*.*2m])*100

这个命令显示了区块链节点的CPU使用率:

没有(cpu)的avg(率(container_cpu_usage_seconds_total{图像= ~”(*平价。*)”}[2 m])) * 100

下面的屏幕截图显示了这两个命令的结果。注意,Grafana在图表下面提供了一个图形解释。

使用Grafana创建的视觉化

您可以在演示存储库(monitoring.yml)。

结论

DevOps对于区块链的重要性是不可低估的。为区块链网络配置环境需要大量的责任心、专注力和庞大的知识库。

Ansible和Terraform允许我们自动化区块链网络部署过程,从而:

  • 节省开发、测试和支持期间的时间
  • 消除人为错误的风险

用于监控的DevOps工具为我们提供了系统在任何给定时刻的状态的完整记录。Prometheus收集您需要的所有指标,并在api出现问题时向您发出警报。在Grafana的帮助下,所有收集到的数据都可以很容易地可视化。

在Apriorit,我们热衷于增强块链具有新开发方法的解决方案。除了基于敏捷或scrum之外交付过程,我们实现DevOps工具以更好地自动化和资源监控。

我们拥有丰富的开发经验,可以构建和测试任何复杂性的基于区块链的解决方案。想用你的项目挑战我们吗?联系我们开始讨论吧!

跟我们说说你的项目
向我们发送一份提案请求!我们会给你回复细节和估计。

浏览
通过点击发送,您同意处理您的数据

预约探访电话

我们心中没有任何具体的任务,但我们的技能似乎很有趣?

快速获取Apriorit简介,以更好地了解我们的团队能力。

联系我们

  • +1 202-780-9339
  • [受电子邮件保护]
  • 美国威尔明顿市银边路3524号35B室,邮编:19810-4929
  • D-U-N-S编号:117063762
Baidu