写点什么

新浪微博数据库资源调度设计:万级实例精细化管理

  • 2021-05-23
  • 本文字数:3273 字

    阅读完需:约 11 分钟

新浪微博数据库资源调度设计:万级实例精细化管理

今天分享的主题是微博数据库资源调度平台的架构实践,是我们内部启动的⼀个项⽬。主要实现的功能有两个:⼀个是资源的智能调度,⼀个是成本优化。都是⾮常实⽤的场景。


⼀会⼉我会从 4 个⽅⾯来做下具体介绍:


  • 项⽬启动的背景。

包括微博当前数据库资源的规模现状和运维⼈员配⽐,我们对资源治理的期望和⽬标,以及我们对资源调度的理解。

  • 然后介绍⼀下这个调度平台的宗旨和使命。

就是我们希望通过这个平台达到什么⽬的,希望它解决我们哪些痛点。

  • 再重点介绍⼀下平台的架构选型、实现⽅式、逻辑设计和核⼼功能。

  • 最后分享两个案例。

来说明我们是如何通过这个调度平台实现应对热点事件和成本优化的。

一、背景

1、微博资源规模现状

先来看下微博资源规模的现状:



从两个维度来看:⼀个是整体资源体量,⼀个是资源使⽤的种类。整体资源体量上,服务器规模还是⽐较⼤的,全⽹服务器达到了万台⽔平,总实例数近 10 万个,总访问量在万亿级别,资源使⽤的种类也⽐较丰富多样,关系型数据库有 MySQL、PostgreSQL,缓存类有 Redis、Memcached,消息队列有 Kafka、MCQ、Qservice 等等。


运维⼈员配⽐⾮常低,或者说⼈均运维实例数⾮常多,差不多每个⼈要管理 1500 个实例,这个数量已经⾮常⼤了,如果没有借助⾃动化、标准化的运维⼿段,是很难管理好这么多实例的。

2、如何做好资源治理

如此规模下如何做好资源治理是我们每天都在考虑的问题。



资源治理是个⽐较抽象、概括的说法,我们需要拿很多东⻄界定它才能让它具像化。⼤家可以按照这个思路来捋下:


1)资源具体指什么(定义)

  • 服务器,MySQL、Redis 等这样的服务,服务发现、域名,Agent 代理

  • 资源治理的⽬标是什么(⽬标)

  • 稳定性保障

  • 快速暴露问题,快速解决问题

  • 挖掘潜在隐患,制定应对预案

  • 可控性保障

  • 资源 SLA 可控

  • 资源调度可控

  • 资源容量⽔位可控


2)怎么治理(⽅法论)

  • 通过资源调度实现


3)怎么衡量资源治理的好坏(SLA)

  • 满⾜业务的 SLA


资源治理⾥⾯也包含很多细分领域和模块,⽐如数据采集、指标决策等等。这些问题都找到答案后,我们对什么是资源治理就有个⼤概的轮廓了。

3、什么是资源调度

上⾯提到 资源调度是资源治理的具体实现,我们要想做好资源治理,就要做好资源调度。



我们⽇常对资源的很多操作,都可以抽象成对资源的调度。⽐如:切主、升级、迁移、扩容、缩容等等。资源调度的核⼼是服务⾃愈。只有服务⾃愈覆盖范围⾜够⼴,资源运维的规模才可能⾜够⼤,服务访问质量才可控,资源治理才可以真正落地。我们⼈均运维的 1500 个实例,就像运维 15 个实例⼀样,因为 99%的情况都被服务⾃愈覆盖了。


今天要介绍的这个资源调度平台叫 Shanks,它把我们⽇常运维中遇到的资源和操作都抽象成标准化的类,然后和周边⽣态⼀起保障资源治理有序进⾏。周边⽣态有很多,⽐如恢复中⼼、资源云、指标决策系统等等。

Shanks 资源调度平台

1、Shanks 整体架构

现在介绍⼀下 Shanks 的整体架构,可以分成四个部分:



其中 Shanks Server 和 Shanks Agent 的代码是放在⼀个⼯程下的,上线的时候,会同时⽣成 Shanks Server 和 Shanks Agent 两个⼆进制包。然后 Shanks Server 会部署在指定的服务器上,Shanks Agent 会部署在所有服务器上,所有服务器上的 Agent 都是⼀样的。


Shanks Agent 负责 metric 指标采集、上报给 Shankks Server 和指标决策系统(采集包括服务器本身的指标,还有上⾯服务的指标)。指标决策提供监控看板和基于采集指标的分析数据。同时,Shanks Server 下发的命令,可以通过 Agent 直接执⾏。


Shanks Server 是主要的资源调度者,调度的接⼝通过 Http API 暴露出来,Agent 收到 Server 的指令后,实施具体的调度内容。⽐如迁移某个实例,Server 会发出迁移指令,然后 Server 先执⾏找机器逻辑,找到⽬标服务器。让⽬标服务器上的 Agent 执⾏新实例部署,搭建主从关系,上线。然后让源服务器上的 Agent 下线⽼实例,迁移结束。

2、五个主要功能

下⾯要介绍的是 Shanks 的五个主要功能:







其中弹性调度可以从两个维度来理解:⼀个实例维度,⼀个配置维度。


实例维度是指当某个具体实例冗余度不⾜的时候,弹性调度会通过扩容实例个数来增加冗余度。


配置维度是指,当某个具体实例已⽤内存快达到配置的最⼤内存的时候,弹性调度会通过修改配置增加最⼤内存。

案例分享

当某个资源实例触发了报警事件,这个实例就会被打标,我们通过标签就可以检索出哪些实例触发了报警阈值,哪些指标有问题。



成本优化还是从两个⽅⾯来把控:⼀个是提⾼资源利⽤率,降低冗余度;⼀个是提⾼资源智能调度的能⼒或者弹性扩缩容的能⼒。这两点做好,就能把成本优化到很理想的状态。


Q&A

Q1:若干个计算任务如何分配给若干个服务器,使得所用的服务器数量尽可 能少?

A1 :对于计算任务的调度和我们今天分享的 对于资源的调用有点类似,都 是通过调度逻辑合理利用已有的物理资源(CPU、内存、存储等等)。我们采 用的策略是预分配策略,根据 agent 采集上报的指标信息,我们很容易知道当前 物理资源的占用情况,我们可以根据这个情况,来对需要调度的资源进行调 度,但是调度采用预先分配的策略,比如我计划把资源 a(这里的资源可以理解 成具体的服务,比如 mysql、redis,或者具体的计算任务)部署到物理空间 B 上,这个资源 a 需要多少物理资源我是预先在物理空间 B 上标记好,下次再进行 调度的时候我看到物理空间 B 的资源(CPU、内存、存储)剩余就是已经减去 资源 a 的了。对于计算任务也是类似的场景。这个策略的迁移是需要做好资源隔 离。


Q2:听完分享,感觉 shanks 很像 service mesh,方便说下选择自研的考虑吗?

A2 : service mesh 是这几年比较新的东⻄,service mesh 里面涉及到的服 务发现的场景确实和今天谈到的服务发现很像。提供这种功能的工具确实有很 多,比如 consul、etcd,我们选择自研的原因很简单,一是本身实现起来不 难,二是我们运维的资源类型很多,有些定制的需求,自研可能更容易实现。


Q3:服务效率的评价标准应该怎么定呢?

A3 : 服务效率可能从投入产出比来说会好些,比如我投入 10 个人,开发了 3 个月,做出了这套调度系统,我们利用这个调度系统,每年可以节省非常可观 的开销,这中投入产出比或者服务效率是容易让人接受的。如果我投入 10 个开 发了 2 年才做出了这套系统,我们利用这个系统,每年节省的开销很有限,那我 们就认为服务效率不够好。我们在项目启动的时候确实衡量过这个成效,原则 就是尽可能快的做出能覆盖 80、90%的场景。然后快速迭代。


Q4:请问下老师有哪些常用的资源调度策略?优缺点可以简单说一下吗?

A4 : 模式大体可以分为两种,一种是隔离类的资源调度,比如资源绑定, 资源容器化;一种的非隔离类的调度,比如我把很多资源部署在一台物理服务 器上。调度策略上,我们大体有几个原则:一是平衡策略,一是近地缘策略。平衡策略就是,把资源使用率高上面的服务调度到资源使用率相对低的地方。近地缘策略是指,优先选择同机房、同可用区的服务器作为目标服务器。我们 在选择目标服务器的时候有一套打分机制就是基于上面的策略来做的。


Q5:跨云怎么进行统一资源调度?

A5 : 跨云的场景现在已经很常⻅了,我们也同时用了多个厂商的云资源。每个厂商都会提供通用的 API 来实现相应的功能,所以从调度上看没什么区 别,唯一的区别是跨云的网络延时会有点⻓,控制好这个就 ok 了。


Q6:你们团队的组织架构能否介绍下哈?

A6 :我所在的部⻔是基础平台,里面可以分为应用运维、资源运维、大数 据运维、基础组件这几个大的方向。


Q7:请问老师,如何划分资源粒度呢?

A7 :  一个资源实例或者一个进程是我们调度的最小资源粒度,比如一个 mysql 实例。比资源实例大一个级别的是一组实例,比如一个 mysql 集群,里面 可能有几个实例,比一组实例大一个级别的是一类资源,比如全网所有的 mysql。


讲师介绍:

张磊,新浪微博 基础平台资深 DBA 

  • 前必要商城、每⽇优鲜、达令家⾼级 DBA,负责数据库资源的⽇常维护和治理,完成从 0 到 1 数据库⾃动化运维平台的建设,推进数据库资源架构标准化和分布式使⽤姿势落地;

  • ⽬前担任新浪微博资深数据库⼯程师,负责微博数据库资源的运维保障和⾃动化运维平台的重构、优化和完善。


本文转载自:dbaplus 社群(ID:dbaplus)

原文链接:新浪微博数据库资源调度设计:万级实例精细化管理

2021-05-23 07:001780

评论

发布
暂无评论
发现更多内容

第三周作业:设计模式

Larry

我嗅到了数据开发工程师的危机

Geek_6rptuk

大数据 数据仓库 数据分析 数据开发

架构师训练营第三周 - 总结

Larry

总结03-代码重构

梦子说

极客大学架构师训练营 课程总结

插入排序

wjchenge

插入排序

架构师训练营-第三周-20200624-学习总结

丁亚宁

极客大学架构师训练营

架构师训练营第三周总结

架构师 极客大学架构师训练营

第三周作业

架构师课程第三周总结

dongge

架构师week3总结

平淡人生

一周信创舆情观察(6.15~6.21)

统小信uos

新基建 信创 matlab 舆情

区块链技术可简化房地产交易流程

CECBC

智能合约 区块链技术 房地产业

Week3学习总结

熊威

源自Google的招聘哲学:你真的了解招聘吗?

伴鱼技术团队

技术管理 技术人 文化 招聘 人才

架构师之面向对象的设计模式

彭阿三

架构师训练营 - 作业 -3- 设计模式

superman

极客大学架构师训练营

架构师训练营-第三周-20200624-单例模式和组合模式

丁亚宁

极客大学架构师训练营 课程作业

架构师训练营——第三周学习总结

jiangnanage

架构师训练营第三周学习总结:面向对象设计和设计模式

hifly

设计模式 极客大学架构师训练营 OOD SOLID 策略模式

代码重构总结

Lane

极客大学架构师训练营

架构师训练营第三周总结

王鑫龙

架构师训练营 -week3- 总结

Geek_5a6ca3

开源项目中的设计模式

dony.zhang

组合模式实现树结构

新世界

架构师训练营 -week3- 作业

Geek_5a6ca3

课堂作业 week3

Dennis

第三周学习总结

G小调

架构师训练营第三周学习总结

Bruce Xiong

深入理解JVM垃圾回收机制 - 引用类型

Skye

深入理解JVM 强引用 软引用 弱引用 虚引用

第三周设计模式作业

设计模式-单例与组合

ashuai1106

架构师 极客大学架构师训练营

新浪微博数据库资源调度设计:万级实例精细化管理_大数据_dbaplus社群_InfoQ精选文章