概要
- 一个节点是指运行着 Corda 软件的具有唯一标识的一个 JVM 运行时
- 节点对于外部世界包含两个接口:
- 网络层,用来同其他的节点通信
- RPC,为了跟节点的所有者通信
- 节点的功能是通过在 plugin registry 里安装 CorDapps 方式来扩展的
节点架构 Node Architecture
Corda 中的节点指的是在网络中具有唯一标识的运行着 Corda 服务和应用的 JVM 运行时环境。
下边是节点的内部架构图:
架构中的核心元素包括:
- 存储数据的持久化层
- 同其他节点沟通的网络接口
- 同节点的所有者进行沟通的 RPC 接口
- 允许节点的 flows 来调用节点其他服务的 service hub
- plugin registry 用来通过安装 CorDapps 来扩展节点
持久层 Persistence layer
持久层包含两部分:
- 账本 Vault,节点用来存储过去和当前 states 数据
- 存储服务 storage service,用来存储 transaction, attachment 和 flow checkpoints
节点的所有者可以通过使用 RPC 接口来查询节点的 storage。
网络接口 Network interface
同网络中的其他节点进行沟通是节点自己来处理的,作为运行一个 flow 的一部分。节点的所有者不会直接地同网络中其他的节点进行交互。
RPC 接口
节点的所有者是通过使用 Remote Procedure Calls(RPC) 来跟节点进行交互的。
Service Hub
内部的,节点可以在 flow 的执行过程中访问丰富的服务来协助更新账本。主要的服务包括:
- 网络中的其他节点以及提供什么服务的信息
- 访问 vault 和 storage service 的内容
- 访问和生成节点的公钥私钥对
- 节点本身的信息
- 当前的时间
The CorDapp provider
CorDapp provider 是新的 CorDapps 被安装的地方,来扩展节点的行为。
节点默认会安装一些 CorDapps 来处理一些常见的任务,比如:
- 从合作方那边获得交易和附件信息
- 更新合约
- 向交易其他放广播同意的账本更新信息,这样其他节点也会更新为相同的账本信息
排空节点模式 Draining mode
为了执行一次干净的关闭节点操作,没有正在执行的 flows 非常重要,也就是说应该没有任何的 checkpoints 被持久化。节点能够被设置为排空状态,在这个状态中:
- 通过 RPC 要求的启动新的 flows 的命令会被拒绝
- 预约的 flows 会被忽略
- 初始化 P2P 的会话消息将不会被处理,意味着 peers 将不能够初始化新的 flows
- 其他所有的活动还会照常进行,来确保正在执行的 flows 的数量在不断减少。
但他们的数量 - 可以通过 RPC 来进行监控 - 达到0,那么就是安全的了,可以进行关闭节点的操作了。