栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

区块链系统的稳定性和优化及运行逻辑

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

区块链系统的稳定性和优化及运行逻辑

文章目录
  • 摘要
  • 一、开发工具
  • 二、程序运行完整逻辑
    • 2.1 总体逻辑
    • 2.2 详细过程(以添加数据为例)

摘要

Optimized the back-end code of the blockchain: Using the callback function technique, the function is used as the return value, so that the same function can be reused multiple times, which improves the execution efficiency and reduces the code size by nearly half.
I consulted some people who have done blockchain projects and learned that the backend server based on blockchain should have stable performance in addition to the slower response efficiency, but the performance of the server I am doing now is unstable, adding or querying data The request may fail, and the response time of a request often takes 5-8 seconds, which is of no practical value. Check the log of the node container and find that when the endorsement policy is executed, the endorsement fails. Check the specified endorsement policy and use the most lenient one. Strategy, it only needs any node to endorse the transaction to succeed. It is confirmed that the endorsement strategy is OK. I checked the docker container log and found that it does not always get the wrong endorsement on a specific node, but may get it on all nodes. excluding the configuration file error of a specific node, guessing that there may be an error in a global configuration file, and the problem has not been solved.

优化了区块链后端代码:利用回调函数的技巧,将函数作为返回值,使同一个函数能够得到多次复用,提高了执行效率的同时将代码量减少了一半。
咨询一些曾做过区块链项目的人得知基于区块链做的后端服务器除了响应效率慢一点外,其性能应当是稳定的,而我现在做的服务器性能不稳定,添加或者查询数据的请求可能失败,一次请求的响应时间也常常需要5-8秒,没有实用价值,查看节点容器的日志发现在执行背书策略的时候,背书失败,检查指定的背书策略,采用的是最宽松的策略,只需要任一节点背书交易就能成功,确定背书策略没有问题,查看了docker容器日志,发现其并不总是在特定的节点得到错误的背书,而是在所有节点都有可能会得到错误的背书,排除特定节点的配置文件错误,猜测可能是某个全局配置文件有错误,还没解决问题,在解决问题的过程中,了解了微服务的基本架构、K8s引擎的大慨作用。


一、开发工具
  1. hyperledger-fabric:1.4.7,hyperledger-ca:1.4.7。ca是用来生成证书文件,管理成员身份。
    下载方法:点击此链接到百度云下载脚本,提取码:1234,在已经安装docker和git后,运行脚本即可下载,例如运行:./download.sh 1.4.7 1.4.7将会下载hyperledger-fabric:1.4.7,hyperledger-ca:1.4.7,及对应版本的docker镜像。若某个文件下载缓慢,可转到github文件下载代理处下载(前提是要能看明白.sh脚本语言,明白缺少什么文件,该在什么地方解压下载好的文件),下载后放入fabric-sample内解压即可。
  2. docker: 20.10.12,服务都是在docker容器内运行的。
  3. golang: 1.17.5,fabric的底层的开发语言,同时也是编写链码,搭建后端服务器的语言。
  4. git: 1.8.3.1,下载文件时需要用到。
  5. go-gin最新版,开发后端服务器的框架,该框架目前性能最好。
  6. fabric-go-sdk,操作区块链网络的软件包。
二、程序运行完整逻辑 2.1 总体逻辑
  1. 在启动fabric网络后,运行mian函数,它将首先运行初始化函数,创建通道、将所有节点加入通道、安装链码、实例化链码。然后开启后端接口服务。
  2. 利用接口,接收前端传入的数据,用结构体保存数据,再调用go sdk的软件包,利用channel.Client将数据发送给链码。
  3. 链码根据接受的数据,调用对应的函数,将数据存入区块链或者查询区块链账本中的数据。
  4. 用go sdk接收链码的执行结果,利用gin将结果以json形式的数据返回给前端。
2.2 详细过程(以添加数据为例)

利用接口,接收前端传入的数据,用如下的函数将接受到的前端数据保存至结构体中。

再用如下函数,将数据反序列化,为存入区块链中做准备(区块链中存储的数据都是序列化的):

指定函数fcn,链码会根据传入的fcn函数信息,调用对应的函数。

执行strar.go文件中调用的链码函数:

在InvokeCC函数中,首先将请求封装,在封装的请求中,需要指明执行链码的ID,请求链码的函数信息fcn,及序列化了的待添加数据。

执行调用链码的请求(go sdk调用链码的核心函数):

此时安装的链码将会收到请求数据,在链码中用该函数接收请求调用函数的信息及序列化后的待添加数据。

此时传入的请求函数信息是"addData",那么它将会调用对应的函数进行处理:

在该函数中,先是将序列化的数据反序列化,并用结构体保存数据,这样做的目的是取出其中的ID和Batch,将其以Batch+ID的方式组合为一个唯一Key值,作为该数据唯一的“身份证”,溯源就是根据此“身份证”查看该身份证下的一切改动。

调用PutData函数,准备将数据写入区块链中。

在PutData函数中,首先将数据序列化,再用Putstate将数据写入区块链。

最后将链码执行的结果以JSON形式的数据返回给前端,若成功执行链码“err”:nil,否则返回错误原因:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/837837.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号