当前位置: 首页 > 专利查询>重庆大学专利>正文

基于SQL引擎的全链路压测数据分流系统及方法技术方案

技术编号:35209059 阅读:12 留言:0更新日期:2022-10-15 10:21
本发明专利技术涉及全链路压测技术领域,具体涉及基于SQL引擎的全链路压测数据分流系统及方法,该系统包括解析器、配置管理器、路由器和执行器;解析器用于对接入流量的SQL语句进行解析,将SQL语句转化为抽象语法树;配置管理器用于设置配置文件,还用于解析配置文件得到配置信息,并将配置信息在内存中缓存起来供路由器使用;路由器用于根据配置信息和解析后的抽象语法树,得到路由结果,所述路由结果的内容包括将SQL语句路由到底层对应的数据库中。本申请在扩大适用范围的同时,还有效的提升了全链路压测的性能和效率。路压测的性能和效率。路压测的性能和效率。

【技术实现步骤摘要】
基于SQL引擎的全链路压测数据分流系统及方法


[0001]本专利技术涉及全链路压测
,具体涉及基于SQL引擎的全链路压测数据分流系统及方法。

技术介绍

[0002]全链路压测作为一种新兴的软件测试技术,直接在生产系统中做压力测试,旨在准确评估线上环境的性能。与常规的压力测试相比,全链路测试不再单独部署一套测试环境,而是直接在生产环境中,通过模拟海量用户真实请求(例如通过流量回放技术基于真实用户请求生成测试用例)对系统进行压力测试。通过全链路压测,不仅能够减少部署成本,还能够保证流量的真实性和环境的真实性,得出更可靠的压测结论。
[0003]在生产环境中进行测试,最重要的是保证线上服务不受影响,其核心问题之一是保证生产数据不受到污染,即通过测试生成的数据应与真实的生产数据能够区分开来。现有技术中,基于影子库技术的数据分流技术能够保证全链路压测过程中生产数据不受测试污染。影子库技术,即构建一个与生产库完全相同的数据库(称为影子库)用来存储测试数据。生产库是指生产环境中使用的数据库,用于存储生产数据。同一套生产环境系统可以对应多个不同的生产库。影子库是存储测试数据的数据库,与生产库一一对应。影子库与其对应的生产库通常具有相同的表数量、表结构、表名字及其他的系统配置。影子库中的表称为影子表。影子库技术的典型架构中,生产流量和测试流量同时流入生产环境系统中,生产环境系统执行一些业务处理后,在数据层将转化成SQL(Structured Query Language)语句。在数据分流过程中,对SQL语句进行分析,通过影子算法判断数据是测试数据还是生产数据后,将流量正确路由到生产库或者影子库中。目前,影子算法主要有两类,基于列的影子算法和基于Hint的影子算法。其中,基于列的影子算法通过识别SQL中的数据,匹配路由至影子库;基于Hint 的影子算法通过识别SQL中的注释,匹配路由至影子库。
[0004]然而,实现一个完整的数据分流系统存在以下挑战:(1)系统复杂度高。不同的项目可能会用到不同的关系型数据库系统(例如Oracle、MySQL、SQL Server等),不同数据库系统的协议和方言不尽相同。此外,即使对于同一个数据库系统,其SQL语句类型也是多种多样的,包括简单的选择或插入操作,到复杂的聚合或者表关联操作。要在同一个框架中支持所有这些关系型数据库系统及不同类型SQL语句的数据分流极具挑战。(2)分流标准多样。不同的应用场景可能采用不同的数据分流标准。(3)透明性要求。增加数据分流后,要求现有的生产环境系统代码无需做任何修改。(4)高效率要求。由于中间增加了一层路由选择,需要尽可能减少路由带来的性能损耗,保证全链路压测结果的正确性。
[0005]近年来,各大互联网公司积极构建全链路压测平台,例如美团点评的Quake、字节跳动的Rhino、京东的ForceBot、腾讯的WeTest、阿里的Amazon以及高德的TestPG等,但这些平台关注整个压测流程及其自身的业务逻辑上,对数据分流部分关注不多,且平台均是闭源的,其他机构无法直接使用。而开源的Takin系统仅仅支持按照标记进行数据分流,并且采用网页转发的框架,效率受到了极大的影响。

技术实现思路

[0006]针对上述现有技术的不足,本专利技术提供了一种基于SQL引擎的全链路压测分流系统及方法,在扩大适用范围的同时,还有效的提升了全链路压测的性能和效率。
[0007]为了解决上述技术问题,本专利技术采用了如下的技术方案:
[0008]基于SQL引擎的全链路压测数据分流系统,包括解析器、配置管理器、路由器和执行器;
[0009]解析器用于对接入流量的SQL语句进行解析,将SQL语句转化为抽象语法树;
[0010]配置管理器用于设置配置文件,还用于解析配置文件得到配置信息,并将配置信息在内存中缓存起来供路由器使用;
[0011]路由器用于根据配置信息和解析后的抽象语法树,得到路由结果,所述路由结果的内容包括将SQL语句路由到底层对应的数据库中;
[0012]执行器用于获取路由器的路由结果,并通过数据库连接技术JDBC调用对应的数据库的接口,将SQL语句发送至对应的数据库中,供对应的数据库执行,所述对应的数据库为生产库或影子库;执行器还用于将执行的结果进行封装,并以标准JDBC数据库协议的方式返回给请求方。
[0013]优选地,所述配置文件的内容包括生产库的属性、影子库的属性、影子表的属性及使用的影子算法;所述影子算法为基于列的影子路由算法或基于Hint的影子路由算法。
[0014]优选地,当影子算法为基于列的影子路由算法时,所述配置文件的内容还包括路由规则,所述路由规则用于进行影子库匹配;路由器对SQL语句路由时,针对基于列的影子路由算法,路由器首先判断解析语法树ast中涉及的表集合T
ast
与配置文件中的影子表的集合T
config
是否有交集,如果没有交集,则直接将此SQL语句路由到生产库中,否则,遍历T
ast
∩T
config
中的每一张表t,若SQL语句中t的影子字段值符合任一路由规则,则将此SQL 语句路由到影子库中,并提前结束迭代过程。
[0015]优选地,当影子算法为基于Hint的影子路由算法时,所述配置文件的内容还包括hint影子标记f
config
;路由器对SQL语句路由时,针对基于Hint的影子路由算法,路由器逐一验证 F
ast
中每一个键值对标记是否与f
config
相同,若相同则路由到影子库中;若所有标记都与f
config
不相同,则路由到生产库中;其中,F
ast
为抽象语法树ast的所有键值对标记集合。
[0016]优选地,解析器还用于当影子算法为基于Hint的影子算法时,对配置文件中的hint影子标记f
config
进行解析,并生成一个单独的注解节点挂载到抽象语法树上。
[0017]优选地,解析器内预置有多种不同数据库方言;所述多种不同数据库方言包括MySQL、 PostgreSQL、Oracle、SQL Server、MariaDB和openGauss的方言。
[0018]本申请还提供一种基于SQL引擎的全链路压测数据分流方法,使用上述基于SQL引擎的全链路压测数据分流系统,包括以下步骤:
[0019]S1、根据需求设置配置文件并存储在磁盘中;
[0020]S2、通过解析器将接入流量的SQL语句进行解析,将SQL语句转化为抽象语法树;
[0021]S3、通过配置管理器解析配置文件得到配置信息,并将配置信息在内存中缓存起来供路由器使用;
[0022]S4、根据配置信息和解析后的抽象语法树,通过路由器将SQL语句路由到底层对应的数据库中;
[0023]S5、通过执行器接收路由器的路由结果,并通过数据库连接技术JDBC调用对应数据库的接口,将SQL本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.基于SQL引擎的全链路压测数据分流系统,其特征在于:包括解析器、配置管理器、路由器和执行器;解析器用于对接入流量的SQL语句进行解析,将SQL语句转化为抽象语法树;配置管理器用于设置配置文件,还用于解析配置文件得到配置信息,并将配置信息在内存中缓存起来供路由器使用;路由器用于根据配置信息和解析后的抽象语法树,得到路由结果,所述路由结果的内容包括将SQL语句路由到底层对应的数据库中;执行器用于获取路由器的路由结果,并通过数据库连接技术JDBC调用对应的数据库的接口,将SQL语句发送至对应的数据库中,供对应的数据库执行,所述对应的数据库为生产库或影子库;执行器还用于将执行的结果进行封装,并以标准JDBC数据库协议的方式返回给请求方。2.如权利要求1所述的基于SQL引擎的全链路压测数据分流系统,其特征在于:所述配置文件的内容包括生产库的属性、影子库的属性、影子表的属性及使用的影子算法;所述影子算法为基于列的影子路由算法或基于Hint的影子路由算法。3.如权利要求2所述的基于SQL引擎的全链路压测数据分流系统,其特征在于:当影子算法为基于列的影子路由算法时,所述配置文件的内容还包括路由规则,所述路由规则用于进行影子库匹配;路由器对SQL语句路由时,针对基于列的影子路由算法,路由器首先判断解析语法树ast中涉及的表集合T
ast
与配置文件中的影子表的集合T
config
是否有交集,如果没有交集,则直接将此SQL语句路由到生产库中,否则,遍历T
ast
∩T
config
中的每一张表t,若SQL语句中t的影子字段值符合任一路由规则,则将此SQL语句路由到影子库中,并提前结束迭代过程。4.如权利要求3所述的基于SQL引擎的全链路压测数据分流系统,其特征在于:当影子算法为基于Hint的影子路由算法时,所述配置文件的内容还包括hint影子标记f
config
;路由器对SQL语句路由时,针对基于Hint的影子路由算法,路由器逐一验证F
ast
中每一个键值对标记是否与f
config
相同,若相同则路由到影子库中;若所有标记都与f
config
不相同,则路由到生产库中;其中,F
ast
为抽象语法树ast的所有键值对标记集合。5.如权利要求4所述的基于SQL引擎的全链路压测数据分流系统,其特征在于:解析器还用于当影子算法为基于Hint的影子算法时,对配置文件中的hint影子标记f
config
进行解析,并生成一个单独的注解节点挂载到抽象语法树上。6.如权利要求1所述的基于SQL...

【专利技术属性】
技术研发人员:李瑞远姜俊刘钧文王棚陈超张东霞李文慧
申请(专利权)人:重庆大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1