作者: watermelon_cn

文 / 杭州银行数据库专家 邵健 张显华



区域集中库的架构设想

在银行等金融企业内,通过网络安全访问策略根据服务主题将内部网络分割成若干个网络安全域,如核心网络域、网银网络域等。在各个网络域中,根据业务应用对数据库的需求,配置数据库资源。随着业务的创新和发展,独立部署形态的MySQL集群数量持续上升,成为一个个运维和数据孤岛,脱离了数据库服务规模发展、高效运维和按需敏态供给的发展理念,在生产运行的各阶段中存在不少能力短板。

1.部署建设阶段

(1)资源分配。业务部门在申请数据库规格时,通常会以多年后的业务发展目标用于初始申请,客观上在发展期内存在资源浪费。并且共享虚拟化平台资源,可能会出现规格和性能预期不一致,或者超分配情况下与其他业务相互影响。

(2)版本和管理平台。在行内MySQL推广发展的历史过程中,MySQL版本、部署方案、变量参数和管理平台均有不同方案共存,形成了管理成本较高的历史包袱,管理配置的碎片化不利于团队知识管理,阻碍了数据库服务朝向标准化云化发展。

2.生产运行阶段

(1)主从同步延迟。MySQL主从同步复制依赖于表的主键和索引设计,应用数模在开发阶段缺少指导和约束,部分表缺主键等导致主从同步延迟极大,高可用机制存在不稳定,也影响读写分离的实现。

(2)上游的数据推送。大量业务应用的数据库都订阅了全行统一的人员、机构和客户等主数据的数据推送,多份的数据存储不仅浪费容量,重复推送也大量占用数据库和网络资源。

(3)数据的供给。各个业务数据库相互独立,面对下游业务的数据供给需求,需要配置管理多个数据源和复制链路,构成较为复杂的网状结构,管理和维护成本较高,客观上限制了数据价值的进一步挖掘。

(4)日常运行状态管理。MySQL对于复杂SQL和历史版本一致性读取等特性的支持较弱。分布式数据库产品相较于MySQL数据库具备良好的水平扩展能力,能满足高并发大数据量业务的使用需求。通过数据库资源管理特性可在一套集群内划分资源,承载不同的业务应用。结合分布式数据库的水平扩展能力和资源管理特性,设想在单个网络域中集中建设一套分布式数据库集群,进行当前业务的迁移,整合替代“孤岛式”的MySQL集群,实现部署的标准化和统一运维管理。



数据库整合场景测试

基于网络区域集中库的设计构想,进行实际整合场景功能的需求抽象,利用TiDB数据库的资源管理特性作为实践平台,通过测试验证分布式数据库集群是否可以实现数据库整合和按需供给,满足业务创新和生产运行需求。

1.资源管控

分布式数据库测试集群配置为三台两路ARM服务器。Request Unit(RU)是对CPU、IO等系统资源的统一抽象的计量单位,用于表示对单个请求消耗的资源量。请求消耗的RU数量取决于多种因素,如操作类型或正在检索或修改的数据量。

(1)集群资源的评估。基于硬件配置使用sysbench read_write模型估算为163000 RU、基于硬件配置使用TPCC模型估算为459000 RU、使用root用户进行sysbenchread_write模型压测从监控可得最大RU 365000,三种评估方法结果显示:同一模型下RU估算与实际压测的差距较大,实际中发现RU评估未能正确识别混合部署。

(2)不同规格RU对联机交易的影响。sysbench压测工具使用三个数据库用户对应三个资源组。同时进行sysbench read_write压测时RU使用监控,三个用户压测QPS和实际RU使用结果显示:RU使用量上限符合RU配置,QPS与RU配置成正比关系。

(3)资源组BURSTABLE属性对调度的影响。三个sysbench压测用户对应三个资源组,其中test_rg1启用BURSTABLE属性。先进行test1用户的sysbench read_write压测,再依次启动test2和test3用户的压测。三个用户压测QPS和实际RU使用结果显示:当系统资源空闲的情况下,BURSTABLERU属性可以充分利用空闲资源;当系统资源繁忙的情况下,会自动调整RU的使用率。

(4)在线调整RU对联机交易的影响。进行test1用户的sysbench read_write压测,在压测过程中在线调整资源组的RU值。资源组配置变更即时反应到实际RU使用。

(5)在线调整RU对单SQL的影响。执行包含子查询的单SQL,并在执行过程中降低资源组资源上限。会影响正在执行中SQL,降低资源组RU上限后,即时生效,执行时长变长。

(6)会话级别设置资源组。test1用户的默认资源组是test_rg1。编辑oltp_read_write.lua,在event()函数内的事务启动语句前增加资源组配置语句,模拟在一个会话中,切换默认资源组。使用test1用户进行read_wite模型压测,实际使用到20000RU后趋于稳定,符合test2_rg的配置。

2.读写分离

ETL数据抽取、交易异步检查、数据备份等场景属于只读场景,为防止对业务主交易造成影响,沿用MySQL读写分离架构,需要配置一份只读数据。集群在Raft共识算法数据三副本基础上,可配置一种特殊的Learner角色,它只参与同步raftlog而不参与投票,可用来实现读写分离。使用Placement rules,将集群中配置有logic3标签的单台TiKV服务器配置为Learner角色。

(1)会话的读写分离。设置会话属性tidb_replica_read为Learner。执行查询SQL时只使用Learner节点的资源,其他节点没有消耗资源。

(2)物理备份的读写分离。使用--replica-read-label'logic:logic3'参数执行br备份命令。br备份操作只从Learner节点写备份文件。备份过程中只使用Learner节点的资源,其他节点没有消耗资源。

3.业务管理

在集中库进行业务整合的场景中,类似数据平面和管理平面的分拆,不仅需要关注数据库的资源限额管理特性,还需要关注多业务整合后,数据库是否具备管理特性,如SQL黑名单、细粒度的监控、连接的标识区分等。

(1)SQL黑名单功能。一是资源组的自动策略。配置default资源组query limit策略属性,语句执行超过100s后自动kill。查询information_schema.resource_group验证配置策略。二是手工配置黑名单。通过慢日志或者SQL概览页面得到sql digest后添加到query watch清单中。查询information_schema.runaway_watches验证配置策略。SQL语句执行后提示因为命中runaway清单被中断。查询mysql.tidb_runaway_queries验证中断记录。

(2)业务会话标识功能。一是会话的tidb_session_alias变量。DBMS_APPLICATION_INFO.SET_MODULE是Oracle数据库中的一个PL/SQL包过程,用于设置应用程序信息模块的名称,通过查询v$session的module列可以帮助追踪运行在Oracle数据库上的应用程序或会话的相关信息。会话变量tidb_session_alias可用来自定义当前会话相关日志中session_alias列的值,实现与Oracle类似的功能,如在会话中配置交易码信息。模拟在一个事务内多次配置tidb_session_alias:编辑read_write模型脚本oltp_read_write.lua,在event()函数内的不同语句前后增加不同的业务标识QUERY001\QUERY002\QUERY003,模拟在一个会话中,可以关联并切换应用多个交易码;慢日志和generallog都带有session_alias会话属性;会话视图带有session_alias会话属性。

二是会话属性session_connect_attrs表。performance_schema.session_connect_attrs表提供了连接属性的信息,连接创建后不可修改。可以配置应用JDBCURL的connectionAttributes特性或者使用驱动接口,添加应用连接的自定义属性,如:app_name:bank和ver:v1.0。以Jmeter为例,连接串URL配置为JDBC:mysql://IP:PORT/DB?connection

(3)细粒度监控功能。与QPS、Duration相关的几项metrics指标会带有各个db和resource_group标签,在grafana添加对应的监控面板后,可以查看db和resource group维度的运行指标。

4.测试小结

通过以上的测试,小结如下:一是资源隔离特性具备数据库规格限制、在线调整即时生效的特点。二是在业务混合共享集群的场景下,可以基于不同业务在不同时间段的资源消耗特点进行合理资源“调度”,实现资源利用的效益最大化。三是额外添加Learner角色数据单副本节点,可用于数据抽取、查询和备份等场景,节省“从集群”的资源开销。四是新特性对生产上偶发但影响面较大的不良SQL能实现有效隔离,通过规则(执行时长)、已知的SQL指纹(文本/digest/plan digest)、修改资源组上限,能实现对整个集群的资源保护,保护重要应用的持续运行。五是通过业务会话标识和细粒度监控功能,可以基本满足应用整合后的数据操作观测需求。六是产品的使用过程中需要继续改进的功能反馈给产品部门,已经在版本规划中。

采用不同的业务模型得到的集群估算RU上限相差较大,同一模型估算的RU上限和实际压测的结果差距也较大,也不能正确的评估混合部署的影响,规划进行评估方法和公式的改进。Query Limit策略目前只有执行时长,规划引入添加RU或者扫描行数等有业务价值的维度。BURSTABLE属性可以考虑添加时间窗口属性,实现与业务时间特征的关联关系,规划引入Resource Plan的特性,关联一组资源组策略并基于时间切换。切换Resource Group目前没有权限控制,规划添加验证功能。



区域集中库的优势

经过测试验证,分布式数据库产品的集中库是将数据库整合的层次从原有的虚拟化平台提升到数据库层,通过细粒度资源配置,换取更高的灵活性,并利用相同资源承载更多的数据库。两种整合方式在某场景下主要适用特性的对比(见表)。

表  两种整合方式在某场景下主要适用特性的对比

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

综合各个能力项对比结果,评估分布式数据库整合部署方案在建设和运行成本、服务质量上均具有较大的优势:一是提升运行标准化,降低人员在部署和管理的工作量投入,避免个性化配置造成的故障隐患。二是丰富管理能力,缩短提供数据库服务的响应时间,有效管控上层的运行应用,充分利用闲置的冗余资源。三是减少成本投入,较高的压缩比节约存储容量,不需要从库节点资源,节约虚拟化层软硬件投入,避免虚拟化造成的性能损失。四是更强产品特性,分布式水平扩展支持业务扩展,HTAP架构支持复杂SQL等。五是故障隔离能力弱于独立部署方式。如果涉及重启或版本升级等操作,影响面更广,有待于具备连接保持能力的负载均衡组件的成熟,或者结合规则限制数据分布节点,实现维护操作对应用连接影响最小化。六是资源管理特性目前在使用上对用户比较困惑是资源管理粒度的评估,如sysbench模型或者CPU等,业务人员并不熟悉具体的性能规格,不能直接对话。

通过区域集中库的建设整合,将进一步简化数据库产品使用场景的分层模型:第一层是多中心部署的分布式数据库,具备数据中心级的数据库服务容灾机制,适用于账务核心、网银等电子渠道的关键业务应用。第二层是分布式数据库,适用于业务并发和数据规模较大的对客交易和对内管理业务。第三层是分布式数据库的整合库和通过管理平台的标准化部署的单机数据库,适用于业务并发和数据规模较小或者预期负载上升较快的小型交易和管理业务。

根据测试结果,在区域集中库使用过程中,需要考虑配套管理措施:一是评估建设统一的典型业务压测模型(如转账交易),形成统一的标尺,根据该模型进行压测得到集群交易性能上限,按典型业务性能设计成多个规格,再由需求方根据该模型提交业务交易性能需求进行对接,按集群的交易性能上限的分配比进行扩容评估。二是配置BURSTABLE属性可以充分利用空闲的集群资源。不同业务应用的工作时间窗口不同,可以提前协调业务操作时间,为各个业务应用配置一个BURSTABLE的时间窗口,比如,根据业务批量任务发起时间在不同时间段动态调整不同资源组的BURSTABLE属性,以保证在整个批量期间能充分地利用闲置的系统资源。三是统一管理区域集中库的共享数据,即全行统一的数字字典,数据团队只需要接入一次数据,实现资源集约使用。四是对备份、ETL抽取、数据查询平台等非业务的数据需求,通过命令参数或者会话参数进行标准化配置,利用单副本的Learner节点实现读写分离,保证业务应用的交易服务质量。五是与行内的低代码开发平台进行对接,通过框架的配置功能使用数据库的会话属性和业务会话标识功能,实现更加有效的SQL定位和管理。六是对接集中监控和日志平台,向业务应用管理员开放资源组语句监控和业务应用标识的慢SQL日志等管理功能。

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

(此文刊发于《金融电子化》2024年5月上半月刊)