随机数|读懂Dfinity:去中心化云计算平台+高性能区块链网络( 五 )


我们可以看一份 Dfinity 提供的节点服务器硬件要求。
随机数|读懂Dfinity:去中心化云计算平台+高性能区块链网络
文章插图
我们可以看到节点服务器要求 16 条 32GB 的内存和 3.2TB 的 SSD。相比与以太坊验证节点 4GB 内存和 290GB SSD(https://nimbus.guide/hardware.html) 的配置要求来说算是比较夸张了。当然对于存储来说,更夸张的是 Filecoin,需要 1TB 内存和 16TB SSD 的配置 (https://zhuanlan.zhihu.com/p/337597732)。
ICP 的计算和状态存储基本都是跑在内存上的 (类似比如中心化云平台 SAP 的 HANA),硬盘可能只是起到一个镜像存储的作用,因此对内存的要求比较高。这就类似游戏服务器和网页服务器的关系,游戏服务器(类似 ICP 上以及传统中心化应用)需要处理应用无数多的状态(聊天、装备、伤害、血量等);网页服务器(类似以太坊上的应用)相比之下就比较无状态,可能更多的是每次去数据库读取不同的数据就可以。和 Filecoin 相比,ICP 并不是专注于存储,而是 Serverless,存储的数据可能就是常规的应用数据、应用状态以及应用代码本身,所以也不需要那么夸张的存储要求。
链上应用实现方法链上应用的项目结构非常类似以太坊。

  • 前端:Web 端 React 或 Vue 等框架,手机端 React Native 或 Flutter
  • 后端:Motoko(Dfinity 开发的编程语言) 或其他任何能打包编译成 WASM 的语言 (比如 Rust)
  • 数据结构 : Canister(Dfinity 为此开发了类似 JSON 的接口描述语言 Candid)
1. Cancan (类似抖音的短视频平台)源码网址:https://github.com/dfinity/cancan
随机数|读懂Dfinity:去中心化云计算平台+高性能区块链网络
文章插图
Cancan 类似 ICP 平台上的抖音。Cancan 的前端是用了 Web 端 React 框架,后端是用了 Dfinity 自研的 Motoko 语言。Motoko 的部分还用到了 Motoko Package Manager Vessel 这样的高级功能。除此之外也用到了系统的一些 API,包含了测试和持续集成,而且注释也写得非常详细。Cancan 可以说是在很少的代码量里实现了一个非常标准化的 ICP 全栈应用,值得 ICP 开发者学习。
整个应用的状态都是使用了 Canister 容器和 ICP 来取代服务器、CDN、数据库等。
  • 前端:React 框架的资源都是在一个单独的 Canister 里 (https://github.com/dfinity/cancan/tree/main/src/utils/canister)。
  • 后端与数据库:视频数据和点赞等数据全部都在 Canister 定义了类型 (https://github.com/dfinity/cancan/blob/main/backend/State.mo)。同时要应对百万用户级别的访问,Cancan 用了一个 Motoko 里的高级数据类型:分布式哈希表。由于是类似 Serverless 的架构,Cancan 不用像传统前后端交互一样运作,而是类似能直接在数据库上进行 get 和 post 方法 (类似谷歌的 Firebase)。
总之,从 Cancan 的例子来看,当学会了 Motoko 并且熟练掌握这门语言以后,在 ICP 上的开发会无比高效而且完全不用担心最恼人的部署等问题。
2. Portal (直播平台)项目网址:https://ja7sy-daaaa-aaaai-qaguq-cai.raw.ic0.app
Portal 是一个比较新的 ICP 上的边看边赚,边播边赚的直播平台,目前正在 Alpha test。Portal 的源码暂时找不到,但是可以看出来前端用的是 React 框架。经过和开发人员的交流,可以知道 Portal 的关键的用户或代币数据都是在 ICP 上,视频的流媒体等数据的存储和分发是用的 Livepeer 协议。