金融企业区域集中库的设计构想和测试验证

news2024/10/6 14:39:00

导读

本文探讨了金融企业区域集中库的设计构想和测试验证,包括架构设想、数据库整合场景测试及优势和使用设想。作者提出利用 TiDB 数据库产品集中建设区域集中库,解决 MySQL 存量节点的整合问题,实现部署的标准化、按需扩展和统一运维管理。文章详细介绍了测试内容和结果,强调了区域集中库在建设和运行成本、服务质量等方面的优势,并提出了相应的管理措施,为金融企业数据库架构提供了有价值的参考 。

本文作者 :

邵 健 |杭州银行股份有限公司数据库专家

张显华丨杭州银行股份有限公司数据库专家

区域集中库的架构设想

在银行等金融企业的网络设计中,会根据服务主题将内部网络分割成若干个网络安全域,如:核心网络域、网银网络域等。在各个网络域中,根据业务应用对数据库的需求配置资源。随着业务的创新和发展,MySQL 存量节点多,管理难度大,资源利用率低,背离了规模部署、高效运维、敏态供给的云化发展理念,在生产运行的各阶段中存在不少的能力短板,比 如:

  • 部署建设阶段
  • 以业务发展目标或者每日批量压力高峰进行数据库资源规格评估,可能存在资源浪费和发展不同步的可能性。
  • 不同的版本、部署方案、变量参数和管理平台共存, 配置的碎片化不利于团队知识管理,阻碍标准化发展。
  • 生产运行阶段
  • 应用数模设计阶段缺少主键约束造成主从同步延迟,影响从库数据时效,高可用机制可能存在不稳定。
  • 业务应用重复订阅全行统一的人员、机构和客户等主数据推送,浪费存储容量,占用数据库和网络资源。
  • 数据库面对下游业务的数据供给需求,复制链路构成较为复杂的网状结构,管理和维护成本较高,客户上限制了数据价值的进一步挖掘。

TiDB 数据库产品具备良好的水平扩展能力,能满足高并发大数据量业务的使用需求。通过 resource control 特性可划分集群资源,承载不同的业务应用。设想在单个网络域中集中建设一套 TiDB 集群,进行当前业务的迁移,整合替代“孤岛式”的 MySQL 集群(见图一),实现部署的标准化、按需扩展和统一运维管理。

图一 “孤岛式”的 MySQL 集群和分布式数据库区域集中库演进设想

数据库整合场景测试

基于网络区域集中库的设计构想,进行实际整合场景的需求抽象,使用 TiDB 做为测试平台,验证在分布式数据库上快速创建不同规格的数据库服务以提高设备利用率,并通过标准化高可用等管理体系降低总体成本。

2.1 资源管控

Request Unit (RU) 是对 CPU、IO 等系统资源的统一抽象的计量单位,用于表示对单个请求消耗的资源量。请求消耗的 RU 数量取决于多种因素,例如操作类型或正在检索或修改的数据量。

  • 集群资源的评估

测试集群配置为三台两路 ARM 服务器。使用 oltp_read_write 模型估算集群的 RU 上限为 163000 RU(见图二)。

图二 oltp_read_write 模型容量估算的标签页

使用 TPCC 模型估算为 459000 RU(见图三)。

图三 TPCC 模型容量估算的标签页

使用 root 用户进行 oltp_read_write 模型高并发压测可得集群最大 RU 365000(图四)。

图四 单个 root 用户测试的 RU 消耗监控面板

三种评估方法结果(见表一)表明,估算和实际的差距较大,估算方法需要改进。

表一 评估方法结果

  • 不同规格 RU 对联机交易的影响

配置三个资源组的每秒 RU 参数 (见图五),数据库用户归属于资源组后,每秒使用的 RU 上限受该参数控制。

图五 三资源组测试的资源组容量

三个用户对应三个资源组同时压测,RU 使用平稳(见图六)。

图六 三资源组测试 RU 消耗监控面板

压测结果(见表二)表明,实际使用上限基本符合配置,QPS 与 RU 成正比关系,符合配置规则。

表二 资源组每秒 RU 规划的业务测试结果

  • 资源组 BURSTABLE 属性对调度的影响

配置资源组 test_rg1 启用可突发(BURSTABLE)属性(见图七),当系统资源闲置时,该资源组可以超出上限。

图七 burstable 属性测试的资源组容量标签页

先发起 test_rg1 资源组中用户的压测,RU 使用达到了 293000 左右,体现 burstable 参数在集群空闲状态下的配置效果,再发起另外两个资源组的压测,test_rg1 逐步回落到资源组配置上限 160000 左右(见图八)。

图八 资源组 burstable 属性测试的 RU 消耗监控面板

压测结果(见表三)表明,BURSTABLE 属性可以充分利用闲置资源。繁忙时,会优先保证上限内的 RU 分配。

表三 资源组 burstable 属性的业务测试结果

  • 在线调整 RU 对联机交易的影响

发起 test_rg1 组中用户的压测,在线调整资源组的每秒 RU 值,即时反应到实际 RU 使用(见图九)。

图九 在线调整资源组测试的 RU 消耗监控面板

压测结果(见表四)表明,资源组配置变更即时反应到业务的 QPS 上。

表四 在线调整资源组测试的业务测试结果

2.2 读写分离

在 MySQL 架构中,为防止对业务主交易造成影响,将从库用于数据抽取、异步检查等只读场景。区域集中库也需要实现等同于读写分离的隔离效果,分布式数据库配置 Learner 角色,只参与同步数据而不参与多数派投票。

使用 Placement Rules 将 33 节点的 TiKV 实例标签配置为 Learner 数据副本,监控中对应实例的 Leader 数量为 0(见图十),只同步数据,不响应交易的读写请求。

图十 各个 TiKV 实例的 Leader 数量分布监控面板

  • 会话的读写分离

设置变量 set session tidb_replica_read=‘learner',执行查询 SQL 时只使用 33 节点的资源(见图十一)。

图十一 TiKV 实例 CPU 监控面板

  • 物理备份的读写分离

使用 --replica-read-label 参数执行 br 备份命令,只使用 33 节点写入备份文件(见图十二)。

图十二 备份写数据监控面板

2.3 业务管理

多业务整合的场景中,不仅需要关注资源开销,还需要关注数据库的业务管理特性,比如 SQL 黑名单、细粒度监控、连接标识等,提升管理员的运维效率。

2.3.1 SQL 黑名单功能

  • 资源组的自动策略

配置 default 资源组属性 query_limit=(exec_elapsed='100s', action=kill,watch=similar ),实现语句执行超过 100s 后自动 kill。慢 SQL 语句执行超时后被 kill(测试效果如下),说明自动策略可以支持慢 SQL 的自动化管理。

MySQL> select now();select *,(select max(c) from sbtest2 where sbtest1.c=sbtest2.c group by id ) avgc from sbtest1 where sbtest1.id< 5000;select now(); 
+---------------------+
| now()               |
+---------------------+
| 2024-02-05 15:33:15 |
+---------------------+
1 row in set (0.000 sec)
ERROR 1105 (HY000): other error: Coprocessor task terminated due to exceeding the deadline
+---------------------+
| now()               |
+---------------------+
| 2024-02-05 15:34:55 |
+---------------------+
1 row in set (0.000 sec)
  • 手工配置黑名单

配置 query watch 清单 query watch add action kill sql digest 'DIGEST 值'中。SQL 语句执行后提示被中断(测试效果如下),说明可以支持慢 SQL 的手工管理。

MysQL> select *,(select max(c) from sbtest2 where sbtest1.c=sbtest2.c group by id ) avgc from sbtest1 where sbtest1.id< 100; 
ERROR 8254 (HY000): Quarantined and interrupted because of being in runaway watch list

查询验证限制记录(测试效果如下),说明可分析黑名单生效记录。

MySQL> select * from mysq1.tidb_runaway_queries order_by time desc limit 1\G
*************************** 1. row ***************************
resource_group_name: default
               time: 2024-02-05 14:57:37
         match_type: watch
             action: ki11
       original_sq1: select *,(select max(c) from sbtest2 where sbtest1.c=sbtest2.c group by id ) avgc from sbtest1 where sbtest1.id< 100 
        plan_digest: 85484f90b715278bd114095a4bbbe168da158f24e824a04d11c09be7268fe2ab           tidb_server: 10.186.136.31:4000
1 row in set (0.002 sec) 

2.3.2 业务会话标识功能

  • 会话变量

会话变量 tidb_session_alias 可动态定义会话中业务标识,如当前运行的交易码信息,会话视图、慢日志及 General log 的 session_alias 列中会记录运行值,类似 Oracle 数据库 v$session 的 module 列可以帮助识别应用程序功能模块信息。

编辑测试描述文件 oltp_read_write.lua,添加 con:query("set tidb_session_alias='QUERYXXX'"),模拟应用切换交易码。慢日志(见图十三)和 processlist 视图(见图十四)中 session_alias 标识 SQL,可分析 SQL 语句的业务行为。

图十三 慢日志中的业务标识

图十四 processlist 视图的业务标识

  • 会话属性

系统视图 session_connect_attrs 可查看连接的固定属性信息,数据库侧可用于梳理应用的自定义连接信息。配置连接串参数 connectionAttributes=app_name:bank,ver:v1.0&(见图十五)或者使用 JDBC 内置方法,实现应用版本等标识。

图十五 Jmeter 的连接串配置

系统视图 session_connect_attrs 可查看应用的自定义属性(见图十六),说明可分析客户端信息。

图十六 系统视图中的客户端属性

2.3.3 细粒度监控功能

配置 record-db-label 可以在 db 和 resource_group 粒度上提供 QPS、Duration 等 metrics 指标,在 grafana 添加监控面板(见图十七)。

图十七 细粒度的 QPS 和 Average Duration 监控面板

2.4 测试小结

通过以上的测试,基本上验证了利用分布式数据库实现区域集中库的设想:

  1. 资源隔离特性具备数据库规格限制,支持用户、会话及语句等粒度。在线调整即时生效的特点,可以基于不同业务资源消耗的时间窗口进行资源“调度”,实现资源利用效益最大化。
  2. Learner 角色副本可用于数据抽取、查询和备份等场景,保证生产隔离,节省“从集群”的资源开销。
  3. 通过规则和已知的 SQL 指纹对不良 SQL 能实现有效防范。
  4. 通过业务会话标识和细粒度监控功能,基本满足应用整合后的观测需求。
  5. 集群 RU 评估方法、Query Limit 策略添加扫描行数或 RU 资源使用监控、资源组添加时间计划等有待继续改进。

区域集中库的优势和使用设想

区域集中库是将数据库整合落地在数据库层,通过标准化部署和细粒度资源配置,得到更高的服务可用性、规格弹性和资源利用率。两种整合方式的适用情况对比如表五。

表五 区域集中库特性对比

表五 区域集中库特性对比

综合各个能力项对比结果,评估区域集中库在建设和运行成本、服务质量上均具有较大的优势。在使用过程中,需要配套管理措施:

  • 开发建设典型业务压测模型(如转账交易)作为标尺,根据该模型得到集群交易性能上限,按典型业务性能设计成多个规格,再由需求方根据该模型评估业务交易性能需求规格和业务批量窗口特点进行对接。
  • 统一管理区域集中库的全行主数据,数据团队只需要接入一次数据,实现资源集约使用。
  • 利用单副本的 Learner 节点实现读写分离,对接备份、ETL 抽取、数据查询平台等非业务的数据需求。
  • 与行内的低代码开发平台进行对接,通过框架的配置功能使用数据库的会话属性和业务会话标识功能,实现更加有效的 SQL 定位和管理。
  • 引导应用运维自助查看资源组监控和细粒度日志。

通过区域集中库的建设整合,将简化数据库能力分层模型(图十八)。

第一层关键业务使用两地三中心的分布式数据库。

第二层高并发大数据量业务使用独立的分布式数据库。

第三层规模较小或者业务发展规模较灵活的业务使用区域集中库。

图十八 数据库能力分层模型

通过区域集中库的建设,实现数据库部署架构的收敛。在此基础上,可进一步对业务数据操作行为的采集和分析,有利于生产运行向智能化转型。

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

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

相关文章

【绩效管理】帮助零售企业建立分层分类绩效考核体系项目纪实

购物中心张经理评价&#xff1a;“员工的绩效管理一直是困扰我公司的难题&#xff0c;我们只懂得怎么经营&#xff0c;至于怎么做人力资源管理&#xff0c;真是一点都不懂。这次华恒智信为我们提供的服务对我们的帮助很大。基于企业实际调研情况&#xff0c;华恒智信专家明确指…

蓝桥杯单片机第十四届省赛模拟考试一

一、基本要求 使用大赛组委会提供的国信长天单片机竞赛实训平台&#xff0c;完成本试题的程序设计与调试。程序编写、调试完成后&#xff0c;选手需通过考试系统提交以准考证号命名的hex文件。不符合以上文件提交要求的作品将被评为零分或者被酌情扣分。 硬件设置&#xff1a; …

SpringBoot3整合RabbitMQ之四_发布订阅模型中的fanout模型

SpringBoot3整合RabbitMQ之四_发布订阅模型中的fanout模型 文章目录 SpringBoot3整合RabbitMQ之四_发布订阅模型中的fanout模型3. 发布/订阅模型之fanout模型1. 说明1. 消息发布者1. 创建工作队列的配置类2. 发布消费Controller 2. 消息消费者One3. 消息消费者Two4. 消息消费者…

windows上使用influx2.7学习

参考 官方文档&#xff1a;https://docs.influxdata.com/influxdb/v2/ 下载 需要下载两样东西&#xff1a;influxd.exe和influx.exe influxd:influx数据库的服务端。下载地址&#xff1a;https://dl.influxdata.com/influxdb/releases/influxdb2-2.7.5-windows.zipinflux:连…

C# 实现子进程跟随主进程关闭

文章目录 前言一、如何实现&#xff1f;1、创建作业对象&#xff08;1&#xff09;、创建对象&#xff08;2&#xff09;、设置销毁作业时&#xff0c;关闭拥有的进程 2、子进程加入作业对象3、销毁作业对象&#xff08;1&#xff09;、手动销毁&#xff08;2&#xff09;、所在…

算法设计与分析实验报告c++实现(连续邮资问题、卫兵布置问题、圆排列问题、求解填字游戏问题、分支限界法求解旅行售货员(TSP)问题)

一、 实验目的 1&#xff0e;加深学生对算法设计方法的基本思想、基本步骤、基本方法的理解与掌握&#xff1b; 2&#xff0e;提高学生利用课堂所学知识解决实际问题的能力&#xff1b; 3&#xff0e;提高学生综合应用所学知识解决实际问题的能力。 二、实验任务 1.连续邮资…

最好用的安卓按钮(3)

属性解释 按钮文字 app:text“床前明月光” 按钮文字颜色 app:textColor“color/color_white” 按钮文字大小 app:textSize“22sp” 按钮背景颜色 app:color_normal“color/color_accent” 0x2 单独设置每个圆角 效果 代码 <top.androidman.SuperButton android:layo…

软考 系统架构设计师系列知识点之数据库基本概念(4)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之数据库基本概念&#xff08;3&#xff09; 所属章节&#xff1a; 第6章. 数据库设计基础知识 第1节 数据库基本概念 6.1.3 数据库管理系统 DBMS&#xff08;DataBase Management System&#xff0c;数据库管理系统&am…

【Linux】SSH协议应用

SSH协议 SSH简介实现OpenSSH ssh中的四个文件~/.ssh文件路径实验解析 SSH 简介 SSH&#xff08;secure shell&#xff09;只是一种协议&#xff0c;存在多种实现&#xff0c;既有商业实现&#xff0c;也有开源实现。本文针对的实现是OpenSSH&#xff0c;它是自由软件&#xf…

ZYNQ实验--CIC插值滤波器实验

一、CIC滤波器介绍 CIC (Cascaded Integrator-Comb) 滤波器是一种常用的数字信号处理滤波器&#xff0c;主要用于降采样&#xff08;decimation&#xff09;和升采样&#xff08;interpolation&#xff09;操作。它具有简单的硬件实现、高效的运算速度以及适用于需要快速处理的…

应届生选导师的创业公司,还是去中厂?

点击上方&#xff0c;选择“置顶/星标公众号” 福利干货&#xff0c;第一时间送达 导师是做自动化设备的控制软件&#xff0c;公司做纯软件。导师能给一样的工资&#xff0c;五人左右团队&#xff0c;潜在收入可能要高一些。纠结哪个对今后的发展更好一些。 大家好&#xff0…

【论文阅读笔记】Mamba模型代码理解

0.开源代码地址 官方实现&#xff1a;state-spaces/mamba (github.com) 最简化实现&#xff1a;johnma2006/mamba-minimal: Simple, minimal implementation of the Mamba SSM in one file of PyTorch. (github.com) 直接实现&#xff1a;alxndrTL/mamba.py: A simple and e…

Java 接口提示500,但console并不报错。

因为习惯了C语言printf打印&#xff0c;且当时并不明白try catch意义所在 如图所示&#xff0c;下添加了行号打印 但只打印出了line 89&#xff0c;无line 91&#xff0c;也无报错 所以使用try catch 包裹Sql查询封装函数 e.printStackTrace(); 果真打印出了 查看Entity类&…

【经典算法】LeetCode25:K 个一组翻转链表(Java/C/Python3,Hard)

#算法 目录 题目描述思路及实现方式一&#xff1a;递归思路代码实现Java 版本C 语言版本Python3 版本 复杂度分析 方式二&#xff1a;迭代和原地反转思路代码实现Java 版本C 语言版本Python3 版本 复杂度分析 总结相似题目 标签&#xff1a;链表、递归 题目描述 给你链表的头…

DFS:floodfill算法解决矩阵联通块问题

floodfill&#xff0c;翻译为洪水灌溉&#xff0c;而floodfill算法本质上是为了解决在矩阵中性质相同的联通块问题。 一、图像渲染 . - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int dx[4]{0,0,1,-1};int dy[4]{1,-1,0,0};int prev;//记住初始值int m,…

什么是广播系统语言传输指数 STIPA

基础知识 通过广播系统播放一个确定的信号&#xff08;STIPA 测试信号&#xff09;&#xff0c;再在待测点测量其到达后的质量即可。IEC 60268-16 标准中定义通过单一值表示清晰度结果&#xff0c;0 表示完全无法理解&#xff0c;1 表示完美理解。测量单位是 STI&#xff08;语…

C#探索之路基础夯实篇(3):面向对象的三大特性和五大原则详解

文章目录 前提&#xff1a;一、特性&#xff1a;二、原则&#xff1a;三、示例1. 单一职责原则 (Single Responsibility Principle, SRP)&#xff1a;2. 开放-封闭原则 (Open-Closed Principle, OCP)&#xff1a;3. 里氏替换原则 (Liskov Substitution Principle, LSP)&#xf…

移动硬盘能当u盘重装系统吗?做启动数据还能恢复吗

在数字时代&#xff0c;随着技术的不断发展&#xff0c;我们越来越依赖于各种存储设备&#xff0c;其中移动硬盘以其大容量和便携性受到广大用户的青睐。不过&#xff0c;有时我们可能会遇到需要使用U盘来重装系统的情况&#xff0c;而手头又没有合适的U盘。这时&#xff0c;我…

Spring Boot-01-通过一个项目快速入门

官方参考文档&#xff1a;Spring Boot Reference Documentation 0. 概述 Spring的缺点&#xff1a; 1. 配置繁琐&#xff1a;虽然Spring的组件代码是轻量级&#xff0c;但它的配置却是重量级的。 2. 依赖繁琐&#xff1a;项目的依赖管理也是一件耗时耗力的事情。分析要导入哪…

03-JAVA设计模式-工厂模式详解

工厂模式 工厂设计模式是一种创建型设计模式&#xff0c;它提供了一种封装对象创建过程的机制&#xff0c;将对象的创建与使用分离。 这种设计模式允许我们在不修改客户端代码的情况下引入新的对象类型。 在Java中&#xff0c;工厂设计模式主要有三种形式&#xff1a;简单工厂…