掌控一切——如何利用蓝鲸作业平台实现自动化

蓝鲸作业平台使用介绍

Posted by 老麦 on December 20, 2018

写在前面

在《 持续交付:发布可靠软件的系统方法》一书中,作者着重强调了持续交付的原则,包括:为软件的发布创建一个可重复且可靠的过程;将几乎所有事情自动化;把所有的东西都纳入版本控制等等,可见自动化是实现持续交付的关键能力。今天主要介绍一下和运维关系最密切的作业平台,看看蓝鲸作业平台是怎么让运维从大量重复性、规律性的人肉操作中解放出来,在实现自动化的同时如何专注于提升运维服务质量,做更有价值的事情。

作业是一系列运维操作的抽象定义,任何一个运维动作都可以分解成一步一步的原子步骤和对象,不论是发布变更还是告警处理,都是可以分步骤的。作业平台可以让运维定制各种线上操作,封装和组合任意脚本,供运维自己本身或其他团队使用,作业平台是实现运维无人值守的前提,其最大作用是固化操作,减少失误,节约人力,和杜绝重复劳动。

作为自动化运维平台最核心,作业平台是运维团队最关心的功能模块,如果再加上CMDB(配置平台),这两块基本就能解决大部分企业80%的业务需求和场景了。当然,我们在《授人以渔——为什么选择蓝鲸来构建企业的自动化运维体系》一文中,提到过蓝鲸PaaS(开发平台)的强大之处,可以作为自服务和工具平台,让开发、业务等部门提供根据自身需求来开发其他高级扩展功能,如 CI/CD、数据分析、业务监控、辅助运营等。

蓝鲸作业平台简介

作业平台(Job)是一套基于蓝鲸智云管控平台 Agent 管道之上的基础操作平台,具备大并发处理能力;除了支持脚本执行、文件拉取/分发、定时任务等一系列可实现的基础运维场景以外,还运用流程化的理念很好的将零碎的单个任务组装成一个作业流程;而每个任务都可做为一个原子节点,提供给其它系统和平台调度,实现调度自动化。作为稳可靠的、具有大并发处理能力的操作平台,蓝鲸作业平台已经在腾讯互娱运行多年。

以上是蓝鲸作业平台的官方定义,听上去有些绕,但对熟悉运维的同学来说,可以把作业平台当成Ansible、SaltStack或者Chef之类的配置管理工具,只是上手更快,操作更便捷,稳定性和并发处理能力更强。。。

主要功能和优势

  • 更灵活、快速的文件分发 作业平台的文件分发采用智能 BT(BitTorrent)方案,使得文件分发更加高效:小文件(小于10KB)通过传统的“1 对多”的TCP方式分发,大文件自动切换BT传输方案,充分利用网络带宽,1GB大文件分发1000台服务器最快只需要168s。
  • 更清晰的web化脚本管理 云化脚本管理模式,帮助运维团队协作 管理更清晰;多个协作者可借助平台进行脚本共享使用;脚本版本管理可以轻松切换多个场景需求;公共脚本将常用的重复性的命令集成功能脚本
  • 万级并发,让批量执行更高效 真正意义上的支持过万级并发执行任务(腾讯互娱业务场景验证),不必因企业发展加速、服务器管理规模扩大而带来的操作执行性能和效率上的问题而担忧。
  • 流程式管理,一切皆“作业” 面对特定的版本发布或变更的特性场景下,我们往往需要执行多个步骤;例如停进程、拉取版本文件、分发版本文件到各个节点机器,最后再拉起进程正式对外服务,这就需要很多个步骤执行动作。通过作业平台的作业 管理,用户只需要将某一个特定业务场景的脚本或文件传输操作,按照任意顺序组装定制成一个作业任务,以后便可一键完成整套操作。
  • 云化“分钟级”定时任务,执行时间更精准 继承Linux系统自带的分钟级定时任务,作业平台实现云化定时任务管理,用户不再需要登录主机修改定时任务,且每个定时任务执行过程都会被记录日志,让一切操作都可追溯。
  • 开放API接口,以原子形态连接一切 作业平台还开放了API接口,以原子节点的形态开放提供给其它系统或平台进行调度,真正意义上的“连接一切”。
  • 多种脚本语言支持,让编码随心所欲 支持 shell、bat、perl、python、powershell 多种脚本语言;shellcheck功能,自动补全命令和修正语法bug,编写代码更轻松。

入门指南

  • 快速脚本执行

    可通过手动编写、从已有的脚本克隆、从本地上传,三种方式导入脚本并批量执行。

  • 快速分发文件(本地到服务器)

    支持本地上传和服务器上选择两种方式,除了一对多,还可以多对多、多对一形式进行文件分发。

本地到服务器 服务器到服务器

  • 常用作业执行

    作业是所有运维最常使用的功能,蓝鲸常用作业执行引入了流程编排的理念,将原子任务组装成一个复杂的运维场景,比如版本发布、变更、扩容,也可以把原子任务提供给上层SaaS(如标准运维、故障自愈等)实现调度自动化。蓝鲸作业执行还包括上面提到的一些子特性:快速脚本执行 快速分发文件 快速SQL执行 定时作业

创建一个常见的发布场景作业(包括分发补丁、停服、更新二进制补丁、更新DB补丁、起服等5个步骤)

同类工具对比

对比维度 蓝鲸作业平台 Saltstack Ansible
命令行是否收费
是否有Agent
Agent开发语言 C Python
Web页面 免费 企业版(官方收费) saltpad(开源) Tower(官方收费)
API 开放 开放 开放
支持OS 主流操作系统(Linux/Windows) 主流操作系统(Linux/Windows) 主流操作系统(Linux/Windows)
支持主机数量 无限制 命令行无限制 页面限制 命令行无限制 页面限制
权限控制 以业务隔离
任务编排 图形界面 YAML YAML
计划任务 支持 支持 不支持
排队方式 ActiveMQ ZeroMQ python队列
文件传输方式 SmartBT tcp ssh
Agent安装方案 Agent安装工具 salt-ssh命令行工具 无Agent
安全级别 高,基于ssl的私有协议证书 中,AES实现及key管理 高,ssh自带加密传输功能
容错处理 有超时机制+强制终止 超时机制 超时机制
审计级别 高,永久保留了每次的执行日志和参数 低,可记录执行过的命令 无记录

脚本执行对比:

对比维度 蓝鲸作业平台 Saltstack Ansible
500台-命令执行(秒) 1.4 1.9 7.3
1000台-命令执行(秒) 1.8 3.2 14.1

文件分发对比:

对比维度 蓝鲸作业平台 Saltstack Ansible
50台-10K文件传输(秒) 8.0 0.8 1.6
500台-10K文件传输(秒) 10.0 1.7 12.2
1000台-10K文件传输(秒) 30.0 3.5 37.7
50台-500M文件传输(秒) 97 151.3 164
500台-500M文件传输(秒) 128 暂无数据 2670
1000台-500M文件传输(秒) 153 暂无数据 暂无数据

总结

蓝鲸作业平台无疑是强大的,并且其功能依然在持续迭代和提升。但企业实现自动化运维不能只依靠工具和平台,也要结合自身的组织架构、运维流程和技术体系的实际情况,要借助熟悉这些运维场景的服务专家,按照DevOps和持续交付的最佳实践来落地企业的自动化运维体系。这篇文章只是简单的功能介绍,我们会在后面把通过一个Oracle数据库软件安装的过程,把作业平台、标准运维、CMDB等蓝鲸平台和组件完整的串到一起来实现一个常见的运维场景。