更快、更准、更灵活,AnalyticDB MySQL多集群自动弹性技术解析

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
云原生数据仓库AnalyticDB MySQL版,基础版 8ACU 100GB 1个月
简介: 在全球经济增长放缓的大背景之下,企业在加强数字化建设的过程中,降本增效成为一个绕不开的话题。云原生数仓AnalyticDB MySQL湖仓版(以下简称ADB MySQL) 在发布之初提供了定时弹性功能,帮助业务有规律的客户定时升降配计算资源以节省成本。时隔一年,ADB MySQL针对用户痛点,在今年云栖大会上重磅推出Multi-Cluster弹性资源模式,它具备贴合用户负载、自动配置、性能线性提升等优点,进一步帮用户节省成本,提高计算效率。

作者:AnalyticDB MySQL研发团队—胡振宇(孤月)

1. 前言

在全球经济增长放缓的大背景之下,企业在加强数字化建设的过程中,降本增效成为一个绕不开的话题。云原生数仓AnalyticDB MySQL湖仓版(以下简称ADB MySQL) 在发布之初提供了定时弹性功能,帮助业务有规律的客户定时升降配计算资源以节省成本。时隔一年,ADB MySQL针对用户痛点,再推出Multi-Cluster弹性资源模式,它具备贴合用户负载、自动配置、性能线性提升等优点,进一步帮用户节省成本,提高计算效率。


2. Multi-Cluster弹性模型优势

ADB MySQL 在没有Multi-Cluster弹性模型之前

  • 易用性: 用户只能根据业务规律,在固定时间段弹升,弹性计划生效间隔长(最短间隔10分钟)
  • 性能: 小查询的性能容易受到大查询的干扰, 查询并发数不随资源组大小变化,查询可能排队
  • 成本: 用户需要指定固定时间段的弹升规格,难以贴合业务负载,短时间段的业务波谷无法缩容


                                 

Multi-Cluster弹性模型是作用在ADB MySQL 在线资源组内部的,一个在线资源组由一个或者多个Cluster组成,相比普通在线资源组在以下方向进行了提升

  • 易用性: 自动根据当前实例的负载进行Cluster个数的扩缩, 用户只需设置好Cluster个数的上限、下限及每个Cluster大小即可
  • 性能:查询在Cluster之间隔离,查询性能线性提升, 查询并发数随着Cluster个数的增长而线性增长

  • 成本: 贴合用户负载,动态选择最优Cluster个数,充分贴合业务的每一次业务波谷

3. Multi-Cluster技术架构

在设计Multi-Cluster技术架构的时候,我们的核心目标有三个: 弹得准、弹得快、弹得好。 下图是ADB MySQL Multi-Cluster的整体架构图,从上至下可分为三层:

  • 接入层:负责将用户的查询投递到特定的资源组,再根据Cluster的负载情况分配到具体的Cluster上去执行
  • 执行层:资源组内部划分为相同大小的多个Cluster,每个query只在其中一个Cluster上执行
  • 决策层:通过实时读取ADB MySQL资源的负载情况, 进行Multi-Cluster资源组的扩缩容决策

                                     


3.1 弹得快:实时数据链路

为了保障扩容的时效性,快速应对用户查询的到来,ADB MySQL建立了Region级别的指标采集系统。ADB MySQL实例也进行了改造,能实时地更新内部的业务指标(如 Query 排队数、CPU使用等),并被指标采集进程采集到中心的存储端。目前整个数据链路的延迟在10s左右。


3.2 弹得准:稳定的扩缩容策略

ADB MySQL实例是由接入层节点、计算节点、存储节点共同构成的复杂系统,在对计算资源进行扩缩容决策的时候面临如下挑战:

  • 多组件交互的系统,如何识别外部组件瓶颈
  • 实例指标繁多,基于什么指标来进行扩缩容决策
  • 如何防止指标短时间的抖动,导致扩缩容策略不准
  • 如何判断扩缩容决策是否合理

为此,我们将整个Cluster个数计算分为三个阶段:决策、执行、反馈


                                   


3.2.1 决策

瓶颈识别

我们在决策系统中,将指标分为两类

正向指标: 反馈要扩容目标的负载情况,决定扩容目标的扩缩容

负向指标: 反馈除扩容目标外的其余组件的负载情况,用于判断外部瓶颈

当负向指标达到设定的阈值时,我们认为计算节点扩容对于ADB MySQL实例整体而言已经无法起到加速查询,提升并发数的作用。对于这种情况,决策系统将会报警直至瓶颈解除


Cluster个数预估

对ADB MySQL实例的负载分析后,我们发现对于扩缩容的决策并不能由单个指标决定,随着用户负载类型不同,决定扩缩容的指标也不一样。主要用到的指标有: 用户CPU使用率, 用户内存使用率, 用户查询排队数等。

因此在扩缩容的预估的过程中,我们会先根据每个指标计算得出一个候选Cluster数,最后再选择所有指标中最大的Cluster数作为最终候选项

  • 对于和Cluster挂钩的指标(如CPU利用率)我们采用如下计算公式:

clusterCount1 = ceil(\frac{所有Cluster的CPU利用率之和}{Cluster的目标CPU利用阈值})

  • 对于和资源组挂钩、但不和Cluster挂钩的指标(如查询排队数和并发数)我们采用如下公式计算

                      clusterCount2= ceil((\frac{平均排队数 + 平均并发数}{Cluster并发数阈值}) * 当前Cluster数)

最终我们取所有算出来的目标Cluster数的较大值

                      目标Cluster数= \max(clusterCount1, clusterCount2,... clusterCountN)


稳定窗口

为避免因为实例负载抖动等因素造成的metric抖动,我们采用了稳定窗口的算法来避免抖动

                                 


在稳定窗口期间,每次预估的Cluster个数都会记录下来,并使用当前的Cluster个数和稳定窗口中推荐的个数进行对比

  • 若 窗口Min <= 当前Cluster个数 <= 窗口Max,  则当前Cluster个数数保持不变
  • 若 当前Cluster个数 < 窗口Min,  则说明应当将当前Cluster个数应当扩容至窗口 Min
  • 若 当前Cluster个数 > 窗口Max,说明当前Cluster个数应当缩到稳定窗口Max

3.2.2 执行

资源组组内部的Cluster,在ADB MySQL内部对应的K8s的自定义资源(Custom Resource),由自研的Operator进行管理,这些自定义资源实现了K8s的Scale  subResource。 当决策系统作出决策后,会通过K8s的 Scale API,将目标Cluster个数下发给自定义Operator 进行扩缩容

3.2.3 反馈:有效性评估

在执行完扩(缩)容后,决策系统会记录扩容之前的metric指标的值,并在扩(缩)容完成后持续观察用户负载的指标

  • 扩容评估:  决策系统持续观察扩容后用户查询的qps是否按照Cluster的比例增长了,或者用户查询的rt是否按照Cluster的比例降低了,如果没有明显增长,则认为扩容无效, 决策将Cluster个数恢复成扩容前的个数,停止扩容决策运行,并预警
  • 缩容评估: 决策系统持续观察缩容后用户查询的qps 和 rt 是否均有明显变化,如果变化超过了一定的阈值,则将Cluster恢复成缩容前的个数,决策系统将Cluster个数恢复成缩容前的个数,停止缩容决策,并预警

3.3 弹得好:负载均衡路由策略

在Cluster个数提升之后,用户无需指定查询路由到的Cluster,ADB MySQL 自动根据负载均衡算法将查询路由到负载最小的Cluster中。

下图是一个根据Cluster负载均衡路由的示意图

  1. 当Q5到来时,由于Cluster0的负载是2,Cluster1的负载是1,Cluster2的负载是1。Q5会优先分配给Cluster1执行
  2. 当Q6到来时,由于Cluster0的负载是2,Cluster1的负载是2,Q6会分配给Cluster2执行

                                       

4. Multi-Cluster的收益估算

为了让用户对Multi-Cluster模型和定时弹性模型在收益上有更清楚地认识,我们这里举个案例。

  • 0-7点:某客户在晚上0-7点的时候,处于业务低峰期,用户采用定时弹性,将计算资源缩小至48ACU
  • 7-24点:客户业务处于间歇性高峰期,  用户采用定时弹性将计算资源保持在192ACU,以应对随时可能到来的波峰

                               

应用Multi-Cluster模型之后

  • 0-7点: 用户将Cluster大小缩小为48ACU,  保持和定时弹性的资源使用量一直
  • 7-24点: 用户将Cluster大小变为96ACU, 并设置最小Cluster个数为1,最大Cluster为2

可以看到相对定时弹性,Multi-Cluster模型可以在业务两个高峰之间的波谷,为用户减少Cluster个数,节省成本,当用户的业务波峰到来后,Cluster个数随之弹升,满足业务负载


5. 总结及未来规划

我们推出了ADB MySQL Multi-Cluster形态,完成了自动化、智能化扩缩容的第一步。ADB MySQL Multi-Cluster形态有如下特点:

成本: 可以贴合负载扩缩容,相比单Cluster资源组固定资源,可以节省更多的成本

查询性能:  线性增加,查询的隔离性相比单Cluster资源组要更优越

自动弹性:  避免了用户手动调整资源组大小


未来,我们还将在以下几个方面继续打磨和增强:

主动弹性:基于预测的主动弹性,查询延迟最小化

负载解耦:基于WorkLoadManager, 大query自动投递到离线资源组减少对在线资源组的资源抢占

弹性效率:资源Pod热池加速弹性效率

效果展示:性能优化及成本节省可视化


ADB MySQL Multi-Cluster形态 目前正在邀测中,欢迎感兴趣的客户加入湖仓版体验交流钉钉群(群号:33600023146)申请邀测名额。产品文档请参见

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
16天前
|
SQL 关系型数据库 MySQL
深入解析MySQL的EXPLAIN:指标详解与索引优化
MySQL 中的 `EXPLAIN` 语句用于分析和优化 SQL 查询,帮助你了解查询优化器的执行计划。本文详细介绍了 `EXPLAIN` 输出的各项指标,如 `id`、`select_type`、`table`、`type`、`key` 等,并提供了如何利用这些指标优化索引结构和 SQL 语句的具体方法。通过实战案例,展示了如何通过创建合适索引和调整查询语句来提升查询性能。
117 9
|
9天前
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
19天前
|
存储 关系型数据库 MySQL
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
|
28天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
2月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
2月前
|
监控 关系型数据库 MySQL
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
148 3
|
2月前
|
存储 关系型数据库 MySQL
MySQL 字段类型深度解析:VARCHAR(50) 与 VARCHAR(500) 的差异
在MySQL数据库中,`VARCHAR`类型是一种非常灵活的字符串存储类型,它允许存储可变长度的字符串。然而,`VARCHAR(50)`和`VARCHAR(500)`之间的差异不仅仅是长度的不同,它们在存储效率、性能和使用场景上也有所不同。本文将深入探讨这两种字段类型的区别及其对数据库设计的影响。
89 2
|
2月前
|
存储 关系型数据库 MySQL
PHP与MySQL动态网站开发深度解析####
本文作为技术性文章,深入探讨了PHP与MySQL结合在动态网站开发中的应用实践,从环境搭建到具体案例实现,旨在为开发者提供一套详尽的实战指南。不同于常规摘要仅概述内容,本文将以“手把手”的教学方式,引导读者逐步构建一个功能完备的动态网站,涵盖前端用户界面设计、后端逻辑处理及数据库高效管理等关键环节,确保读者能够全面掌握PHP与MySQL在动态网站开发中的精髓。 ####
|
2月前
|
存储 SQL 缓存
AnalyticDB 实时数仓架构解析
AnalyticDB 是阿里云自研的 OLAP 数据库,广泛应用于行为分析、数据报表、金融风控等应用场景,可支持 100 trillion 行记录、10PB 量级的数据规模,亚秒级完成交互式分析查询。本文是对 《 AnalyticDB: Real-time OLAP Database System at Alibaba Cloud 》的学习总结。
72 1
|
2月前
|
存储 关系型数据库 MySQL
MySQL MVCC深度解析:掌握并发控制的艺术
【10月更文挑战第23天】 在数据库领域,MVCC(Multi-Version Concurrency Control,多版本并发控制)是一种重要的并发控制机制,它允许多个事务并发执行而不产生冲突。MySQL作为广泛使用的数据库系统,其InnoDB存储引擎就采用了MVCC来处理事务。本文将深入探讨MySQL中的MVCC机制,帮助你在面试中自信应对相关问题。
182 3

相关产品

  • 云原生数据仓库AnalyticDB MySQL版
  • 推荐镜像

    更多