基于微服务的VPX机箱管理系统研究
2020-09-10刘峰
刘峰
(中国电子科学研究院,北京 100041)
引言
军用国产计算机工程应用日益广泛,而国产器件的稳定性、可靠性尚有不足,这对军用国产计算机设备的状态监控和健康管理提出了较高要求,如何提高军用国产计算机设备管理水平已成为军用国产计算机设备相关领域研究的热点之一。
通常,军用国产计算机设备硬件平台遵循VPXVITA 46.11[1]标准和IPMI 2.0[2]协议。机箱管理系统主要满足管理员通过统一的机箱管理系统平台上对机箱内不同功能刀片模块的监视和管理需求。
广泛应用在军事计算机设备的IPMI管理技术,为军事计算机设备的高可靠、智能化管理提供一种开放的机箱管理系统解决方案[3]。
机箱管理系统可有效地实时监控各模块的CPU、内存、硬盘、散热单元和主板等各部件的硬件工作状。此外,利用部署在功能模块操作系统侧的监控组件还可进行系统资源监控管理。
本文旨在从工程化角度出发,发现当下主流VPX机箱管理系统的设计缺陷,结合微服务架构提高国产VPX机箱管理系统的工程化和管理水平。
1 机箱管理系统
1.1 机箱结构组成
VPX是基于高速串行总线的新一代总线标准,可提供超大带宽和超大功率[4]。VPX总线目前广泛应用于军事等抗恶劣环境下,军用国产计算机设备多遵循VPX总线标准设计制造。本文设计的微服务化机箱管理系统基于由VPX架构的硬件平台刀片服务器机箱设计实现。
VPX架构的硬件平台刀片服务器机箱由机箱结构件和核心刀片模块组成。通常,基于对VPX机箱的功能需求和可靠性设计要求,VPX机箱设置2个VPX电源模块、1个或2个VPX数据交换模块及若干VPX功能模块。
1.2 管理系统架构
VPX机箱管理系统通常分为三个子系统:系统管理子系统、机箱管理子系统和板卡管理子系统[5]。
VPX机箱管理系统架构如图1所示。其中Agent是部署在各模块操作系统侧的监控组件。
系统管理子系统通常部署在国产Linux操作系统上,如银河麒麟或中标麒麟等。子系统通常为基于Qt开发的C/S架构管理软件,服务器端负责以太网总线消息过滤与解析,客户端负责参数监控与健康管理等人机交互操作界面。
机箱管理子系统通常由部署在交换模块上的ShMC(Shelf Management Controller,机箱管理控制器)和Agent组成,通过IPMB总线实现对机箱内其他模块的健康管理数据收集汇总,通过以太网实现数据统一上报。
板卡管理子系统通常由部署在机箱内其他功能模块上的ChMC(Chassis Management Controller,板级管理控制器)和Agent组成,处理对本模块管理请求和事件上报。
2 机箱管理系统架构演化
随着互联网和计算机技术的发展,软件系统规模不断扩大,系统需求量的激增和快速变更给系统开发带来极大挑战。在系统架构演变和迭代的过程中涌现出如单一应用、垂直拆分、分布式服务、SOA(Service Oriented Architecture,面向服务架构)、微服务[6]等一系列面向系统设计的架构思想。
VPX机箱管理系统的发展和迭代主要表现出从垂直拆分架构向SOA架构的演变趋势。VPX机箱管理系统向管理员提供面向机箱级别的监控管理服务,单一应用无法满足需求。我们根据业务功能和VPX机箱硬件特点对管理系统进行了自上而下的三级拆分,即上文提到的系统管理子系统、机箱管理子系统和板卡管理子系统。在这一阶段,我们称其满足垂直拆分架构范式。
满足垂直拆分架构范式的VPX机箱管理系统解决了针对不同模块进行优化的问题,方便模块水平扩展。同时,该架构存在拆分相互独立,重复开发工作繁重和开发效率低的问题。
VPX机箱管理系统通常会涉及ARM、X86、MIPS、PowerPC等架构的嵌入式基板管理控制器或板卡CPU,并需要满足多系统环境下的监控管理需求。机箱管理系统的发展过程中,通过服务重用和消息总线解决不同系统或架构之间整合的问题。在这一阶段,我们称其满足SOA架构范式。
满足SOA架构范式的VPX机箱管理系统通过消息总线(IPMB总线和以太网总线)来承载业务逻辑,并构建出中心化的中间件(ShMC)。系统在IPMB总线上走向集中,服务间依赖关系强,IPMB总线发生问题对系统影响较大。
与SOA架构类似,微服务架构设计方法也包含多个服务。微服务和SOA的特点对比见表1。
微服务架构强调业务需要彻底的组件化和服务化,即业务系统拆分成多个可独立设计、开发及运行的小应用。微服务中的每一个服务对应唯一的业务能力,做到单一职责和服务自治。
图1 VPX机箱管理系统架构图
表1 微服务和SOA
VPX机箱管理系统通常由嵌入式基板管理控制器、系统软件、数据库和人机交互等部分构成。VPX机箱内各功能模块处理器架构和操作系统互异,满足垂直拆分范式或SOA范式的机箱管理系统不能妥善解决异构带来的数据通信异构、组件在总线上集中化问题。
本文提出的VPX机箱管理系统设计方案,面向细粒度和服务自治,使开发团队独立、技术独立、前后端分离、数据库分离和部署独立。
3 微服务化关键技术
3.1 轻量级通信方式
微服务间通信基本方式是IPC(Inter Process Communication,进程间通信),应用于微服务架构的轻量级通信两种主流方式为REST(Representational State Transfer,表征状态转移)和RPC(Remote Procedure Call,远程过程调用)。
在RPC通信方式中,不同的服务具有不同的专有接口。每个接口具有自己的语义和操作参数,服务的接口契约对服务的定义非常关键[7]。在REST通信方式中,REST要求消息是自描述的,且数据格式取决于客户端和服务端协商结果是可以变化的[7]。
RPC通信方式在具备统一开发规范和统一服务框架条件下,传输协议更为高效和可控。对于强类型编程语言,如Java、CC++和Golang等,如果数据格式发生变化则需要重新编译使新定义生效。这就违背了接口与实现分离的原则,增加了服务间的耦合性。
REST通信方式允许服务处理多种数据格式,即客户端和服务端可以选取合适的数据格式,更容易实现和被接受。REST的设计约束有效地对客户端和服务端解耦合,使用HTTP标准的GET、POST、PUT和DELETE进行请求和响应。
基于RESTful接口和JSON数据模型的Redfish[8,9]服务器管理标准被分布式任务管理组采用为新的服务器管理标准[10]。Redfish使用现代网络接口方式,使用更简单,允许使用脚本编程方法访问数据[11]。
我们将基于Redfish标准实现的板卡管理功能服务化,作为系统服务层中的板卡监控管理微服务。该解决方案将用于提高VPX机箱管理系统的灵活性,进一步实现系统功能解耦。
3.2 服务注册中心
服务注册中心实现了VPX机箱管理系统服务之间的服务消费发现机制,用于服务消费之间互相感知,服务注册中心提供服务注册和服务查询功能的REST API(URL:/{service}/{version}/{ip:port}),并保存了各个可用服务实例的网络地址。服务端使用POST请求注册服务信息(ip:port)并周期性更新注册信息,可通过删除命令请求注销服务。客户端则通过对应的获取请求获取可用的服务实例信息。
服务注册中心必须要有高可用性和实时更新功能。服务注册中心定时向各个服务提供者发送一个请求,如果长期没有响应,服务中心将其剔除。一旦服务注册中心/{service}/{version}/{ip:port}路径上的数据增加或减少,服务注册中心都会通知服务消费者服务提供者地址列表已经发生改变,从而进行更新。
3.3 API网关层
API网关层提供的基本功能有:统一接入、身份验证、容错策略和流量监控等。
API网关层是微服务系统的唯一入口。API网关层封装了系统内部架构,保护内部资源并为客户端提供定制API。
VPX机箱管理系统具有服务实例类型复杂、业务逻辑复杂和安全性要求高等特点。如何有效地控制客户端及不同角色的资源访问权限对管理系统是一种挑战。我们在API网关层引入基于OAuth2.0[12]协议的身份验证机制,对客户端或用户进行授权管理。
我们在API网关层引入流量监控和容错策略来保障VPX机箱管理系统可靠性。常见的容错策略有快速失败、失效切换、失败自动恢复、熔断和限流降级等。
快速失败策略是指服务消费者只发起一次服务调用,失败立即报错。通常用于非幂等性[13]下的写操作。
失效切换策略是指服务消费者发起服务调用失败后,重试其他服务。通常用于非幂等性下的读操作。
失败自动恢复策略是指服务消费者发起服务调用失败后,记录失败请求后再次发起请求。通常用于非幂等性下的读操作或消息通知。
熔断策略是指服务调用失败比例过高,自动切断REST调用防止故障升级。通常用于可能失败的远程服务或共享资源。
限流降级策略是指为了保证核心服务的稳定性,随着服务访问量的持续增加,根据系统容量限制,为系统的服务数量设置一个上限,不允许超限工作。
4 微服务化系统设计
VPX机箱管理系统在微服务化前,通常为板卡管理子系统、机箱管理子系统和系统管理子系统三级架构。用户通过人机交互客户端访问板卡数据需经过机箱管理子系统代理。
借鉴微服务参考架构,将VPX机箱管理系统拆分成多个体量小的微服务/微应用。微服务化VPX机箱管理系统对板卡硬件管理和系统资源管理进行统一管理和维护。用户直接通过微服务网关访问数据,避免多余的请求和响应过程。同时微服务化后的系统自成体系,解决异构数据带来的系统复杂问题,避免系统在总线上走向集中。
基于微服务架构的VPX机箱管理系统架构实例如图2所示。
基于微服务的VPX机箱管理系统使用当下热门的前后端分离架构软件开发技术。前端服务是对后端服务必要的聚合和呈现,后端服务提供细粒度的业务逻辑操作。系统中的所有服务向服务注册中心注册后即可被感知。系统配置中心服务用于解决微服务间的依赖配置和运行期间的动态调整。日志服务承担系统运行期间日志记录业务功能。监控通知服务承担系统告警触发业务功能。
系统外部的请求可能来自于PC网页端、自动化脚本或其他应用服务等。API网关层是VPX机箱管理系统的唯一入口,所有客户端请求通过API网关层访问受保护的资源数据。
系统服务层由部署在各功能模块上的硬件监控管理服务和系统资源监控管理服务构成。为保障系统可靠性,我们在每个功能模块上均部署2个硬件监控管理服务和系统监控管理服务,通过API网关层做负载均衡控制。
与传统的VPX机箱管理系统比较,我们摒弃了系统管理子系统通过以太网总线级联ShMC再通过IPMB总线级联ChMC的三层架构。采用REST替代原SNMP或UDP报文进行进程间通信,避免异构系统下的数据格式繁杂和迭代困难等问题。我们利用前后端分离技术开发B/S架构的系统人机交互客户端,是系统可扩展性更强,并可服务于其他军用系统,为系统升级为集群管理系统奠定了基础。
图2 基于微服务的VPX机箱管理系统架构
5 结束语
一般情况下,VPX机箱管理系统均能较好的实现机箱管理功能。但基于面向服务架构设计的机箱管理系统缺乏工程化水平和机箱管理水平。主要表现在基于面向服务架构设计思想的机箱管理系统其业务逻辑高度耦合,无法妥善解决VPX总线机箱多异构带来数据异构和工程化管理难题,也难以解决因升级或需求变更带来的数据迁移、云或容器部署和系统维护等问题。
本文提出的VPX机箱管理系统微服务化设计方案,借鉴利用了高内聚、松耦合和去中心化等现代系统设计思想,专注于VPX机箱管理系统单独任务或小型业务逻辑组件化。具有易于开发维护、启动快、易部署和高伸缩的特点。