华为云Stack 通过高内聚低耦合的积木式架构、简单易用的 自动化 交付平台、傻瓜式自动化端到端验收以及标准化模型沉淀实现高效建云,把全栈云平台大批量低成本复制到数据中心。
云平台自身固有的复杂性决定了建云是一个浩大的工程。在讨论云平台安装部署之前,我们不妨先看看一些简单软件的安装成本和对实施人员的技能要求:
软件 |
安装步骤 |
实施人员的技能要求 |
实施周期 (不考虑物料采购周期) |
Nginx单机版 |
初始化Linux服务器、yum install,然后按需修改配置文件 |
Linux基础命令 |
1小时内 |
MySQL主备集群 |
初始化Linux服务器、在主备节点上分别yum install,然后配置主备关系,启动服务 |
Linux基本操作及MySQL基本的维护经验 |
2小时 |
企业门户网站 |
初始化Linux服务器、部署 数据库 、网站应用程序、nginx LB,配置DNS解析记录 |
linux基本操作、数据库维护、LB软件维护、DNS软件维护 |
2天以上 |
中等规模的企业应用 |
初始化Linux服务器,部署API网关,部署X套数据库、N个微服务组件、LB,配置DNS,业务调测 |
除上述基本能力外,还需要充分理解业务流程,完成业务功能验证 |
1月以上 |
从以上表格可见,当交付一个复杂度与企业ERP系统相当的应用软件时,对交付人员的技能要求就已经比较高了,而且其交付周期已经严重影响了客户的业务发展。
下面我们再来看看华为云Stack的整体架构,以便对其复杂度有一个直观的感受:
图1 华为云Stack整体架构
华为云Stack逻辑架构上划分为资源池层、公共组件、 云服务 层、运维运营系统等几部分,每一层又由数十甚至上百个微服务及其依赖的DB、中间件、LB等组件构成,并且各微服务、服务之间存在非常复杂的交互关系。整体复杂度比前面提到的ERP系统高了几个量级。
面对如此复杂的分布式系统,如果采用传统的人工交付方式,其交付周期将是不可接受的,而且对交付人员的技术能力也会有非常高的要求。
为了应对华为云Stack批量快速交付的挑战,我们主要采取了以下几个方面的措施:
1. 产品研发阶段,采用积木式架构,确保一个逻辑层、每一个服务单元的高内聚低耦合。
2. 通过自研的一键式自动化交付平台,驱动整朵云自下而上的自动化部署。
3. 通过云平台自动化验收工具确保交付的有效性,降低现场调试成本。
4. 通过标准化的数据中心级建模,为后续升级提供数据支撑,确保已交付站点的长期可持续升级演进。
下面我们对每一种措施展开详细的介绍。
高内聚低耦合的积木式架构
积木式的软件架构是高效交付的前提。试想你要建造一栋大楼,但是运到工地上的都是一堆堆的沙子、水泥、钢筋、木头,需要现场测量,现场浇筑各种构件,那么其建设效率和质量将极其不可控。因此在现代化的建筑领域,一般会在工厂里根据架构师设计好的图纸批量生产标准的预制件,然后在施工现场进行组装,通过搭积木的方式快速完成建设。
华为云Stack在研发阶段,已经充分考虑了软件的可交付性,主要采取的措施包括:
• 通过华为公司自研的软件建模工具对每个服务单元的交付模型、部署模型进行详细设计及多轮评审,明确每个服务单元的部署、运行依赖。
• 通过分层架构方法,明确定义每一层之间的接口,并通过API管控工具确保每一层对外提供的API的稳定性,进而降低各服务间对接的复杂度。
• 通过领域建模,抽取大多数服务所依赖的公共组件,以服务化的方式进行统一管理,从而提升了其标准化水平和交付效率。
• 制定了一套统一的安装部署开发框架和规范,确保来自不同团队的各种云服务的部署方式的统一。
以云主机服务ECS为例,在架构设计阶段,可交付性方面要完成如下设计:
图2 云服务设计可交付性相关设计
在开发阶段,除业务功能代码的开发外,每个服务还要根据自动化部署的开发规范开发自动化部署插件包,该插件包中包含了安装部署的每一个子步骤的描述、参数声明、依赖关系声明以及相关的部署脚本。部署插件屏蔽了云服务内部的复杂细节,对外提供了统一的交付接口。对华为云Stack的交付人员来说,无需理解要部署的是IaaS服务还是ManageOne云管平台,大大降低了交付人员的学习成本和技能要求。
经过以上措施,华为云Stack中的每个服务单元都变成了一块“乐高积木”,提供了标准的“卡槽”,为高效交付打下了坚实的基础
简单易用的自动化交付平台
通过良好的架构设计,我们有了一堆可根据客户需求灵活组装的积木。但是,玩过乐高的朋友可能深有体会,对于大型的乐高模型,虽然每一块都有标准的接口,但是面对成百上千块积木,要把它拼装起来,仍然是一项浩大的工程。
为了实现华为云Stack中成百上千的微服务的搭积木式交付,我们研发了一个高度灵活的可视化、自动化交付平台(HUAWEI CLOU Stack Deployment Platform,简称HCSD)。该平台的主要功能如下图所示:
图2 自动化部署平台(HCSD)架构
该平台相当于一个自动化搭积木的机器人,一线交付人员把软件包和通用原子能力库导入到交付平台中,然后通过可视化UI按需选择要部署的服务或组件,根据页面上的提示导入参数表,启动部署工程。接下来任务执行引擎会加载所有云服务包中的部署插件,根据插件中定义的子任务依赖关系描述生成DAG并进行拓扑排序,然后并发执行安装任务,完成云平台软件的部署和配置。在部署完成后,还会自动化执行每个云服务插件包中定义的E2E验收用例,并自动生成验收报告。
基于该平台,华为云Stack的整体软件交付流程和工时如下(以200台物理机规模为例):
图4 华为云Stack端到端交付流程及工时
傻瓜式自动化端到端验收
传统的软件交付过程中,软件部署完成后,会由对业务流程比较精通的专业人员通过实际操作来验证软件交付的正确性。这种方式对于简单的软件来说是可行的,但是面对向华为云Stack这种复杂的分布式系统,如果想通过人工把所有验收用例执行一遍,既耗时耗力,又难免出现各种人因差错而影响验收结果的有效性。
为了提升验收的效率和有效性,我们在软件设计阶段引入“可测试性”设计环节,在功能特性设计之初就充分考虑了可测试性,并对E2E用例进行了详细设计。在开发阶段,会按照统一的规范把这些E2E测试用例代码化,并随交付件一起发布。
目前涵盖的主要自动化E2E验收用例包括:
• 各云服务主要API的端到端调用,如:创建VPC、上传VM 镜像 、创建VM、VM网络互通性验证、删除VM等。
• 自动点击云服务Web Console的链接和按钮,抓取页面截图。
基于该自动化验收调测工具,生成了Web版本和Word版本的验收报告。更重要的是降低了对交付人员的技能要求,为华为云Stack大批量复制提供了重要支撑。
标准化模型沉淀,为云平台持续升级演进提供有力保障
数字化 建设是一个长期持续的过程,云平台作为数字化平台的基座,必须具备长期的可持续升级演进能力。因此在研发阶段、交付阶段要充分考虑云平台的可升级能力,为后续的维护、升级提供必要的数据支撑。
目前在华为云Stack以ManageOne CMDB为载体,沉淀了整朵云运维变更相关的核心元数据。
图5 CMDB运维数据模型
这些数据在研发阶段是由各云服务团队维护的,在部署阶段由HCSD汇总并注入CMDB。
为了降低运维数据的维护成本,我们基于json schema定义了一套数据模型校验基线,并给所有云服务的代码库配置了门禁,每次代码提交都会触发自动化模型校验,确保数据的准确性。
在云服务软件发布阶段,各云服务按照规范把运维基线数据打包随交付件发布,然后由HCSD自动化写入CMDB。
通过这种方式,华为云Stack做到了整朵云一键端到端自动化升级,为政企客户数字化资产的可持续运营打下了坚实的基础。
目前华为云Stack从架构设计到代码开发、从发布到交付,已经形成一条高度标准化的流水线。未来我们会持续在新的交付模式上进行更多的创新探索,把华为公有云上的新技术、新特性第一时间复制到客户数据中心,为客户打造通往数字化转型的高速公路。