在上一篇文章《利用蓝鲸标准运维实现Oracle DataGuard一键切换》文章中,我们介绍了利用标准运维实现Oracle ADG切换的场景。本文是蓝鲸标准运维使用场景的第二篇,通过一个企业常见的应用发布场景,介绍标准运维在发版流程编排方面的使用。
标准运维简介
蓝鲸智云,简称蓝鲸,是腾讯游戏运营部“腾讯智营”下的子品牌。它是一套基于PaaS的企业研发运营一体化技术解决方案,提供了一个完整的研发、运维、运营的PaaS技术平台。平台提供了完善的前后台开发框架、调度引擎、公共组件等模块,帮助业务的产品和技术人员快速构建低成本、免运维的支撑工具和运营系统;是腾讯游戏运营部沉淀多年的技术运营支撑体系,承担着数百款业务线上运营的使命。
标准运维是一套通过成熟稳定的任务调度引擎,把多系统间的工作整合到一个流程,助力运维实现跨系统调度自动化的’SaaS’应用。标准运维拥有可视化的图形界面,用户可通过它实现任务流程编排和执行,包括发布、变更、开区、扩缩容等执行类操作场景。
简而言之,蓝鲸是监管控一体的PaaS运维平台,标准运维是蓝鲸平台其中的一个官方SaaS。
用户可以通过对标准插件节点、子流程节点与网关节点的组合,变量的配置与引用,配置出一个业务流程。
为什么需要应用自动发布
随着业务的不断发展,企业应用系统也变得越来越复杂,不同应用厂商,其背后研发团队间的技术栈,如所使用的开发语言、开发框架、操作系统、数据库等技术组合,以及发布变更、故障处理等运维操作场景和操作流程,都是不同的。应用架构的差异性和复杂性,也给 CI/CD 应用在包交付模式和灵活的编排上提出更多的挑战;
另外研发与运维团队职责不同和环境差异化,经常导致研发人员在对配置或环境进行修改之后,不会及时告知运维人员;而运维人员发布应用时,由于对运行环境和应用的内部细节缺乏了解,难以正确选择运行环境和控制发布流程,往往会遇到各种各样的问题,沟通成本非常高。
同时,业务要求更频繁的发布,如果仅仅依靠运维人员的手工部署,一方面效率低、易出错,另外也无法满足不断增加的应用系统和部署环境。所以,开发人员对自助发布的需求越来越强烈,希望能够通过自助平台实现一键发布。
通过蓝鲸标准运维实现持续交付
依托蓝鲸管控平台,以及上面介绍的流程编排利器标准运维
来实现应用自动发布。(蓝鲸管控平台是整个蓝鲸平台的底层管控系统,是蓝鲸所有其他服务的基础。管控平台通过Agent为蓝鲸其他平台提供了人机交互的通道与能力。蓝鲸管控平台主要提供了三种类型的服务能力:文件分发传输能力、命令实时执行与反馈的能力、大数据采集与传输的能力。)
以下图为例,通过标准运维
对应用发布流程进行分解,分解后的每个步骤可以包含多个原子,依次进行代码拉取,备份,以及分发文件等操作。我们可以根据固化的发布流程来创建任务,每个任务都是一次真正的业务场景作业,任务可以被暂停、被强制终止。通过标准运维的助力,实现更可靠的发布,提高部署频率,与业务目标保持紧密一致。
实际案例
下面以厚诺在某金融行业客户交付的实际案例为例,简单介绍一下通过标准运维完成应用发版的设计过程。为了演示方便,这里对发版过程进行了一些简化:
以上发版流程简单来说,就是运维人员从开发人员那里拿到包,分发到应用服务器对应的位置,然后执行解压、重启等到一系列操作。
虽然以上操作貌似简单,但是设想一下,如果发版是在凌晨两点的时候进行呢?如果每天待发版的系统有数十套之多呢?纯手工按照文档一步一步操作,稍不注意,可能就会出错且效率极低。虽然对于一些简单的场景,可以通过写一些脚本,来简化操作。可是,如果脚本的健壮性不好,或者人为误操作,传错了包等问题,还是会存在很大的安全风险。
可能经验丰富、水平较高的运维工程师,会想到通过Ansible、Puppet等开源的自动化运维工具来操作。但这些工具对初学者还是有一定的门槛,操作界面的友好程度也不足,无论是Ansible的Playbook语法,还是SaltStack的State语法,都是需要学习成本,某些情况下甚至要研究源码。
如果使用蓝鲸的标准运维,运维人员可以通过可视化的图形界面,利用标准运维强悍的跨系统编排能力,来串连碎片步骤从而提高发布效率,极大的降低人员误操作的风险。流程的整个编排过程非常容易上手,一次编排,多次使用。开发人员即便不熟悉CI/CD 工具,仍可直接使用平台提供的多种流水线模板,来创建符合自身业务需求的流水线,满足不同工作场景和特有的业务需求,大幅度提高工作效率。
先看下最终流程编排的效果:
设计过程
过程说明:
- 将包在测试环境部署,验证通过后,将测试包,流转到到生产环境的仓库。到了发版时间,运维人员点击,新建任务,执行即可。
- 通过(shell、python、bat、perl)脚本,验证此次发版包的信息,名称、MD5、时间等信息,如果信息不匹配,发送告警通知后暂停,等待相关人员介入。
- 通过作业平台,分发文件到多个主机,如果由于未知原因造成分发失败,可以发送告警通知后暂停,等待相关人员介入,也可以执行“重试”操作。
- 编写部署脚本,进行小批量部署,如果有一台部署失败,便会发送告警通知,然后暂停,等待相关人员介入或者跳过。
- 检验试部署无误后,便可以进行大批量部署。同样的,如果某一台因为意外情况发版失败,便会告警通知。
- 发版结束后,会发送通知信息,通知管理员此次发版结束。
可以看到,通过标准运维编排固化后的发版流程,具有以下特点:
- 整个流程执行过程中,每一步操作如果失败,都会及时触发告警,运维人员可以快速定位故障;
- 通过图形界面实时展示任务执行状态,直观地感知当前任务的进度;
- 运维人员可以选择执行发版操作的节点,比如只更新部分主机;
- 避免登录服务器,降低人为误操作风险;
- 用户在任务记录页面,可以追溯之前的任务执行情况;
- 用户可以选择上面的流程模板创建出一个轻应用,这个轻应用可以在蓝鲸PaaS的应用市场中打开或添加到桌面,对使用人员而言,轻应用只需要关注一个流程模板的参数填写和任务操作,由于页面足够的简洁和友好,一个非技术人员也可以通过轻应用执行任务,这也就是标准运维提供的自助化服务之一。
- 标准运维为用户提供了“职能化中心”功能,可以让运维将业务日常标准化的发布、变更等工作交给职能化人员(业务操作员,负责实施运维工作中常规性、重复性的操作)来操作,让业务运维有更多时间和精力去优化和提升业务的质量和体验。
- 可以对其进行二次开发。比如支持定时自动发版等,开发自己适用的标准运维插件,实现真正的无人值守。
总结
以上只是一个简化后的发版流程,用户可以在以上示例的基础上,轻松扩展和定制满足自身需求的任意场景,包括:
- 运维场景:发布、变更、开区、扩缩容,资源交付、容灾切换等执行类操作
- 其他场景:监控告警、配置管理、开发工具、企业IT、办公应用、其它