前言
在《一键部署区块链背后的秘密(上)、(下)》中,我们以趣链BaaS为例,详细介绍:如何通过驱动模式高效支持不同区块链底层平台部署在不同的主机资源中,达到一键部署区块链服务的能力,该模式在后期运维方面,也可赋予区块链在云计算下的资源扩展能力及更稳定的可靠性,让区块链的运维具有更加灵活多样。
典型的管控平台模式
在云计算日趋盛行的当下,分布式架构大行其道。大多数管控平台采用将众多主机组成一个集群的模式,并将主机、网络、存储等计算资源进行抽象,实现精细化、多层次的灵活控制与管理。
如下所示,可理解为两个平面:控制平面和执行平面或数据平面。
为了更好地了解BaaS平台如何进行精细化的管控,我们可以先从区块链在云计算下运维的演进过程出发。
最初的部署
最初的区块链部署过程,需要人为管理主机,将链节点依次部署到运行主机上,部署架构如下所示:
显然,在节点数量少、主机资源相对固定、运维人员权责明确的场景中,该部署模式具有相对简单、成本低等运维优势。但在云计算大环境下,随着计算资源成本的降低,在保障整个系统稳定运行的前提下,用户可以选择直接更换而无需关注单机资源维护。因此,这一传统部署运维模式反而对区块链的维护、扩展及成本控制带来更多的挑战,其劣势包括:
1)缺乏一定的节点自恢复机制;
2)缺乏快捷灵活的节点扩展、变更组网架构等能力;
3)缺乏对主机资源的管理,无法灵活迁移节点;
4)缺乏中心化的配置管理系统,修改链节点配置相对复杂;
5)缺乏统一的网络访问控制;
缺乏统一的接入管理,应用接入相对复杂,并且没有对接入进行管控。
灵活扩展的驱动架构
因此,基于中心化管理、分布式网络架构的BaaS平台应运而生,可借助该平台实现良好的区块链运维管理能力,在一定程度上缓解或解决上述运维窘境。以趣链BaaS为例,如下图所示:
趣链BaaS创造性地采用了驱动+agent(主机代理)形式,实现业务规则的灵活定制与扩展。其中,主机驱动承载了主机资源管理的业务规则,链驱动实现了链节点部署、组网、状态监控等业务规则,前置代理驱动则具有链访问代理实例生命周期的管理规则。
控制器通过agent(主机代理)实时采集相关状态数据,包括主机状态、资源状态、链节点状态等状态数据。随后,控制器会将这些状态数据作为输入条件进行规则匹配,匹配相应的业务规则,进而触发相关业务动作的执行。
以链状态管理及节点恢复为例:
通过状态数据、多样的业务规则以及包含可灵活定制业务动作的执行器(主机代理agent),我们可以实现中心化的统一配置管理、节点自恢复、组网、链节点扩展等一系列复杂且有价值的功能。
如何利用驱动控制K8S
K8S作为当下最为流行的云计算管理框架,正在逐渐成为行业标准。由于其对运维管理对象优秀的抽象、灵活的扩展能力,赋予其丰富、多样的管理能力。
在驱动的管理框架下,通过将相应的控制规则抽象为驱动进行管理,能够方便的将BaaS平台构建在K8S的框架之上。具体实践中,BaaS会将K8S的逻辑对象进行组合管理,并在此基础上抽象成对应的业务规则,随后BaaS平台就可以拥有K8S丰富的运维管理能力,包括应用调度编排、运行时状态维护、网络访问管理、配置管理等一系列能力,进一步扩展BaaS的能力上限。
K8S集群中BaaS的逻辑架构如下:
其中,K8S赋予的运维能力如下:
配置管理:通过ConfigMap可以对节点配置进行管理。
存储管理:通过StorageClass、PVC、PV可以对远程存储进行管理。
服务发现:通过Service可以对节点进行自动发现,并进行节点负载代理访问控制。
调度策略:通过Deployment、StatefulSet、DemonSet等可以对链节点实现各种策略的调度编排。
进程隔离:通过Pod这种容器化的运行机制,可以对相同主机的不同链节点进程进行隔离,互不影响。
配额管理:通过Limit/Request等的资源限制手段,让节点或其他进程不至于占用主机节点太多资源导致崩溃迁移,并可以实时监控资源占用比例,来判断节点的运行情况。
K8S以pod为应用载体,在pod之上进行更多的控制管理,包括进程隔离、运行时调度编排、资源配额管理、运行状态管理、配置管理、服务发现、网络访问管理等一系列适合各种运维场景的能力。
更进一步地,通过将网络、节点、存储、计算资源等抽象为一个个逻辑对象进行管理,从而将一个个独立的主机联合组成集群,将运行环境扁平化,让运维不再关心应用运行在哪个主机上,应用实例在集群中动态漂移,让应用具有更多的灵活性、扩展性及稳定性。
总结
综上,以驱动为核心的运维管理架构,一方面可对BaaS进行中心化的驱动管理,另一方面在集群化的主机代理上执行相关的驱动Action。这一过程本质上将驱动抽象为业务规则及业务动作,可以在控制平面和执行层面分别进行控制,并进行动态更新。
通过上述控制架构,使得BaaS平台具备灵活适应各种云厂商主机、虚拟的容器化(docker、k8s)等运维环境并管理不同区块链底层平台的能力。由此,BaaS平台对于未知的变化,有了确定性的应对手段。