【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

  • 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:001538

评论

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

企业公众号文章写作方向:如何写出读者认可的优质内容

石头IT视角

【SeaTunnel】从一个数据集成组件演化成企业级的服务

Apache SeaTunnel

大数据 微服务 数据处理 数据集成 大数据 开源

【Go实现】实践GoF的23种设计模式:迭代器模式

元闰子

Go 设计模式 迭代器模式

1对1视频源码——快速实现短视频功能提升竞争力

开源直播系统源码

软件开发 直播系统源码 一对一视频聊天系统

PDF转Word有那么难吗?做一个文件转换器,都解决了

IC00

C# 签约计划第三季

前端食堂技术周刊第 46 期:Chrome 三方 cookie 计划、npm 引入更多安全增强功能、Awesome Bun

童欧巴

Linux npm Cookie

如何优雅的消除系统重复代码

慕枫技术笔记

设计模式 代码 签约计划第三季 8月月更

GRPC MacOS M1 处理器的问题

HoneyMoose

一、《图解HTTP》- WEB和网络基础

懒时小窝

图解https

开源一夏|要有遥不可及的梦想,也要有脚踏实地的本事

坚果

开源 HarmonyOS OpenHarmony 8月月更

让你10分钟就能看懂Linux文件权限(超级详细、超级简单!!!)

Albert Edison

Linux centos linux 文件权限控制 8月月更

SRv6 L3VPN的工作原理

穿过生命散发芬芳

8月月更 SRv6

Nacos配置中心之加载配置

急需上岸的小谢

8月月更

Python 教程之输入输出(1)—— 在 Python 中接受输入

海拥(haiyong.site)

Python 8月月更

物无定味适口者珍,Python3并发场景(CPU密集/IO密集)任务的并发方式的场景抉择(多线程threading/多进程multiprocessing/协程asyncio)

刘悦的技术博客

多线程 协程 多进程 Python3 Python.

好好活就是做有意义的事,有意义的事就是好好活

宇宙之一粟

8月月更

【高并发项目实战】自适应高并发复杂场景的订单拆分算法工具

小明Java问道之路

高可用 高并发 高性能 签约计划第三季 8月月更

学习英语的网站与资料

玄兴梦影

学习 英语

SAP 云平台上一种 Low Code Development(低代码开发)解决方案

Jerry Wang

低代码 云平台 lowcode SAP 8月月更

如何给 UE4 场景添加游戏角色

HelloWorld杰少

c++ 游戏 UE5 8月月更

mysql进阶(二十一)删除表数据与数据库四大特性

No Silver Bullet

MySQL 8月月更 四大特性 表删除

Android编译系统初探

桑榆

8月月更

Serverless基础知识

阿泽🧸

Serverless 8月月更

毕业作业-设计电商秒杀系统

Fan

#架构实战营

鲲鹏编译调试插件实战

乌龟哥哥

8月月更

leetcode 204. Count Primes 计数质数 (Easy)

okokabcd

LeetCode 算法与数据结构

Linux性能调优之内存负载调优的一些笔记

山河已无恙

签约计划第三季

系统可用性:SRE口中的3个9,4个9...到底是个什么东西?

董哥的黑板报

运维 后端 可用性 SRE

你认同这个观点吗?大多数企业的数字化都只是为了缓解焦虑

雨果

数字化转型 数字化

LeetCode第三题(Longest Substring Without Repeating Characters)三部曲之一:解题思路

程序员欣宸

LeetCode 8月月更

Gitee图床被屏蔽后,我搭建了一个文件系统并封装成轮子开源!

IT学习日记

Java springboot 签约计划第三季 seaweedfs文件系统 Gitee图床崩了

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