1.Liquid整体架构
Liquid架构在功能层面由上至下总共划分为三个层级,分别是:网络应用层、网络管理层、安全传输层。
功能架构图如下:
网络应用层:是指使用Liquid来实现网络通讯的上层应用集合,Liquid是使用应用协议(protocol.ID)来区分标识上层应用的,每个应用模块都应该有一个全局唯一的应用协议。应用协议描述详见4.1。消息发布及订阅模块(PubSub)是Liquid内置的一个应用。
网络管理层:负责Liquid网络节点间连接状态管理,由多个管理组件组成,它们包括但不限于:应用协议管理(包含应用协议交换机)、节点信息管理(PeerStore)、连接管理(ConnMgr)、数据流管理(SendStreamPool/SendStreamMgr/ReceiveStreamMgr)、组播组件、连接状态维护组件(ConnSupervisor)、节点发现(Discovery)、节点路由(PeerRouting)、节点中继、NAT穿透等。其中应用协议交换、节点发现也是基于应用协议支持实现的,它们属于管理层内置的应用模块。
安全传输层:负责底层网络协议支持及传输加密,目前已实现TCP/TLS、QUIC两种协议支持,未来会有更多(比如WebSocket、SCTP等)协议支持。
2.Liquid核心包
Liquid网络核心包里包含了框架核心接口定义、通用类型定义及概念抽象定义。
核心包内每个子包说明如下:
core/basic 基础接口包,包含Starter、Stopper以及两者组合封装接口Switcher。
core/blacklist 黑名单接口定义。
core/broadcast PubSub消息发布/订阅功能接口定义。
core/discovery 节点发现相关接口定义,包含Announcer、Discoverer以及两者组合封装接口Discovery。
core/groupmulticast 组播组件接口定义。
core/handler 用于回调的处理器函数类型定义。
core/host 网络Host接口定义、网络活动事件通知接口定义。
core/mgr 管理组件接口定义,包含连接管理(ConnMgr)、连接状态维护(ConnSupervisor)、应用协议管理器(ProtocolManager)、应用协议交换机(ProtocolExchanger)、发送流池(SendStreamPool)、发送流池管理(SendStreamPoolManager)、接收流管理(ReceiveStreamManager)等接口定义。
core/network 传输层网络状态机相关接口定义,包含发送流(SendStream)、接收流(ReceiveStream)、双向流(Stream)、连接(Conn)、状态(Stat)、拨号器(Dialer)、监听器(Listener)、网络状态机(network)等以及相关的其他的接口或类型定义。
core/peer 节点相关概念接口定义,主要包括节点ID(peer.ID)类型定义。
core/protocol 协议相关定义,主要包括应用协议(protocol.ID)类型定义及网络数据包结构体定义。
core/reuse 端口复用相关。
core/routing 节点路由相关接口定义。
core/store 节点信息存储相关概念接口定义,主要包括节点地址簿(AddrBook)、节点协议簿(ProtocolBook)以及两者组合封装接口(PeerStore)定义。
core/types 通用类型或结构体,包括先进先出缓存(FIFOCache)、固定大小超时控制缓存(FixedCapDurationCache)、连续数字记录集(IntervalSet)、通用集(Set)等。
core/util 通用工具集合。
3. Liquid实现代码结构
在Liquid开发时,我们尽可能的保证了它的通用性。Liquid虽然是为了chainmaker而生,但我们并不限于它只能被chainmaker集成使用。我们也尽可能将不需要使用者关心的组件及配置进行了隐藏(非导出处理),为了能让开发者更容易读懂我们的代码结构,所以Liquid实现代码并没有严格按照2.1中描述的框架设计。以下内容都是描述Liquid内部默认实现,开发者可以根据核心包定义接口自行编写实现来替换Liquid内置默认实现。
BasicHost(在net/liquid/host/host.go中)是Liquid内置默认Host实现,也是网络初始化的总入口。