活动与资讯

助力企业逐步实现自动化

活动与资讯

活动与资讯

助力企业逐步实现自动化

活动与资讯

关于嘉为

19年行业积淀,嘉为助力企业从运维走向运营

关于嘉为
搜索
搜索
搜索
/
/
/
看蓝鲸标准运维如何编排一切

看蓝鲸标准运维如何编排一切

2019-07-26 15:13

蓝鲸智云,简称蓝鲸,是腾讯游戏运营部“腾讯智营”下的子品牌。它是一套基于 PaaS 的企业研发运营一体化技术解决方案,提供了一个完整的研发、运维、运营的PaaS技术平台。平台提供了完善的前后台开发框架、调度引擎、公共组件等模块,帮助业务的产品和技术人员快速构建低成本、免运维的支撑工具和运营系统;是腾讯游戏运营部沉淀多年的技术运营支撑体系,承担着数百款业务线上运营的使命。

对于蓝鲸不太了解和熟悉的同学可以移步这里:

http://bk.tencent.com/index/,

还有这里:

http://docs.bk.tencent.com/product_white_paper/introduction/。

请相信,你打开的不是两个链接,而是运维的新世界和新天地。

今天咱们的主角是蓝鲸这艘航空母舰上的一个主力输出炮位,它的名字叫“标准运维”。其实在我们之前的文章《先标准化还是先自动化:IT运维管理升级,该如何做是好?》中已经提到过这位仁兄,它能力强大以至于能够兼顾运维操作和运维流程的标准化和自动化。

但在那篇文章里对这位仁兄的介绍毕竟有些浮光掠影,今天作为本文的主角,我们来着重介绍下这位“大侠”的十八般武艺。

小故事:汽车制造业零部件通用化之路

在步入正题之前,请允许我先讲一个小故事:早期的时候汽车厂商生产汽车,哪怕同一个厂商的不同型号的汽车,所需要的零部件几乎是完全不同的;一个型号的汽车的任意一个零件,在其他型号的车上几乎是完全用不上的。

这带来两个问题:一个是由于零部件不通用,不同型号汽车需要完全采购不同的零部件,导致每个型号汽车采购零部件的成本都比较高;另外就是零部件完全不通用,事实上不利于流水线的复用、标准化和自动化。

所以从上个世纪开始,各大车厂内部都在极力推进零部件通用化。2009年的时候,汽车业巨头丰田汽车已经实现了70-80%零部件可以达到共用的差异化设计:仪表盘在20种左右汽车上可以安装;手动柄在40种以上汽车上可以安装。

丰田公司甚至提出了“不根据产品制造零部件,而是根据零部件制造产品”的经营理念,这样数以倍计的降低了生产的成本(2000年时候,年度成本降低总额由之前的1000亿日元翻倍为2000亿日元),并且对于不同汽车生产流程的标准化和自动化的推进也产生了很大的积极作用。

初登场:标准运维为何会诞生呢?

有的同学可能会说了:你说的这个跟今天介绍的标准运维有啥关系呢?别着急,请听我慢慢道来。

我们在企业内执行IT运维操作的过程中,其实不同的运维场景,也有不同的运维流程,不同的运维流程包含不同的运维操作步骤。

比如我们有这么两个运维场景:开新区、故障替换。这两个运维场景的运维流程如下所示:

“开新区”运维场景对应的运维流程:

“故障替换”运维场景对应的运维流程:

对比两个运维流程,发现第一个运维操作步骤都是“创建新主机”,这里我们假设内部使用的是vSphere虚拟化平台,实际上这两个流程中都需要登录到vsphere虚拟化控制台,分别创建两个虚拟机出来。每个运维流程,都要做一遍,即便能够一键创建VM,也比较麻烦,对吧?何况完成这一步之后,后面还有很多步骤要执行。

这里的运维场景就类似要制造某个型号的汽车,运维流程是制造汽车的流程,运维操作步骤是制造汽车要用的零部件。就像汽车零部件的通用化一样,我们也要实现操作步骤的通用化和复用化,通过通用化的操作步骤的灵活组装,将运维场景固化为统一的流程,借此提升运维场景的标准化和自动化。

那我们能不能考虑把“创建新主机”这个操作作为一个通用的原子操作,就像汽车制造中的一个通用的零部件一样,在每个运维流程中都能够复用呢?并且还能够像汽车流水线一样,把这些通用零部件(原子操作)通过不同的流程方式编排起来之后,通过输入不同的原子操作(操作步骤)参数,实现不同运维场景的一键流程化和自动化。

这就是标准运维这个强大引擎诞生的背景。

标准运维是拥有可视化的图形界面,并进行任务流程编排和执行的系统。

标准运维有两大核心服务:

一、调度编排服务

基于蓝鲸集成平台服务总线(ESB)原生集成蓝鲸平台的各个能力模块,比如CMDB、蓝鲸监控、故障自愈等;并能够对接企业内部各个系统API的能力,将企业内部多系统间的工作整合到一个流程模版中,实现一键自动化调度。

二、自助化服务

标准运维通过与蓝鲸集成平台深度整合,为用户提供了“轻应用”和“职能化”功能,让用户可以将业务日常的运维工作交给产品和职能化人员执行,实现业务的发布、变更等工作自助化。

标准运维功能详解

一、产品架构

标准运维的产品结构如图所示:

1、接入层包含权限控制、API接口和数据统计等;

2、任务管理层主要对应标准运维的任务编排和任务控制功能,任务编排包含基础单元原子框架和原子展示层,任务控制包括创建任务实例的模板校验和参数校验,以及任务实例执行时给提供的操作接口如暂停、继续、撤销任务等;

3、流程引擎负责解析上层的任务实例,映射节点原子对应的服务,并通过底层的蓝鲸服务总线(ESB)调用其他系统的API(如配置平台的创建集群,作业平台的快速执行脚本等),流程引擎还包括了具体的任务执行引擎和流程控制、上下文管理等模块;

4、标准运维作为蓝鲸平台的SaaS组件自从推出到现在经历了多个版本的变化。以下是版本变化的历程,目前最新的标准运维支持分支和并行执行、输出参数、字流程等高级功能;标准运维的功能进一步变得强大。

二、功能介绍

1、标准运维首页

标准运维在蓝鲸平台上体现为一个工具APP。首页界面如下所示:是一个全局视图,包含业务的任务执行统计、流程类型统计、轻应用类型统计、业务动态以及快速创建任务等内容。

2、任务流程

任务流程展示了当前业务下的已创建的流程模板列表页面,包含了快速搜索、新建流程、新建任务、编辑流程、预览流程、克隆流程、权限管理、删除、查看执行历史等操作。

3、新建流程

可以通过对原子节点、子流程节点与网关节点的组合,变量的配置与引用,配置出一个业务流程。

流程名称:是用来描述流程模板的,默认值是“new时间格式串”,可以自行修改,注意不能包含页面提示中列举的特殊字符。

流程节点:用户可以从左边的工具栏,拖拽合适的节点到画布中,并通过连线,组成合法的流程模板。

工具栏中流程节点包含流程控制节点和任务节点。流程控制节点包括:

开始节点——标识流程的开始;

结束节点——标识流程的结束。

流程控制节点还包括:

并行网关——标识并行执行的开始,

分支网关——标识分支执行的开始,

汇聚网关——标识并行或分支的结束。

请注意,每一个并行网关或者分支网关都需要配置一个汇聚网关来标识并行或分支流程的结束。

分支网关和并行网关类似,区别在于分支网关出度上的多个节点在执行时会根据分支条件启动分支表达式为True的一个分支流程,其他的分支则不会被执行。启动的分支执行完成后就立刻启动对应的汇聚网关,接着执行后续的流程节点。

任务节点包括原子节点和子流程节点。原子节点是标准运维内置的最小执行单元,一般对应于蓝鲸服务总线(ESB)的一次 API调用或者标准运维内置服务如定时。

单击原子节点可以配置原子节点的参数。其中原子类型可以选择一个标准运维接入的原子,输入参数、输出参数和选择的原子对应。

每个原子的参数一般不同,如“作业平台(JOB)-快速执行脚本”是对应作业平台的快速执行脚本API,需要填写脚本类型、脚本内容、脚本参数、超时时间、目标IP、目标账户等输入参数,在执行时,标准运维会把填写的前端参数转换为ESB需要的参数格式并调用API,然后根据API返回结果把JOB任务ID、JOB任务链接、执行结果(成功或失败)作为输出参数展示在执行详情中,后续的流程节点也可以引用前面节点的输出参数。

子流程节点可以选择已经创建的流程模板,在新的流程中引用并作为子流程执行。子流程节点的输入参数是选择的流程模板中显示属性为“显示” 的全局变量,也就是该子流程模板单独创建任务时需要填写的任务参数。输出变量是选择的流程模板中勾选了输出属性的全局变量。

4、支持全局变量

全局变量是一个流程模板的公共参数,通过 KEY 来做唯一性约束。用户可以在任务节点的输入参数和分支网关表达式中引用,标准运维会在执行任务时自动替换全局变量的引用为全局变量的值。

全局变量的来源有三种:

一是通过任务节点的输入参数勾选生成,这类全局变量的类型是“组件”,并且不能更改;默认值和来源原子的输入参数的表单类型一致,如原子节点的参数是单选框,勾选生成的全局变量也是单选框。

二是通过任务节点的输出参数勾选生成,这类全局变量类型也是“组件”,并且不能更改;无默认值属性,因为这类全局变量的值是由生成该变量的原子节点、子流程节点的输出结果自动生成的,用户无法手动设置;此外,这类全局变量的显示属性是“隐藏”,并且不能更改,表示执行任务时不需要用户手动填写这类参数。

三是用户在全局变量区点击“新增变量”生成,手动添加的全局变量类型可以选择输入框、文本框、日期时间、整数、IP选择器等,并且可以随时切换;这类变量可以自定义校验规则,这样在创建任务填写参数时,可以避免填写不合法的参数值。

5、任务执行

通过上述的任务流程的创建,事实上我们可以将许多非常复杂的运维操作场景编排成一个标准运维的流程。

比如下方是一个企业内部常规的应用版本发布流程,在没有标准运维之前执行起来是一个非常复杂的过程。需要在不同的服务器,不同的应用系统,不同的管理工具之间来回切换;需要记录和核对每一步的步骤,并且需要人工确保每一步都没有错误。

而有了标准运维之后,我们可以将上述的发布过程分解成一个一个的原子操作,然后通过标准运维创建流程,把这些原子操作串起来,如下图所示。其中最左边的“1、2、3、4、5”大的步骤,包括检查环境、屏蔽周边告警、版本部署作业、服务检测、发布业务公告等。

每个大的步骤中包含按照并行或者串行执行的原子步骤。例如第1步检查环境中包含“配置平台(CC)-创建集群”、“蓝鲸服务(BK)-HTTP请求”等8个小的原子操作。这些原子都是在一个统一的框架中,通过python语言编写原子后端逻辑并按需调整好整原子前端。

如下图所示:右边的原子库中包含了目前已经编写好的所有原子。我们只需要将这些原子拖拽到左边的界面中,构建流程即可。并且这些原子在后续创建其他流程的时候,是可以复用的。

最新版本的标准运维,界面更加炫酷,支持分支、输出参数、子流程等;并且提供更加直观的可视化界面。如下图所示:

流程是可以复用的。用户可以在“任务流程”页点击流程模板的“新建任务”按钮创建一个任务实例。

新建任务时,用户需要选择要执行的任务节点(也可以通过点击执行方案快速选择要执行的任务节点),并点击“下一步”。注意,只有设置了可选节点属性为“ON”的任务节点,才能在节点选择阶段选择不执行,其他的任务节点必须执行。

选择节点后,用户需要填写任务名称和全局变量参数,并点击“下一步”。  

在参数填写阶段,用户还可以点击“预览”,查看将要执行的任务流程图,这里会自动去掉在节点选择阶段选择不执行的任务节点。

在最后一步,用户可以点击“查看参数”确认变量替换后生成的每个任务节点的参数,如果不符合预期,可以点击“修改参数”重新填写任务的全局变量参数,确认无误后,点击“执行”就可以立即启动当前任务流程实例了。

在任务执行过程中,用户可以暂停任务,继续任务或者终止任务,任务执行到某个原子失败后也可以选择“跳过”或者修改参数后“重试”。

通过上面的标准运维编排,事实上我们可以将几乎所有的简单的,复杂的运维场景编排为一键可以执行,并且通过填写不同的执行参数可以无限复用的任务流程。

例如我们可以将下属的新集群搭建流程通过标准运维编排为流程。这里面涉及到与主机、数据库、应用程序、进程、监控、CMDB等各种组件和IT管理系统之间的交互和驱动,是一个非常复杂的流程。但由于这些组件和系统都能够提供API接口,能够通过ESB接入蓝鲸平台,因此所有这些操作都是可以通过开发原子、编排流程固化到标准运维上的一个流程中来。  

同理下述的业务发布流程也可以固化成标准运维中的一个一键式流程。

下方的模块故障替换流程也可以固化为一个标准运维的流程。

6、轻应用

在轻应用页面,用户可以根据一个已执行完成的任务创建一个轻应用到指定用户的蓝鲸桌面。

新建轻应用

用户可以选择一个流程模板创建出一个轻应用,这个轻应用可以在蓝鲸PaaS的应用市场中打开或添加到桌面,对使用人员而言,轻应用只需要关注一个流程模板的参数填写和任务操作,由于页面足够的简洁和友好,一个非技术人员也可以通过轻应用执行任务,这也就是标准运维提供的自助化服务之一。

注意,只有业务在配置平台设置的运维人员、开发人员、产品人员、测试人员和在PaaS人员管理中设置的职能化角色才能访问轻应用,如果需要某个用户可以通过轻应用创建任务和执行任务,请提前在任务流程中选择轻应用引用的流程模板,在权限管理中对用户授权。

编辑轻应用

如果需要修改轻应用的名称、简介或者LOGO,请在轻应用列表中,通过鼠标选择需要修改的轻应用,点击编辑图标后,在弹窗中填写修改后的参数。注意,不能修改轻应用引用的流程模板,如果需要这样做,请删除旧轻应用后重新创建新的轻应用,并引用新的流程模板。

删除轻应用

如果需要删除轻应用,请在标准运维轻应用列表中,通过鼠标选择需要修改的轻应用,点击删除图标后,在弹窗中二次确认并删除,删除成功后会同步删除PaaS上的轻应用。

7、职能化中心

标准运维为用户提供了“职能化中心”功能,可以让运维将业务日常标准化的发布、变更等工作交给职能化人员(业务操作员,负责实施运维工作中常规性、重复性的操作)来操作,让业务运维有更多时间和精力去优化和提升业务的质量和体验。

如果一个用户在蓝鲸集成平台的角色管理中被设置为“职能化”角色,那么该用户进入标准运维时只有职能化中心和帮助文档功能。在职能化中心页面,职能化人员可以看到所有业务的职能化任务,并在这里认领任务,按照运维提单的指定时间执行任务,并反馈任务执行结果给提单人员。

注意,业务运维人员在提交职能化任务单据给职能化人员执行前,必须在对应任务流程模板的权限管理中给职能化人员授权,即在“可填写信息的人”和“可执行的人”选择所有职能化人员或者指定职能化的某个人。

三、原子开发:一切操作皆原子

蓝鲸平台提供了原子开发的完整框架,通过这个框架可以快速实现跨系统的各种类型操作的原子化。下面简单介绍下原子开发的步骤。

1、创建Django APP 和目录结构

在根目录下执行 Django-admin startapp custom_atoms ,然后新建components/collections 和 static/custom_atoms 目录。

2、修改settings配置

打开conf/settings_custom.py文件,找到INSTALL_APPS_CUSTOM,加入步骤1)中创建的custom_atoms。

3、接入ESB API

如果需要调用自定义的API,请在完成ESB接入后,更新标准运维bluking/component下的文件。

4、原子后台开发

在custom_atoms/components/collections 目录下创建 test.py 文件,其中需要定义的属性和类如下所示。

test.py 属性详解:

  • group_name:原子所属分类(一般是对应 API 的系统简称,如配置平台(CC))

  • class TestCustomService(Service):原子后台执行逻辑

  • need_schedule = True:是否是异步执行,默认为 False

  • interval = StaticIntervalGenerator(5):异步原子的轮询策略

  • def execute:前端参数获取、API 参数组装、结果解析、结果输出

  • def schedule:轮询逻辑、结果输出

  • def outputs_format:输出参数格式化

  • class TestCustomComponent(Component):原子定义

  • name: 原子名称

  • code:唯一编码

  • bound_service:绑定后台服务

  • form:前端表单定义文件路径

TestCustomService中execute函数详解:

  • 可以是任何 python 代码,如果对应于 ESB API 调用,一般分为参数组装、API 调用、结果解析。

  • data 是原子前端数据,对应于前端的表单,可以用 get_one_of_inputs 获取某一个参数;执行完成可以使用 set_outputs 写入返回值和异常信息(ex_data)。

  • parent_data 是任务的公共参数,包括 excutor—执行者,operator—操作员,biz_cc_id—所属业务 ID。详细请查看 gcloud/taskflow3/utils.py。

  • 返回 True 表示原子执行成功,False 表示执行失败。

TestCustomService 中 execute函数详解:

  • 返回列表格式。

  • 列表格式的每一项定义一个返回字段,是 execute 函数中的 set_outputs 输出的字段的子集;key—输出字段标识,name—输出字段含义,type—输出字段类型(str、int等python 数据结构)。

TestCustomService 中 shedule 函数详解:

  • 由 interval 控制调用策略,如 pipeline.core.flow.activity.StaticIntervalGenerator(每隔多少秒轮询一次)、DefaultIntervalGenerator(每次轮询间隔时间是上一次的两倍)。

  • 使用 self.finish_schedule 结束轮询。

  • 返回 True 表示原子执行成功,False 表示执行失败。  

5、原子前端开发

在 custom_atoms/static/custom_atoms 目录下创建 test 目录,并创建 test_custom.js 文件,注意文件路径和原子后台定义的 form 保持一致。通过 $.atoms 注册原子前端配置,其中各项含义是:

  • test_custom:原子后台定义的 code。

  • tagcode:参数 code,请保持全局唯一,命名规范为“系统名参数名”。

  • type:前端表单类型,可选 input、textarea、radio、checkbox、select、datetime、datatable、upload、combine等。

  • attrs:对应type的属性设置,如 name、validation。

6、原子测试

创建流程模板,新增原子节点,原子类型选择新开发的原子,展示的输入参数和前端配置项一致,输出参数和后台outputs_format一致,其中执行结果是系统默认,值是True或False,表示节点执行结果是成功还是失败。

根据上一步创建的流程模板,新建任务执行后查看结果。

7、提交代码

执行 python manage.py collectstatic –noinput,然后就可以提交代码并打包发布了。

四、驱动一切:企业服务总线(ESB)

企业服务总线是蓝鲸集成平台中一个关键的组件。

企业服务总线有两个作用:

其一,为整个蓝鲸体系服务,蓝鲸的其他平台,如:配置平台、作业平台、数据平台、容器管理平台、AI 平台,均可以将各平台的特性以 API 的形式对接到组件中,便于集成平台上的 SaaS 调用,整合各个平台的强大功能,发挥最实用的价值。

其二,第三方系统,如微信公众号/企业号、邮件系统、OA 系统、AD 系统、财务系统、虚拟化平台等非蓝鲸体系内的运营系统,同样以 API 的形式将特性对接到组件,丰富和完善整个集成平台企业服务总线的服务。从而使集成平台之上的 SaaS 可以调度一些,连接一切。

“ESB 管理”仅限于“管理员”角色操作,从“开发者中心”—>“ESB 管理”进入使用。

“ESB 管理”给出了详细的使用文档,分为以下几个部分:

1.简介:概述 ESB,并指出 ESB 接入的两种方式:编码方式(采用 Python 语法)和自助接入方式(又称 API Gateway)

2.系统管理:ESB 来自于哪个系统,可以看成是ESB的分类

3.通道管理:ESB 访问的路径管理

4.组件自助接入:目前仅支持 http 请求形式的自助接入

5.使用指南:详细的 ESB 接入、使用教程,以及如何为新加入的组件生产/更新“组件文档”

6.ESB 文档:查询蓝鲸官方,自己接入组件的使用样例

通过ESB事实上可以实现企业的例如ITSM工单系统、AD、Exchange、数据库管理系统、存储、网络设备、备份系统、监控系统、虚拟化平台、公有云平台等等。

而这些平台上的所有操作,在提供了API接口的情况下,都可以分解为一个又一个的原子。因此事实上标准运维就具备了驱动这些平台和资源的几乎所有操作的能力。

并且这些功能还能够输出给工单系统,实现工单自动化;输出给监控系统,实现故障自愈操作;输出给资源自动化交付SaaS工具,实现各种资源的一键自动交付;输出给用户自助类APP,实现用户IT资源的自助申请和管理;输出给业务应用自动化类APP,实现应用对底层各种资源的自动驱动等等。

标准运维以自己的“不变”可以应对运维场景的“万变”,是不是非常厉害呢。

有兴趣的同学有福了,现在社区版也可以用标准运维这个工具了。腾讯蓝鲸最新社区版4.1已经正式发布,稍后将在其上释放标准运维SaaS工具,果断下载起来吧:http://bk.tencent.com/index/。


注:本文关于标准运维和服务总线部分介绍,摘自官方白皮书。文档链接:

http://docs.bk.tencent.com/product_white_paper/gcloud/

 

二维码
广州总部 电话:020-38851616
深圳嘉为 电话:0755-83668518
北京嘉为 电话:010-51705705
上海嘉为 电话:021-61269880
© Power by Tencent
© 2019 广州嘉为科技有限公司. All rights reserved. 粤ICP备19059200号
  • 嘉为
  • 嘉为
    嘉为
  • 嘉为

    服务热线:
    广州总部 020-38851616
    深圳嘉为 0755-83668518
    北京嘉为 010-88578622
    上海嘉为 021-61269880

  • 嘉为
  • 嘉为