DFINITY (Internet Computer): 通过结合区块链网络节点的集体计算能力来创建“Internet Computer”,从而彻底改变互联网。Internet Computer是基于Internet Computer Protocol(ICP)区块链计算协议实现。
DFINITY 的目标是成为一个快速、安全、可扩展的云平台,它将为公共互联网的扩展出更多的功能,允许用户直接部署应用程序和安装代码,而不会出现影响比特币和以太坊等其他主要区块链的拥堵问题。
DFINITY = 链 + 云,换言之链上的云。
由小及大,下上贯穿
WebAssembly容器,罐子
Canister是DFINITY中管理的最小单位,它是用户应用的载体,允许WebAssembly的字节码在其中运行。
Canister具备3个属性:
一是智能合约:附加区块链功能;
二是Actor:自身数据只有自己可改,单线程执行无需锁,与外部交互只有消息
三是进程:WebAssembly, 用不Crash,可以被控制器创建、移动、销毁。
Canister只有两个标准接口update请求和query请求。
update请求会改变Canister内部状态(应用数据),多个Canister副本需保持结果一致性。
query请求不会改变Canister内部的状态,不需要保持结果一致。
Canister的接口不仅可以被外界访问,也可以Canister之间互相访问;多种不同的服务互相调用,本质上和K8S的微服务架构没有太多区别。
Canister中的程序和状态存储于子链上,在子链上持久化。Canister不提供直接访问硬盘的传统持久化功能。
此子网非传统网络概念中的子网,而是指一堆物理节点(nodes)的集合。
子网运行着多个Canister,对于同一个Canister, 每一个node都作为副本运行它。
对于外界的update请求,Subnet通过共识机制首先对请求排序,获得一致性的执行顺序后,每一个node的canister都按此顺序执行,最后每个Canister执行完之后,再通过共识机制形成一致的结果。
对于外界的query请求,会被分配到就近的Canister执行,返回用户结果。
所以一个Subnet的nodes通常会设置的比较分散,便于各地的用户就近访问。
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.