DFINITY基本架构

Posted 小湿哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DFINITY基本架构相关的知识,希望对你有一定的参考价值。

DFINITY简介

DFINITY (Internet Computer): 通过结合区块链网络节点的集体计算能力来创建“Internet Computer”,从而彻底改变互联网。Internet Computer是基于Internet Computer Protocol(ICP)区块链计算协议实现。

DFINITY 的目标是成为一个快速、安全、可扩展的云平台,它将为公共互联网的扩展出更多的功能,允许用户直接部署应用程序和安装代码,而不会出现影响比特币和以太坊等其他主要区块链的拥堵问题。

DFINITY = 链 + 云,换言之链上的云。

系统组件

由小及大,下上贯穿

Canister

WebAssembly容器,罐子

Canister是DFINITY中管理的最小单位,它是用户应用的载体,允许WebAssembly的字节码在其中运行。

Canister具备3个属性:

一是智能合约:附加区块链功能;

二是Actor:自身数据只有自己可改,单线程执行无需锁,与外部交互只有消息

三是进程:WebAssembly, 用不Crash,可以被控制器创建、移动、销毁。

Canister只有两个标准接口update请求和query请求。

update请求会改变Canister内部状态(应用数据),多个Canister副本需保持结果一致性。

query请求不会改变Canister内部的状态,不需要保持结果一致。

Canister的接口不仅可以被外界访问,也可以Canister之间互相访问;多种不同的服务互相调用,本质上和K8S的微服务架构没有太多区别。

Canister中的程序和状态存储于子链上,在子链上持久化。Canister不提供直接访问硬盘的传统持久化功能。

Subnets

此子网非传统网络概念中的子网,而是指一堆物理节点(nodes)的集合。

子网运行着多个Canister,对于同一个Canister, 每一个node都作为副本运行它。

对于外界的update请求,Subnet通过共识机制首先对请求排序,获得一致性的执行顺序后,每一个node的canister都按此顺序执行,最后每个Canister执行完之后,再通过共识机制形成一致的结果。

对于外界的query请求,会被分配到就近的Canister执行,返回用户结果。

所以一个Subnet的nodes通常会设置的比较分散,便于各地的用户就近访问。

NNS (Network Nervous System)

NNS是管理所有资源和决策的网络神经系统,可大致理解为去中心化的自组织的K8S容器管理平台。

NNS管理所有的物理节点,并将它们划分子网,为不用的应用创建Canister,按照一定规则将Subnet内的子链的结果同步于主链,猜测为rollup模式。

NNS本身是通过多条主链来管理这些资源,而具体的提案决策需要依赖神经元的共识机制–权益投票。

权益来源于质押的通证,通证的获取可以通过资源的提供,通证循环此处暂且不表。

计算服务

通过Subnet中的Canister部署用户程序,即可提供计算服务。一个Subnet可以看做是一台电脑,因为一个Subnet内的容器并行的副本计算,并达成共识。

如果需要更多算力呢,就得更多Subnet计算咯。按照Subnet 5台机器的话,那么实际算力使用率只有20%,如果做渲染/机器学习的话是不太适合这里的,浪费太多算力。

存储服务

DFINITY计算全靠Canister, 存储也是一样都在Canister的memory page里,但是DFINITY又限制了Canister的大小为4G,大规模的视频应用不可能部署在Canister上。

为了解决这个问题,DFINITY专门设计了数据存储的Data Canister, 并提供的存储接口BigMap。

Data Canister也是Canister,不能摆脱4G的限制,那么就会有大量的Data Canister为应用Canister的提供存储服务。应用Canister只需要记住文件索引以及文件所在的Canister即可,保证了应用Canister只保存状态数据,大量数据保存在后端的Data Canister.

Dfinity挖矿系列:编译和构建网络计算机(ICP)核心服务

DFINITY代码已开源


在DFINITY的GitHub页面,代码已经开源(https://github.com/DFINITY),其中三个主要组件的源代码已经上线,分别为replica、nodemanager和NNS canisters。根据项目的开源协议,互联网计算机的所有代码都在Apache 2.0许可下授权,少数组件在比Apache 2.0许可更严格的互联网计算机社区源许可和互联网计算机共享社区源许可下授权,以保护DFINITY基金会的知识产权。代码用Rust语言实现,西部超算第一时间对核心组件进行了编译、构建和测试。

搭建环境


配置Docker环境:

Windows安装教程:

Mac安装教程:

Linux使用如下命令安装:

curl -fsSL https://get.docker.com -o get-docker.sh

sudo sh get-docker.sh

sudo usermod --append --groups docker $USER

sudo service docker restart

退出终端session, 重新打开一个新的session使用docker。


配置git环境:

在Windows下需要

1.在Git git-scm.com 下载git安装包
2.使用该安装包默认安装

Mac和Linux自带git, 不需要安装


克隆项目:

在Windows下打开Git Bash, Mac 和 Linux打开终端 输入

git clone https://github.com/dfinity/ic.git

如果你已经配置好ssh密钥,输入

git clone git@github.com:dfinity/ic.git

该项目会克隆到该目录下ic目录,然后

cd ic

编译



构建编译容器镜像

以 ic 作为根目录,运行

gitlab-ci/docker/docker-build-local-image.sh

构建 replica 和 nodemanager

以 ic 作为根目录 进入容器中

gitlab-ci/tools/docker-run

上边的命令会进入到容器中的目录/builds/dfinity-lab/dfinity,如果不是该目录,就调整到该目录 然后cd到rust代码目录rs

cd rs

然后使用cargo编译replia和nodemanager

cargo build -p ic-replica -p nodemanager

编译时间根据网络和CPU性能的差异在10到50分钟


构建 NNS canisters

回到目录/builds/dfinity-lab/dfinity,输入 打开./gitlab-ci/tools/cargo-build-canisters 移除第30行statesync-test-canister, 这个target的作用尚不明确,不移除的话现在会导致编译失败,官方最近应该会修复. 编译多个canister,输入

./gitlab-ci/tools/cargo-build-canisters

查看构建的结果


replica和nodemanager编译的binary会保存在/cargo_target/debug 编译好的canister会打包保存在/builds/dfinity-lab/dfinity/artifacts/canisters

展望


目前互联网计算机由48个独立的数据中心支持,运行着1300个节点,预计到今年年底将有123个数据中心运行4300个节点。后续我们会对开源代码进行剖析和优化,并且展开矿机选型和测试工作,在DFINITY网络开放的第一时间,以数据中心申请加入白名单。

西部超算(dfinity.com.cn)

长期关注DFINITY,核心技术团队来自微软、华为等资深工程师,持续跟进DFINITY挖矿和生态建设,提供矿池、矿机、定制化挖矿软件等解决方案。


进DFINITY中文社群,请添加小助手微信:Dfinity007