当前位置:   article > 正文

长安链源码学习 vm-docker-go_合约进程

合约进程

现有区块链系统合约运行环境有三种,Native本地调用、虚拟机(字节码解析)、容器技术。Native执行速度快,但与主程序在一个进程,共用网络栈、IPC、存储、内存等,安全性不高;虚拟机沙盒隔离环境,代码编译成字节码,虚拟机解释执行,执行速度受到一定影响,但安全性得到提升,目前虚拟机方式对代码编写有要求,只有固定的函数调用,想要实现图灵完备复杂。容器技术,将智能合约放入容器隔离环境,合约代码任意定义,对于业务逻辑编写更加友好,缺点也比较明显,需要维护合约容器与主程序之间的连接,如果采用rpc通信,数据传输也要花费一部分时间,如果采用本地sock文件,效率还好。

vm-docker-go 是长安链推出的合约引擎的一种,笔者还是把他归类于容器技术,为什么这么归类,一会我们一起来看。

一、背景知识

1. namespace

namespace是Linux内核用来隔离内核资源的方式。Linux namespaces 是对全局系统资源的一种封装隔离,使得处于不同 namespace 的进程拥有独立的全局系统资源,改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程,对其他 namespace 中的进程没有影响。简单来说,通过namespace隔离出来的进程不知道其他进程的存在,该进程可以随意操作系统资源,而其他namespace下的进程不受任何影响,无任何感知。

隔离能力如下:
在这里插入图片描述
其中对CPU、内存等资源隔离通过Cgroup来实现,关于Cgroups的介绍戳这里,不再赘述。

2. RunC

RunC 是一个轻量级的工具,它是用来运行容器的,通过OCI标准来创建、运行容器,Docker通过containerd调用RunC进行容器创建、停止、销毁等。RunC怎么使用戳这里
RunC是用golang语言开发,代码阅读复杂度不高,有兴趣的可以看看代码。

RunC简单原理:

1)外部需要提供一个文件系统,也就是docker layer层数据,通过docker inspect xxx镜像可以看到。
2)RunC fork一个进程,叠加Namespace限制并使用Cgroup进行资源隔离。
3)外部传递参数,写入网卡信息等。
4)生成的进程称之为容器,RunC对容器生命周期进行管理。

RunC详细工作原理:https://www.jianshu.com/p/abfd3a470473

二、vm-docker-go

该项目长安链的研发团队还在高速迭代,作者在官网还没有搜索到相关的信息,架构图只能自己画,不能偷懒了。

vm-docker-go 主要工作将交易发送至合约,执行合约逻辑。
合约:合约逻辑代码,创建后与vm-docker-go维护steam流通信。
process:fork合约进程,将接收到的交易发送至合约
processBalanceprocess管理者,动态创建process
在这里插入图片描述
看完架构图,有哪些疑问?

1. 并发100笔交易,会fork出多少合约进程?

如果已经创建的合约进程超过maxProcess,则不再创建process,交易进入队列等待。
在这里插入图片描述

2.交易并发下降,fork的合约进程如何回收?

发送至合约的交易执行超时,kill process;当前队列无交易,kill process,实现process动态增删。

3.process与合约如何通信?

process与合约通过Unix domain socket通信,Unix domain socket 又叫 IPC(inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信,Unix domain socket介绍

合约通过contract-sdk-go创建客户端,与process进行steam流建立、数据交互。fabric与之对应的模块叫做shim

合约与外界通信内容包括(版本在迭代,稳定后在详细说明):
1)外部发起交易请求-交易信息。
2)合约发起请求-合约执行状态查询、地址查询、其他合约调用等。

思考:

process能否使用RunC进行替换?

  1. process fork合约进程的思路,与RunC是一致的,但RunC需要提前准备好文件系统,但RunC经过Docker的实践检验,安全性、稳定性比较高。
  2. 长安链研发同学也提到性能问题,使用RunC确实比较重,性能如何需要测试。

参考:
https://www.cnblogs.com/sparkdev/p/9365405.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/675983
推荐阅读
相关标签
  

闽ICP备14008679号