腾讯海量数据仓库运维系统 : 鹦鹉螺

一、前言

时值建军90周年之际,相信大家的朋友圈都被好友的“军装照”引爆刷屏。而在运维圈,则更多是被腾讯织云运维平台的运维能力所深深折服,并燃起熊熊的探索欲望。然而,在SNG内部,系统的最后端,还活跃着一群低调、坚韧的攻城狮--没错,就是我们的DBA团队。SNG社交网络运营部的数据组,负责着QQ、Qzone、相册、以及腾讯云CRS等整个SNG产品的数据运维,保障QQ、空间等社交产品的稳定运行,以及腾讯云上对外数据库产品的日常运维。目前数据团队拥有亚洲最大的nosql分布式数据仓库,日均数十亿的qps访问,过万台的机器设备。这么庞大的体量、繁复的工作,我们DBA是怎么完成的呢?

二、提升效率

随着业务的不断发展,新产品的不断开发,数据容量也不断增大:仓库数量也由原先的几十个逐步增长到几百个,机器数量也达到了惊人的几万台。随着CRS等数据库组件在腾讯云上售卖,dbc面对的网络环境由原先的自研网络逐步扩展到腾讯云、私有云等网络环境,网络差异带来的运维工作量和复杂度也直接翻倍。日常设备维护、机器上架、组件版本升级、仓库扩缩容等,这么庞大的体量和工作量,给我们dbc团队提出了严峻的挑战。

相对于web层和逻辑层等无状态、轻量级的组件,数据层组件则显得沉重很多。数据层组件有状态、重资产(数据),很多的运维操作过程复杂,更多的涉及数据搬迁。既然数据层对状态维护、准确性、一致性有着苛刻的要求,又希望能够适应业务的发展而做出快速调整,DBC团队依托织云(利用织云提供的api,如命令通道、包发布等)研发了自己的数据库管理平台:鹦鹉螺。鹦鹉螺将所有的运维操作分解为细粒度的原子操作,再通过流程把原子操作串联起来完成复杂的功能。前端用户发起的运维操作最终落到后端具体的原子任务或流程上。

例如对仓库接入机的扩容操作,用户在前端只需填入需要上架的机器列表,提交后由后端作业平台自动发起扩容流程并负责调度。

三、系统总体架构

    上图是鹦鹉螺系统的核心模块,主要包括DB-CMDB、变更中心(即作业平台)、数据中心、决策中心,还有前端的dashboard展示模块等。其中DB-CMDB记录了仓库相关的配置信息,如仓库包含的机器设备、所在网络区域,接入的业务信息,机器ip的角色信息(接入机角色、配置中心角色、cache角色)等等。变更中心--也就是作业平台,是实现运维操作的关键,鹦鹉螺系统对现网的所有操作都通过这个模块完成。数据中心包含了现网仓库的运行数据、指标数据、和相关告警数据,这也是决策中心的数据来源。在决策中心中,完成一些告警的预处理。对于常见的有预处理方案的告警,可以在这里设置,当告警发生时,由决策中心发起相应的处理措施。

四、变更中心(作业平台)

变更中心,也就是鹦鹉螺系统中的作业平台。它是一个分层的架构,从下往上,依次是底层工具层、任务层、流程层,总体架构图见下图。采用分层结构,任务层、流程层并存,主要是基于实际的运维场景需求。为了实现快速调整的能力,这里把所有的运维操作场景,都分解为最小粒度的原子任务(原子操作),再由原子任务(原子操作)串联组合成流程来完成复杂的运维操作。

基础设施层主要是对一些基础工具和周边系统接口进行封装,方便上层模块调用。其中不同网络的差异也在这一层进行抽象适配,例如远程命令通道,对上层应用暴露统一的通道接口,在接口内部再根据目标ip所在网络区域不同分别调用不同的命令通道处理。

任务层主要是负责原子任务的托管、调度。一个原子任务是一个最小粒度的操作,它可以独立运行(可以在dashboard上发起,或者通过平台提供的api发起执行),也可以同其他原子任务组合形成流程依次执行。在鹦鹉螺的作业平台中,原子任务划分为两类:本地任务和远程任务。远程任务,顾名思义,即需要到目标机器上执行的任务,它可以是一个shell脚本或者python脚本,执行时需要用户给定目标机器列表,由框架将任务脚本分发到目标机器上发起执行,并把执行结果整理返回。本地任务,同远程任务相对应,即不需要在远程目标机器上执行,而是在运维系统的管理机上执行。在我们实际工作中,个别运维场景会使用到这类任务。原子任务的编写,我们做到了平台无关性,即用户编写原子任务时无需关心平台框架的任何东西,只需完成原子任务所要完成的功能即可。

流程层主要是负责流程的管理和调度。一个流程就是若干个原子任务的编排。在实际业务中,大多数运维场景都不会是简简单单的一个操作就能完成,复杂的业务操作需要由若干个原子任务按一定顺序组合而成。在流程支撑模块中,可以根据不同的业务场景,制定不同的任务执行策略,流程的执行支持失败重跑、部分成功等。

无论是原子任务还是流程,作业平台都提供了统一的调用接口,以达到任务、流程复用的目的。整个作业平台,是鹦鹉螺的基石和核心,所有对现网的操作,都是通过任务、流程来完成。

五、数据中心

数据库组件在运行过程会产生很多的运行数据,这些数据对我们了解组件的运行状态、服务情况起到至关重要的作用。在SNG内部,数据库组件在开发的过程中会定义好若干个(一般有几百个)属性,如收到的请求量、处理耗时、主备同步差异等等,并在现网运行过程中将这些属性值上报到monitor(织云监控)中。因此对这些数据的分析、计算,是我们掌握数据库运行状态的最佳数据来源。鹦鹉螺中数据模块的大致架构如下:

数据总线采用push/pull方式收集组件各个属性的实时数据,按照一定的规则对数据进行简单的过滤清洗,最终将数据落地到本地数据库中。计算单元从本地DB中读取相关的元数据,按照预设的算法、规则,对元数据进行实时计算、聚合,产出具体的指标数据或告警数据。前端dashboard可以从这里拉取指标数据进行实时的绘制,告警数据则可以按设置的规则发送给业务负责人或发送到决策中心进行告警预处理。

六、决策中心

目前我们的决策中心主要是一些告警的预处理决策。我们对那些常见的、有既定排查和处理方案的告警抽象为可识别的规则,配置到决策中心。外部网管产生的告警或数据中心计算产生的告警,首先发送给决策中心,决策处理模块根据告警的类型,在规则库中查找对应的预处理方案。当需要对现网发起变更时,则调用作业平台上相应的原子操作或流程进行变更。

七、未来方向

正如上面说到的,我们的组件在代码层面就做了很多的埋点,组件在运行过程中会以分钟为粒度上报每个属性值,因而我们有大量的元数据可供分析(每天上亿条元数据)。按照以往方式在代码层面写算法,分析数据,显然不能够充分发挥现有数据的价值。在未来,我们计划引入机器学习,将AI落地到实际运维场景中,比如访问量、流量的异常检测;异常发生时的根因分析、关联分析等等。在决策模块引入AI,利用有监督、无监督抑或强化学习等,打破预设专家规则模式的局限,进一步强化决策能力。事实上,我们也已经在机器学习上迈开了步伐,探索AIOps的未来。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

沈钦华的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏美图数据技术团队

美图大数据平台架构实践

如今大数据在各行业的应用越来越广泛:运营基于数据关注运营效果,产品基于数据分析关注转化率情况,开发基于数据衡量系统优化效果等。美图公司有美拍、美图秀秀、美颜相机...

39630
来自专栏IT米粉

技术知识和稳定的系统之间,可能还差这些?

艺术的展现除了术,还需要道。程序的术是大家都能得到的共识,各种各样提升自己技术的文章到处都是,这里我们说说程序的道,也就是方法。这也是大家经常忽略或者不重视的地...

44480
来自专栏无原型不设计

更巧妙的表单设计与登陆访问

以下内容由Mockplus团队翻译整理,仅供学习交流,Mockplus是更快更简单的原型设计工具 你觉得一个普通人每天会使用多少次登陆功能呢?数据显示至少1...

33340
来自专栏大数据和云计算技术

大数据和云计算技术周报(第59期)

“大数据” 三个字其实是个marketing语言,从技术角度看,包含范围很广,计算、存储、网络都涉及,知识点广、学习难度高。

14320
来自专栏杨建荣的学习笔记

几类历史数据沉淀的方案过渡

从数据层面来理解,数据可以分为几个维度,比如流水型数据,状态型数据库,配置型数据。流水型数据的依赖最低,基本就是时间维度的扩展,所以从数据的安全角度来说,如果丢...

41260
来自专栏EAWorld

微服务的4个设计原则和19个解决方案

微服务架构现在是谈到企业应用架构时必聊的话题,微服务之所以火热也是因为相对之前的应用开发方式有很多优点,如更灵活、更能适应现在需求快速变更的大环境。 本文将介绍...

54670
来自专栏程序员的知识天地

Web前端学习:移动Web加速技术

移动设备已经成为当下使用频率最高的电子设备,而移动Web依然是移动设备中使用频率最高的应用场景。

21610
来自专栏腾讯大数据的专栏

腾讯云分析支持微信告警啦!

在过去的一个月里,微信公众平台开放了图文分析等数据统计功能。眼尖的人也许早就发现,在微信公众平台的图文分析右上角,出现了"数据由 腾讯云分析 提供"字样. 通过...

29390
来自专栏逸鹏说道

关于Ubuntu18.04谷歌浏览器经常卡死的解决

老电脑本来用的是Win系列,后来改成Linux后就不卡了,这几天同Notebook运行的Script开始复杂了,Ubuntu经常卡死(发公众号也经常卡死),本来...

35220
来自专栏我就是马云飞

该如何接手别人遗留下的代码?

在我们开始之前,你应该先了解一些事项。首先,请阅读这篇 Joel Spolsky 的著名文章,了解为什么永远不应该重写代码(https://www.joelon...

16230

扫码关注云+社区

领取腾讯云代金券