TiDB v7.1.0 跨业务系统多租户解决方案

news2024/11/22 23:57:36

本文介绍了 TiDB 数据库的资源管控技术,并通过业务测试验证了效果。资源管控技术旨在解决多业务共用一个集群时的资源隔离和负载问题,通过资源组概念,可以限制不同业务的计算和 I/O 资源,实现资源隔离和优先级调度,提高系统利用率和稳定性。

业务背景

随着业务对 TiDB 的使用不断扩大和深入,在多业务共用一个集群的情况下,相信不少用户也遇到过不同负载之间相互影响的问题。在之前的版本里,TiDB 也在尝试不同的方法来缓解或解决这类问题。比较典型的例子就是通过引入 TiFlash 列存组件,在存储引擎层面区分 TiKV 上的在线处理事务和在 TiFlash 上的分析型任务,在存储层物理隔离不同的负载。这种架构优化有很多的好处,但如果业务都是需要访问 TiKV 才能得到结果的场景,就没办法来处理。

我们线上十几个生产集群,考虑成本、运维等问题都是多业务共用一个集群,在我们尽可能将 TP 业务和 AP 业务分离部署的前提下,通常还是会遇到下面的问题:

● 当一个业务处于高峰期时,会过多占用别的业务使用的资源,进而影响别的业务正常运行。

○ 我们希望能保护不同业务的资源持有情况,保证业务能分配到基本的运行资源而不被挤兑。

● 当集群中的重要业务处于低谷值时,有较多的剩余资源,如果我们能把错峰的业务引进来就可以充分使用资源,可以降本增效。但这要求错峰运行的业务需要能得到控制,其他时候不会占用过多资源。

● 当集群遇到临时的问题 SQL 引发的性能问题时,只能停掉 S QL 。

○ 我们更希望不是干掉它的执行,而是临时限制它资源消耗,允许它缓慢运行,但又不会影响集群其他业务。

在这样的业务痛点背景下 TiDB v7.1.0 提出了资源管控技术,我们第一时间跟进该技术,并尝试探讨解决融合系统中多租户资源使用的隔离方案。

TiDB 资源管控技术

资源管控技术(Resource Control)可以在负载剧烈变化时保证服务质量,同时提供了数据库的多租户隔离能力,能够有效地降低数据库运行成本。

2.1 原理说明

TiDB 资源管控特性提供了两层资源管理能力,包括在 TiDB 层的流控能力和 TiKV 层的优先级调度的能力。将用户绑定到某个资源组后,TiDB 层会根据用户所绑定资源组设定的配额对用户的读写请求做流控,TiKV 层会根据配额映射的优先级来对请求做调度。通过流控和调度这两层控制,可以实现应用的资源隔离,满足服务质量 (QoS) 要求。

● TiDB 流控:TiDB 流控使用 令牌桶算法 ( https://en.wikipedia.org/wiki/Token_bucket )做流控。如果桶内令牌数不够,而且资源组没有指定 BURSTABLE 特性,属于该资源组的请求会等待令牌桶回填令牌并重试,重试可能会超时失败。

● TiKV 调度:可以为资源组设置绝对优先级 (PRIORITY),不同的资源按照 PRIORITY 的设置进行调度, PRIORITY 高的任务会被优先调度。如果没有设置 PRIORITY,TiKV 会将资源组的 RU_PER_SEC 取值映射成各自资源组读写请求的优先级,并基于各自的优先级在存储层使用优先级队列调度处理请求。

TiDB 资源管控技术利用资源组 (Resource Group) 将集群划分为多个逻辑单元,每个资源组都能限制其所需的计算和 I/O 资源。当集群有空闲资源时,通过特定设置可以允许一部分资源组超越其限制,充分利用集群资源。它基本上解决了在多种业务合并后,造成资源争抢的问题,保证了业务的稳定性。如下是该技术的一个概念图:

Resource Control 是基于 TiDB 的流控和 TiKV 的调度功能来完成的。同时 BURSTABLE 功能允许其超过资源组的约束配额,使其可以保证服务正常运行。

2.2 管理方式

资源管控引入了资源组(Resource Group)的概念,通过设置“用户”和“资源组” 的对应关系,把会话与用户组进行绑定,利用“用量 (RU)”对资源限额进行定义。结构如下 ( https://tidb.net/blog/67d82266 ):

关于资源组、资源限额、调度优先级等特性具体可以参考官网( https://docs.pingcap.com/zh/tidb/stable/tidb-resource-control )。

这里特地说明资源组设定是很灵活的,很方便管理员根据业务的使用场景,我觉得这也对 TiDB 的易用性有很好的提升, 分别设置不同的级别:

● 用户级别。将用户绑定到特定的资源组。绑定后,对应的用户新创建的会话会自动绑定对应的资源组。

● 会话级别。通过 SET RESOURCE GROUP 设置当前会话的资源组。

● 语句级别。通过优化器 hint RESOURCE_GROUP() 设置当前语句的资源组。

2.3 技术应用点

总结之,该技术主要解决了下面业务常见问题:

● 当系统中存在多业务负载时,资源隔离,保证交易类业务的响应时间不受数据分析或批量业务的影响。

● 在系统负载较低时,繁忙的应用允许超过设定的读写配额,最大化利用资源,提升硬件利用率,降低运行成本。

● 限制突发 SQL 的资源消耗,避免引起集群性能问题。

● 提供用量统计的精确反馈,完成不同业务合理的成本分摊

○ 通过监控面板获取实际用量的使用情况,协助用户合理改进配置。同时,配合企业管理目标,TiDB 能够协助企业精确统计各部门数据库资源的使用情况,完成合理的成本分摊。

● 提供灵活的资源绑定手段。

○ 支持在用户级,会话级,和语句级指定资源的绑定方式,满足不同场景的资源控制需要。

经过梳理它的基本原理和设计目标等内容,看起来可以很好解决我们实际生产环境的业务痛点,所以我们开启进一步的实际测试和验证。

业务验证

TiDB 可以基于硬件部署或实际负载估算集群的总体 RU 容量,我们在测试时是直接参考基于硬件部署的估算量。

3.1 业务资源模拟

为了模拟我们生产环境最常见的不同业务,这里我们创建三个租户,分别表示三种不同的业务负载,每类业务有不同的管控目标。下表是我们的不同业务运行在同一个 TiDB 集群中,每个业务不同的运行需求:

在资源管控技术的基础上,我们可以为这三类用户分别创建资源组:

● 为租户 app_oltp 分配一个较高的用量,租户 app_olap 和 租户 app_other 则相对低

○ 在系统资源紧张的情况下,最优先保证租户 app_oltp 的服务质量。

● 租户 app_oltp 和 app_olap 的资源组设置为 burstable

○ 租户 app_oltp 发生超预期的负载,仍旧可能会保证质量;

○ 而当整个集群负载有空余时, 租户 app_olap 可以利用空闲资源加速其工作。

● 创建资源组

 CREATE RESOURCE GROUP IF NOT EXISTS rg_oltp RU_PER_SEC = 1000 BURSTABLE PRIORITY = HIGH; CREATE RESOURCE GROUP IF NOT EXISTS rg_olap RU_PER_SEC = 400 BURSTABLE; CREATE RESOURCE GROUP IF NOT EXISTS rg_other RU_PER_SEC = 100;

● 我们线上的业务是已经存在了的,换言之上线该功能时业务账号也一定是已经存在的,所以模拟时直接对业务绑定资源组

 ALTER USER app_oltp RESOURCE GROUP rg_oltp; ALTER USER app_olap RESOURCE GROUP rg_olap; ALTER USER app_other RESOURCE GROUP rg_other;

3.2 业务运行模拟

我们在测试环境启动短连接业务实时访问数据,不断进行读取和写入操作,分别用来模拟几个租户不同的负载,观测业务侧吞吐量 (QPS) 和 数据库 TiDB 的资源消耗情况 (RU 用量趋势)。整个场景大概模拟下面几个场景:

  1. 对有设置使用上限且正在运行的业务,在线调整集群资源分配操作:

a. 临时扩大租户 app_other 的可用资源,模拟临时给在线业务增加资源

b. 临时缩小租户 app_other 配额,模拟临时给在线业务缩减资源

c. 允许租户 app_other 突破资源限额,模拟临时取消在线业务资源使用限制

d. 不允许租户 app_other 突破资源限额使其回到最开始的限额状态,模拟临时限制在线业务资源使用

  1. 模拟不同业务在同一个集群融合共存,观察全部租户经历最重要业务的一个波峰、波谷完整周期的运行情况

a. 首先三类负载同时运行,表示业务正常共存情况

b. 业务流量高峰来临,租户 app_oltp 达到峰值负载

c. 租户 app_oltp 峰值过去,回到平时状态

d. 租户 app_oltp 的负载到低谷值,其他不变

e. 租户 app_oltp 低谷过去,回到平时状态

在线增加/减少业务可用资源

对有设置使用上限且正在运行的业务,临时调整租户 app_other 的可用资源,模拟临时给在线业务增加或减少资源。

● 初始:租户 app_other 的业务初始资源配额

 ALTER RESOURCE GROUP rg_other RU_PER_SEC = 100;

● 扩大:临时扩大租户 app_other 业务的可用资源

 ALTER RESOURCE GROUP rg_other RU_PER_SEC = 400;

● 缩小:临时缩小租户 app_other 业务的可用资源

 ALTER RESOURCE GROUP rg_other RU_PER_SEC = 50;

如上图所示,可以看到租户 app_other 的业务初始资源配额为 100,期间业务在稳定运行。

假设有某个原因需要我们临时调大它的可用资源,此时调大可用资源 RU_PER_SEC = 400,业务能使用到的 RU 会立即响应 分配到需要的资源,曲线会不断上升。反之我们缩小可用资源 RU_PER_SEC = 50 时,曲线会下降到我们预期的设定值。

● 总结:

○ 说明 TiDB 的资源管控技术可以在线调整业务资源使用状态,实时对业务进行资源配置,大大提高业务响应速度。

○ 如果这类业务是突发的异常 SQL,我们可以临时限制它的资源消耗,避免引起集群性能问题。

在线取消业务配额限制

允许租户 app_other 突破资源限额,模拟临时取消在线业务资源使用限制场景。

  • 初始:租户 app_other 的业务初始资源配额
 ALTER RESOURCE GROUP rg_other RU_PER_SEC = 50;
  • 取消限制:允许租户 app_other 业务突破可用资源的限额
 ALTER RESOURCE GROUP rg_other RU_PER_SEC = 50 BURSTABLE;

如上图所示,可以看到租户 app_other 的业务初始资源配额为 50,期间业务在稳定运行。此时我们临时取消它的可用资源限制,在集群收到配置后其 RU 曲线不断上升,直到需要的最大值。

● 总结:

  • ○ 说明 TiDB 的资源管控技术可以在线调整业务资源使用状态,实时取消对业务资源使用限制

在线限制业务最大可用资源

不允许租户 app_other 突破资源限额,模拟临时限制在线业务资源使用

  • 初始:允许租户 app_other 业务突破可用资源的限额
 ALTER RESOURCE GROUP rg_other RU_PER_SEC = 50 BURSTABLE;
  • 不允许突破限额:不允许租户 app_other 突破限额
 ALTER RESOURCE GROUP rg_other RU_PER_SEC = 50;

如上图所示,可以看到租户 app_other 的业务初始资源配额没有限制,可以使用到其所需的最大资源,业务在稳定运行。此时我们临时增加限制,不允许突破限额,在集群收到配置后其 RU 曲线不断下降,直到回到最初的限制状态。

● 总结:

  • ○ 说明 TiDB 的资源管控技术可以在线调整业务资源使用状态,实时添加硬上限,不允许业务突破限额

● 小结:

我们整理一下上面的模拟操作,如下面图示过程,经过测试和验证,证明 TiDB 的资源管控技术可以在线调整业务资源使用状态,允许 TiDB 管理员根据业务运行动态,实时扩大、缩小、取消限额、添加硬上限不允许业务突破限额等操作,非常灵活和方便,大大降低运维的难度,也极大提高集群的资源使用效率。

跨业务共存测试

我们通过调整租户 app_oltp 业务的压测 QPS,产生出租户 app_oltp 业务的波峰和波谷。这里我们模拟不同业务在同一个集群融合共存,所有业务经历最重要业务的一个波峰、波谷完整周期,观察运行情况。流程如下:

● 首先三类负载同时运行,表示业务正常共存情况

● 业务流量高峰来临,租户 app_oltp 达到峰值负载

● 租户 app_oltp 峰值过去,回到平时状态

● 租户 app_oltp 的负载到低谷值,其他不变

● 租户 app_oltp 低谷过去,回到平时状态

如上图可以看到,刚开始时集群的几个业务正常共存,三类负载同时运行着。

● 租户 app_oltp 达到峰值负载其业务流量高峰来临,系统会分配给它更多的资源,于此同时由于集群可用资源不足租户 app_olap 分配得到的 RU 有所减少,等到租户 app_oltp 的峰值过去,租户 app_olap 分配得到的 RU 有所增加回到最初的状态。

● 经过一段时间后,租户 app_oltp 达到其运行的业务谷值其所需要的 RU 下降,此时集群空闲 RU 增多,由于租户 app_olap 设置的是 BURSTABLE, 允许突破限额使用资源,所以租户 app_olap 的可用 RU 上升,等到租户 app_oltp 的谷值过去,租户 app_olap 分配得到的 RU 有所减少回到最初的状态。

● 由于租户 app_other 自始至终有配额限制且需要较少的 RU ,所以其稳定维持在一个较低的水平,不影响别的业务运行。

前面的过程我们是从集群资源使用的角度看的问题,现在换个视角从业务 QPS 角度来看,如上图所示不同的业务的运行 QPS,基本随着可用资源的增多而升高,随着可用资源的减少而下降,服务业务预期。由此得出, 利用 TiDB 提供的资源管控和调度能力,多个不同诉求的租户能够共存在一套系统中,在保证各自服务目标的基础上,提升资源使用效率。

总结

我们验证了针对单个在线业务的资源调整,以及模拟了重要业务在经历完整波峰、低谷的运行周期内各个业务的运行情况,每个要点的测试数据和结果都符合我们的预期,证明了该资源管控技术的可行性。同时也表明了:

● TiDB 的资源管控技术能动态跟踪业务负载情况,实时分配所需的资源,证明其操作具有良好的实时性。

● 当系统中存在多业务负载时,能够实现资源隔离,保证重要的业务不受其他访问的影响。

● 在系统负载较低时,繁忙的应用允许超过设定的配额,能最大化利用资源,提升硬件利用率,降低运行成本。

跨业务系统多租户解决方案

基于我们线上 TiDB 的使用方式,就可以制定出一个初步的跨业务系统多租户解决方案,其他业务系统的部署架构需要具体情况具体分析。

这里使用 TiDB 多租户技术,能完成多个业务系统使用统一的集群,保证不同业务负载相互隔离,互不干扰,互不影响,然后对于有统计分析类需求也可以再利用 TiFlash 的 实时 HTAP 能力,实现跨业务数据关联查询,这部分能力通过 TiFLash 与 TiKV 也进行了物理隔离,不会影响线上运行的 TP 业务。这个方案架构图大致如下:

方案说明

● 根据不同的业务设置不同资源组和 RU,当集群整体资源繁忙时实现不同业务基于 RU 限流和负载隔离;

● 为重要业务设置资源组 BURSTABLE 属性,实现跨业务错峰资源借用;

● 为重要业务设置优先级为 HIGH,确保集群优先保证重要业务资源可用;

● 引入 TiFlash 解决实时数据分析需求;

● 如果业务有必要,还可以针对 tidb-sever 划分不同的业务节点,真正达到整个集群的资源隔离

方案总结

● 优势

○ 通过控制应用、会话、SQL 放入到对应的资源组中,高优先级的业务可以优先被满足,剩余的算力可以去满足次优的业务,达到资源的充分利用

○ 系统可扩展性强,在系统负载较低的情况下,繁忙应用即使超过设定的 RU,也仍然可以获得所需的系统资源,从而提高了系统的可扩展性

○ 不同业务可以混合部署在同一个集群上,减少硬件成本

○ 不同业务错峰使用资源,提升整体资源利用率,降低运行成本

○ 节约硬件成本

○ 高可扩展

○ 资源灵活管控

○ 解决数据孤岛问题

● 劣势

○ 资源划分策略难以确定,先根据硬件情况估计分配,在运行一段时间后负载校准,再介入调整,这需要运维人员有很高的技术和经验,容易出错

○ 集群系统复杂度变高,要手动对集群资源池进行划分和管理,增加系统的复杂度,维护难度变高

○ 系统复杂度高

○ 资源分配策略不好制定

未来展望

● 笔者在测试验证中发现,资源如何划分是一个比较棘手的问题,通过硬件配置校准 RU 的估算容量并不准确,真实容量往往偏差较大,所以需要我们先给较大的资源配额,观察一段时间后通过负载校准得到真实 RU 消耗再设置正确值,如果这块后续能够更加智能、更加自动化,减少人工的介入可能会更完美,期待官方后续优化。

● 目前 RU 包括的资源是 CPU 、磁盘 IO 和网络 IO,暂时还不支持内存资源的管控,期待后续官方把内存的使用管控也加进来。

● 调整资源组配置后,只对用户新建的会话生效,我们线上不少业务是长连接,这会导致无法生效,期待官方后面也能优化这方面的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/881026.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LAXCUS和GPU软硬件结合,构建强大算力生态

随着科技的不断进步,计算机技术已经渗透到我们生活的方方面面。其中,GPU(图形处理器)作为一种强大的计算设备,已经成为了人工智能、大数据、云计算等领域的核心硬件之一。然而,传统操作系统都是单机系统,只能在一台计算…

哈威比例多路阀控制放大器

多路比例阀放大器控制负载敏感原理的比例多路换向阀,它用于与负载无关的、无级调节液压执行元件的运动速度。 多个执行元件可以同时和相互无关地进行工作。 这种类型的阀主要用于行走液压机械(例如:起重控制系统)。 通过选择执行元…

数据安全服务能力评定资格证书-申请流程

数据安全服务能力评定(以下简称能力评定)是指对数据安全服务提供商从事数据安全服务综合能力的评定,包括技术能力、服务能力、质量保证能力、人员构成与素质、经营业绩、资产状况等要素。 用于对中华人民共和国境内的数据安全服务提供商提供…

react实现模拟弹框遮罩的自定义hook

需求描述 点击按钮用于检测鼠标是否命中按钮 代码实现 import React from react; import {useState, useEffect, useRef} from react;// 封装一个hook用来检测当前点击事件是否在某个元素之外 function useClickOutSide(ref,cb) {useEffect(()>{const handleClickOutside…

localhost:8080 is already in use

报错原因:本机的8080端口号已经被占用。因为机器的空闲端口号是随机分配的,而idea默认启动的端口号是8080,所以是存在这种情况。 对于这个问题,我们只需要重启idea或者修改项目的启动端口号即可。 更推荐第二种。对于修改项目启动端口号&…

贴吧照片和酷狗音乐简单爬取

爬取的基本步骤 很简单,主要是两大步 向url发起请求 这里注意找准对应资源的url,如果对应资源不让程序代码访问,这里可以伪装成浏览器发起请求。 解析上一步返回的源代码,从中提取想要的资源 这里解析看具体情况,一…

Java真实面试题,offer已到手

关于学习 在黑马程序员刚刚开始的时候学习尽头非常足,到后面逐渐失去了一些兴趣,以至于后面上课会出现走神等问题,但是毕业时后悔晚矣。等到开始学习项目一的时候,思路总会比别人慢一些,不看讲义写不出来代码。 建议…

Live Market是如何做跨境客户服务的?哪些技术赋能?

在面对不同的海外市场和用户群体时,如何进行有效地出海营销是跨境商家面临的挑战。其中消费者服务管理和卖家保障尤其关键,如何做好客户服务管理?包括处理好客户投诉,提升消费者满意度是所有跨境商家和品牌独立站卖家非常重视的问题。 在数字化浪潮席卷之下&#…

广告聚合平台能为APP开发者提供哪些帮助

应用变现平台是帮助开发者优化广告策略并最终获得更多收入的综合途径。在广告变现过程中,接入单一的广告联盟,变现效率不高,并且开发者需要花费许多精力进行筛选和管理,难免会应接不暇,而聚合广告平台的出现则一定程度…

【CLion + ROS2】在 clion 中编译调试 ros2 package

目录 0 背景1. 命令行编译 ros2 package2. 使用 clion 打开 ros2 工程3. 使用 clion 编译整个 ros2 工程3.1 使用 clion 的 external tool 配置 colcon build3.2 开始编译 dev_ws 工程3.3 编译结果: 4. 调试单独的 ros2 package4.1 创建 ros2 package 的独立的 colc…

java知识-JVM线程四大引用

一、JVM (1) 基本概念: JVM 是可运行 Java 代码的假想计算机 ,包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收,堆 和 一个存储方法域。JVM 是运行在操作系统之上的,它与硬件没有直接 的交互。 (2) 运行过程&#x…

【数仓建设系列之一】什么是数据仓库?

一、什么是数据仓库? 数据仓库(Data Warehouse,简称DW)简单来讲,它是一个存储和管理大量结构化和非结构化数据的存储集合,它以主题为向导,通过整合来自不同数据源下的数据(比如各业务数据,日志文件数据等)…

redis数据类型详解+实例

redis中的数据类型: string,list, set, zset, hash,bitmaps, hyperloglog, gepspatial 目录 一、 String 二、List 三、Set 四、Zset 五、Hash 六、Bitmaps 七、Hyperloglog 八、Gepspatial 一、 String redis最基本的数据类型,一个…

CSS3:图片边框

简介 图片也可以作为边框&#xff0c;以下是实例演示 注意 实现该效果必须添加border样式&#xff0c;且必须位于border-image-socure之前否则不会生效 实例 <html lang"en"><head><style>p {width: 600px;margin: 200px auto;border: 30px soli…

为什么爬虫要用高匿代理IP?高匿代理IP有什么优点

只要搜代理IP&#xff0c;度娘就能给我们跳出很多品牌的推广&#xff0c;比如我们青果网路的。 正如你所看到的&#xff0c;我们厂商很多宣传用词都会用到高匿这2字。 这是为什么呢&#xff1f;高匿IP有那么重要吗&#xff1f; 这就需要我们从HTTP代理应用最多最广的&#xf…

企业数据库遭到360后缀勒索病毒攻击,360勒索病毒解密

在当今数字化时代&#xff0c;企业的数据安全变得尤为重要。随着数字化办公的推进&#xff0c;企业的生产运行效率得到了很大提升&#xff0c;然而针对网络安全威胁&#xff0c;企业也开始慢慢引起重视。近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的服务器遭到了…

从零开始学极狐GitLab|03 Runner 裸机部署

目录 极狐GitLab SaaS 版&#xff08;无需部署&#xff09; 安装自己的极狐GitLab- Runner 1. macOS ➤ 安装 ➤ 注册 2. Linux ➤ 安装 ➤ 注册 3. Windows ➤ 安装 ➤ 注册 【从零开始学极狐GitLab】专栏由极狐GitLab 社区开发者“雪碧能喝多”投稿&#xff0c;面…

Elasticsearch - 闲聊ElasticSearch中的分页

文章目录 概述分页方案from-size内部执行过程【Query】阶段【fetch】阶段潜在问题注意事项 深度分页Scroll &#xff08;Scroll遍历数据&#xff09;Scroll ScanSliced ScrollSearch After基于pit机制的search after 小结 概述 ElasticSearch是一款强大的搜索引擎&#xff0c;…

轻拍牛头(约数)

题意&#xff1a;求ai在n个数中&#xff0c;ai可以整除的数有多少个&#xff0c;不包括ai自己。 分析&#xff1a;暴力写需要n^2的时间复杂度&#xff0c;此时想一下预处理每个数的倍数&#xff0c;约数和倍数是有关系的&#xff0c;把每个数的倍数都加上1. #include<bits…

优思学院|在六西格玛项目中如何知道过程是否受控?

当我们说过程处于统计受控状态时&#xff0c;我们是指过程不存在特有原因。 以下面的图表来说明&#xff0c;过程处于“不受控”状态和“受控”状态时的情况。 当过程在统计意义上是受控的&#xff0c;它并不意味着过程产出的产品就不会超过规定的规范&#xff0c;符合质量要…