TiDB 7.1 多租户在中泰证券中的应用

本文详细介绍了中泰证券在系统国产化改造项目中采用 TiDB 多租户技术的实施过程。文章分析了中泰证券数据库系统现状以及引入 TiDB 资源管控技术的必要性,探讨了 TiDB 多租户的关键特性,并阐述了在实际应用中的具体操作步骤。通过该技术的应用,中泰证券有效降低了运维成本,提升了开发效率。 文章强调了 TiDB 多租户在证券企业中的应用优势,特别突出了其在资源观测、复用、可配置性等方面的价值。

项目背景

中泰证券股份有限公司(原名齐鲁证券有限公司)成立于 2001 年 5 月,是国内排名前 20 的全国大型综合性券商,在全国 28 个省市自治区设有 45 家分公司、280 多家证券营业部,员工 9000 多人,控股中泰期货、中泰资本、中泰金融国际、中泰资管、中泰创投、齐鲁股权交易中心、万家基金,形成了证券、期货、基金、投资等各项业务齐头并进的发展格局。

受国际环境影响,在国家政策的大力支持下,系统国产化开始在全国范围内加速落地。中泰证券在系统国产化改造项目中,使用 TiDB 和国产化操作系统、芯片,提升自主可控能力。

中泰科技研发部目前使用两套 TiDB 集群,将多套业务系统进行集合。TiDB 集群版本号均为 V7.1。按照业务系统服务对象的不同,分别承载对外和对内客户业务。基于 TiDB 对大表的支持性更友好,无需分库分表,复杂 SQL 的性能提升明显,TiDB 的弹性扩缩容,简单易运维操作。这些,都毫无疑问地降低了运维成本、提升了开发效率。但是这两套集群都是多套业务系统共用,因此,非常需要资源管控技术,确保每一个业务系统都拥有独立的资源池。

TiDB 多租户介绍

TiDB 6.6 首次引入资源管控(Resource Control,简称:RC)特性,并在 TiDB 7.0 进行了优化和增强。该技术利用资源组 (Resource Group) 限制每个资源组所能使用的计算和 IO 资源,同时创造性的引入 burst (可超用)属性,当集群有空闲资源时,允许资源组超越限制,实现资源的充分利用。

这个特性满足了目前一些企业的需求,也可以顺带解决了部分用户的痛点:

  1. 业务系统间影响和干扰 :某个业务系统的非预期负载变化会影响其他业务系统的正常运行。
  2. 分析业务对交易的影响 :对资源需求较高的数据分析或批量作业会影响其他业务系统的响应时间。
  3. 运维操作对资源的消耗 :数据备份、统计信息收集等后台任务可能会影响服务质量。

具体应用和实施

以下文章内容中的数据均基于生产环境做过修改,不是真实数据,仅供参考。

3.1 资源评估

打开 Dashboard 页面,在左侧菜单列表中找到 Resource Manager,在 Estimate Capacity 中 根据标准测试类型进行资源评估。

3.2 应用绑定 RU

通过梳理数据库中的业务用户,确定哪些用户是属于哪些业务系统,方便后面将不同的资源组与不同的用户绑定。

执行以下 SQL 为业务 A、业务 B、以及管理员绑定 Resource Control 和 RU。业务 A 和业务 B 同属于 TP 系统,业务重要性较高,对 sql 查询速度和效率都有一定的要求,对慢查询容忍性较低。所以对业务 A 和业务 B 的资源分配优先级要高一些,并且允许资源超用(BURSTABLE),应对前端业务流量的突增。而管理员账户日常主要用来做数据库管理相关的工作,很少或者不涉及业务 SQL,所以资源分配优先级较低,可以先设置成允许资源超用。

初步绑定都设置 BURSTABLE 属性确保每个业务都有充足 RU 可以使用,避免资源不足情况而无法观察到某个业务真实 RU 消耗情况。

-- 创建A资源组
CREATE RESOURCE GROUP IF NOT EXISTS a_rg RU_PER_SEC=180000 PRIORITY=HIGH BURSTABLE;
-- 创建B资源组
CREATE RESOURCE GROUP IF NOT EXISTS b_rg RU_PER_SEC=90000 PRIORITY=HIGH BURSTABLE;
.....
-- 创建管理员查询资源组
CREATE RESOURCE GROUP IF NOT EXISTS admin_rg RU_PER_SEC=20000 BURSTABLE;
​
-- 为不同业务系统用户绑定资源组
-- 将A资源组绑定到A业务系统用户上
ALTER USER a_user RESOURCE GROUP a_rg;
-- 将B资源组绑定到B业务系统用户上
ALTER USER b_user RESOURCE GROUP b_rg;
.....
-- 将管理资源组绑定到系统管理用户上
ALTER USER admin_user RESOURCE GROUP admin_rg;

3.3 观察应用 RU 使用情况

完成绑定后 ,TiDB 可以实时统计到各个业务消耗的资源情况。生产运行一段时间后,需要观察业务实际消耗 RU, 完成后续调整。

依然是去 Dashboard 页面,在左侧菜单列表中找到 Resource Manager。这个页面较之前业务系统用户没有绑定 RU 之前,多了一个 Configuration 模块。可以在这里模块清晰的观察到每个资源组的详细信息。

继续在 Resource Manager 页面中找到 Metrics 模块,观察 RU 的使用情况(建议观察时间区域尽可能长,以得到更全面的 RU 消耗情况),如下图所示。

将这个曲线和上面 Configuration 模块的 RU 信息对照,查看是否需要进行 RU 调整。调整语句如下:

-- A业务系统最高消耗 17000 RU ,建议绑定 25000 RU ,预留一定 Buffer ,由于总体资源充足设置 BURSTABLE 属性确保业务有足够资源
alter resource group a_rg RU_PER_SEC=25000 PRIORITY=HIGH BURSTABLE;
​
-- B业务系统最高消耗 14000 RU ,建议绑定 20000 RU ,预留一定 Buffer ,由于总体资源充足设置 BURSTABLE 属性确保业务有足够资源
ALTER RESOURCE GROUP b_rg RU_PER_SEC = 20000  BURSTABLE;
​
-- 设置管理员查询资源组,不设置 BURSTABLE 属性,降低管理员执行 Slow Query 时对集群影响
alter resource group admin_rg RU_PER_SEC=10000;

RU 使用收益

由于目前 TiDB 服务器资源充足,并且各个业务系统的峰值谷值都具有同一性,每个业务系统的重要程度也差不多。所以 TiDB 这个多租户特性带来的价值主要体现在资源的可观测性和可配置性上。

在资源可观测性上 :有了 RU,结合 Dashboard,可以清楚的观察到每个业务系统使用了多少资源,TiDB 整个集群资源是否充足,是否需要添加资源。

在资源可配置性上 :TiDB 多租户最重要的能力是在资源繁忙时实现资源控制,后续继续迁移新业务导致资源不足且临时没有服务器添加到集群的场景下可以在线解除 BURSTABLE 属性,给业务设置合适的 RU 大小来实现资源控制。此能力可以在线调整,对业务几乎无感知。在资源不足的极端场景下,能够控制不同用户的资源消耗,保证各业务系统的资源隔离性,用户可以安心使用 TiDB 多租户能力。

结语

大部分企业会给 TiDB 集群预留充足资源,此时利用 BURSTABLE 属性实现资源观测和资源复用;小部分企业无法给 TiDB 集群预留充足资源,此时可以在线修改多租户配置并实现资源控制。

目前,在证券企业中,许多业务系统跑在不同的 MySQL 集群上面。随着 MySQL 5.7 生命周期结束以及 IT 基础设施国产化改造的推进,把存量的多套 MySQL 集群归集到一套 TiDB 集群成为一个理想的解决方案。通过 TiDB 的资源管控特性,多个业务能够共享一套集群,实现资源的有效利用。对比传统多租户方案,TiDB 多租户除了基础资源控制能力以外还提供了更强大的资源复用能力、资源可观测性、在线可配置性、在线限流等能力。可以更好降低整体硬件成本、减少多集群运维成本、观测资源池使用率。

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

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

相关文章

cfa一级考生复习经验分享系列(十七)

考场经验: 1.本人在Prometric广州考试中心,提前一天在附近住下,地方比较好找,到了百汇广场北门,进去就可以看见电梯直达10楼。进去之后需要现场检查行程卡和健康码,然后会问最近你有没有发烧咳嗽等问题&…

编程笔记 html5cssjs 009 HTML链接

编程笔记 html5&css&js 009 HTML链接 一、HTML 链接二、文本链接三、图片链接四、HTML 链接- id 属性五、锚点链接六、HTML 链接 - target 属性小结 网页有了链接,就可根据需要进行跳转。纸质读物只能根据指示的页码翻页,而网页则可以通过链接直…

JMeter逻辑控制器之ForEach控制器

1. 背景 前段时间在对某项目进行测试,存在一个需要遍历所有组织机构后给每个组织下新增部门的场景,其实也可以通过在数据库中直接添加数据这种方式来实现,但是有点风险,可能会生成脏数据,后期也不好排查,最…

linux系统 CentOS Tomcat 部署论坛

jdk安装命令:yum -y install java-1.8.0-openjdk-devel.x86_64 结尾上显示下图为成功 检查jdk环境是否配置成功命令:java -version或javac 显示版本 显示信息 mysql安装: 检查是否存mariadb数据库:rpm -qa | grep mariad 卸载ma…

企业计算机服务器中了360后缀勒索病毒如何处理,勒索病毒应对步骤

网络技术的应用与发展,为企业的生产运营提供了有力保障,但也为网络安全威胁埋下隐患。近期,网络上的勒索病毒非常嚣张,严重影响了企业的生产运营。近日,云天数据恢复中心接到很多企业的求助,企业的计算机服…

嵌入式单片机的存储区域与堆和栈

一、单片机存储区域 如图所示位STM32F103ZET6的参数: 单片机的ROM(内部FLASH):512KB,用来存放程序代码的空间。 单片机的RAM:64KB,一般都被分配为堆、栈、变量等的空间。 二、堆和栈的概念 …

HBase 例行灾备方案:快照备份与还原演练

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…

秋招复习篇之代码规范

目录 前言 1、变量命名 2、代码空格 1)操作符左右一定有空格, 2)分隔符(, 和;)前一位没有空格,后一位保持空格,例如: 3)大括号和函数保持同一行,并有一个空格…

Python 网络编程之搭建简易服务器和客户端

用Python搭建简易的CS架构并通信 文章目录 用Python搭建简易的CS架构并通信前言一、基本结构二、代码编写1.服务器端2.客户端 三、效果展示总结 前言 本文主要是用Python写一个CS架构的东西,包括服务器和客户端。程序运行后在客户端输入消息,服务器端会…

虹科方案丨L2进阶L3,数据采集如何助力自动驾驶

来源:康谋自动驾驶 虹科方案丨L2进阶L3,数据采集如何助力自动驾驶 原文链接:https://mp.weixin.qq.com/s/qhWy11x_-b5VmBt86r4OdQ 欢迎关注虹科,为您提供最新资讯! 12月14日,宝马集团宣布,搭载…

Java在SpringCloud中自定义Gateway负载均衡策略

Java在SpringCloud中自定义Gateway负载均衡策略 一、前言 spring-cloud-starter-netflix-ribbon已经不再更新了,最新版本是2.2.10.RELEASE,最后更新时间是2021年11月18日,详细信息可以看maven官方仓库:org.springframework.clou…

获取Android和iOS崩溃日志的方法

文章目录 一、Android崩溃日志1、获取方法1.1 通过adb logcat获取1.2 通过adb shell dumpsys dropbox命令获取 2、导出设备Crash日志3、导出设备ANR日志4、常见日志类别 二、iOS崩溃日志1、获取方法1.1 xcode中打开1.2 手机上直接获取 2、Crash 头部信息 一、Android崩溃日志 …

js中深拷贝与浅拷贝的区别?如何实现一个深拷贝?(收藏好,用时好找)

文章目录 一、数据类型存储二、浅拷贝Object.assignslice()concat()拓展运算符 三、深拷贝_.cloneDeep()jQuery.extend()JSON.stringify()循环递归 四、区别小结 一、数据类型存储 前面文章我们讲到,JavaScript中存在两大数据类型: 基本类型引用类型 …

为什么微信小程序不用div而是用自创的view标签?

在官方的《小程序开发指南》中,明确说明了为什么要自定义标签以及这么设计的原因和带来的好处,说明如下: 6.1.2 管控与安全 基于Web 技术来渲染小程序是存在一些不可控因素和安全风险的。这是因为Web技术是非常开放灵活的,我们可以…

多维时序 | MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预测

多维时序 | MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预测 目录 多维时序 | MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现SSA-GRU麻雀算法优化门控循环单元多变量时间序列预…

[C/C++]排序算法 快速排序 (递归与非递归)

目录 🚩概念: 🚩实现: ⚡1.hoare ⚡2.挖坑法 ⚡3.双指针法 🚩快速排序递归实现 🚩快速排序非递归实现 🚩概念: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有…

C# Lock 解读

C# Lock 解读 一、Lock定义二、简单例子三、简单解释一下执行过程四、Lock的对象选择问题1、为什么不能lock值类型2、Lock字符串3、MSDN推荐的Lock对象4、lock(typeof(Class)) 五、特殊问题:Lock(this)等的详细解释总结 一、Lock定义 lock 关…

Vue.set 方法原理

function set(target, key, value) {// 判断是否是数组,并且 key 是一个有效的索引值if (Array.isArray(target) && isValidArrayIndex(key)) {target.length Math.max(target.length, key)target.splice(key, 1, value)return value}// 判断 key 是否已经…

JS常见正则表达式写法(附案例)

正则表达式方法示例: 1. test方法解析,test判断正则是否在字符串中出现过,如果出现返回true,如果没出现返回false。 let str hello world; let ret1 /e/.test(str); // true let ret2 /q/.test(str); // false 如&…

Pytorch的讲解及实战·MNIST数据集手写数字识别

目录 一、前言与pytorch的下载 1、前言 2、下载pytorch ①创建虚拟环境 ②下载pytorch(cpu版) ③测试pytorch是否下载成功 ④使用jupyter notebook 但是使用不了torch的解决方法 二、pytorch的使用 1、Tensor的数据类型 ①torch.FloatTensor …