searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

一种数据库负载控制的方法

2023-11-28 06:00:29
1
0

背景技术

数据库,是一种存储数据的软件,可以接受其它应用的数据存储和搜索请求,并进行响应。

数据库代理层,相当于数据库请求的一个中转服务,可以在这个服务商加上例如流量控制、权限管理等各种的功能,进行统一管理。

负载,是指数据库接受和处理请求的能力,受制于操作系统的性能限制,数据库的处理能力不可能无上限提高。由于性能上限的存在,同一时间数据库每接受多一个请求,都会同时减少其剩余的可处理能力,直到该请求处理完毕。

负载控制,是指数据库接受和处理请求的能力可以根据实际情况进行动态调配,避免过多接受那些更加消耗资源的请求,反而降低了对于资源消耗低的请求的处理能力,在外部看来即是表现为数据库性能下降,甚至失去响应能力。

CompareAndSet,是在多线程编程中常用的一种高效的线程数据同步方法,传统多线程数据同步的时候会先对目标进行锁定然后进行数据同步,因此在同步的时间段只能有一个线程进行数据同步,效率较低;CompareAndSet方法则是先记录同步前的数值,然后直接进行数据同步,在更新同步结果的时候对比一下是不是数值没有改变,如果没有改变则进行更新,否则重复操作同步流程,这种方法把需要锁定目标的时间几乎缩减为0,效率较高。

需要解决的问题

数据库代理层作为调用者和实际存储数据库的代理层,如果缺乏数据库负载控制机制,将可能无限制接收数据处理请求,造成数据库处理请求能力变差的问题。

问题1:数据库代理层的客户端提交了大量耗时较长的数据处理请求,这些请求都无限制的直接发往了底层的数据存储服务,造成底层数据库响应能力下降甚至失去响应。

问题2:数据库代理层的某个客户端发起了高频率的数据处理请求,造成单个客户端占用大多数资源,排挤了其它客户端,造成其它客户端的请求无法进行处理或者处理能力下降的现象。

对于此类问题,业界也有一些传统的解决方案,图1为传统处理数据库负载过高的方案示意图:

对于问题1,通常的处理方案是让数据库管理员经过统计监控工具的综合使用,人工找出耗时最长的请求,然后人工通过管理连接进行销毁,再通知应用对此请求语句进行优化和调整,保证以后不再出现。

对于问题2,一般来说是增加数据库集群节点,保证数据库处理能力充足,另一方面还可以通过熔断器或者流控模块对请求进行无差别的限制,以保证系统稳定为首要目的。

本方案

通过对数据代理服务的前后端连接数据的监听,对数据处理请求进行分类,并实时统计数据库的近期历史性能数据,再根据统计分析结果中的关键指标对数据处理请求进行标记,然后再根据这些标记对用户新提交和已提交的超过性能限制的部分请求按照边拦截边销毁的方式进行控制,控制完成之后,控制效果又会即时反应到下一阶段的统计分析结果之中,形成一个数据库负载控制自治机制的闭环,自动根据当前的数据库负载情况进行限流方案的自我调整以达到让数据库保持较高的数据处理能力的目标。其核心技术是高性能的实时(纳秒级)性能分析,基于这个实时分析,控制效果才能及时反映到下一轮控制策略当中,也是与其它方案的本质区别。

通过对数据库代理层性能指标的实时分析,在数据库代理服务中针对问题1对超过性能限制的部分数据处理请求按平均耗时按比例边拦截边销毁,以避免数据库长期处于一个高负载的水平;针对问题2拦截新增的耗时在平均水平以上的类型请求,并使其请求数量占比保持在警戒线以内,首先保证资源占用较少的请求的可用性。这样在外界看来数据库总体上仍具有较高的请求处理能力和响应能力,只是对于部分消耗资源超过限制的请求进行了合理的控制。

优点

本方案提出一种自适应的数据库负载控制的方法,根据实时统计分析的数据,使数据库自动调整限流方案,总体保持一个可用度较高的状态。

与机器学习方案相比,机器学习所需的时间周期较长,本方案甚至在动态调整的能力上更强更及时。而与之相比,机器学习可能综合分析的指标较多,还可以通过SQL语法分析等特征进行判断,或许判断考虑会更加全面。

与传统解决方案相比,本方案更加智能更加准确更加细致,且不需要人工介入。

0条评论
0 / 1000
唐****律
20文章数
2粉丝数
唐****律
20 文章 | 2 粉丝
原创

一种数据库负载控制的方法

2023-11-28 06:00:29
1
0

背景技术

数据库,是一种存储数据的软件,可以接受其它应用的数据存储和搜索请求,并进行响应。

数据库代理层,相当于数据库请求的一个中转服务,可以在这个服务商加上例如流量控制、权限管理等各种的功能,进行统一管理。

负载,是指数据库接受和处理请求的能力,受制于操作系统的性能限制,数据库的处理能力不可能无上限提高。由于性能上限的存在,同一时间数据库每接受多一个请求,都会同时减少其剩余的可处理能力,直到该请求处理完毕。

负载控制,是指数据库接受和处理请求的能力可以根据实际情况进行动态调配,避免过多接受那些更加消耗资源的请求,反而降低了对于资源消耗低的请求的处理能力,在外部看来即是表现为数据库性能下降,甚至失去响应能力。

CompareAndSet,是在多线程编程中常用的一种高效的线程数据同步方法,传统多线程数据同步的时候会先对目标进行锁定然后进行数据同步,因此在同步的时间段只能有一个线程进行数据同步,效率较低;CompareAndSet方法则是先记录同步前的数值,然后直接进行数据同步,在更新同步结果的时候对比一下是不是数值没有改变,如果没有改变则进行更新,否则重复操作同步流程,这种方法把需要锁定目标的时间几乎缩减为0,效率较高。

需要解决的问题

数据库代理层作为调用者和实际存储数据库的代理层,如果缺乏数据库负载控制机制,将可能无限制接收数据处理请求,造成数据库处理请求能力变差的问题。

问题1:数据库代理层的客户端提交了大量耗时较长的数据处理请求,这些请求都无限制的直接发往了底层的数据存储服务,造成底层数据库响应能力下降甚至失去响应。

问题2:数据库代理层的某个客户端发起了高频率的数据处理请求,造成单个客户端占用大多数资源,排挤了其它客户端,造成其它客户端的请求无法进行处理或者处理能力下降的现象。

对于此类问题,业界也有一些传统的解决方案,图1为传统处理数据库负载过高的方案示意图:

对于问题1,通常的处理方案是让数据库管理员经过统计监控工具的综合使用,人工找出耗时最长的请求,然后人工通过管理连接进行销毁,再通知应用对此请求语句进行优化和调整,保证以后不再出现。

对于问题2,一般来说是增加数据库集群节点,保证数据库处理能力充足,另一方面还可以通过熔断器或者流控模块对请求进行无差别的限制,以保证系统稳定为首要目的。

本方案

通过对数据代理服务的前后端连接数据的监听,对数据处理请求进行分类,并实时统计数据库的近期历史性能数据,再根据统计分析结果中的关键指标对数据处理请求进行标记,然后再根据这些标记对用户新提交和已提交的超过性能限制的部分请求按照边拦截边销毁的方式进行控制,控制完成之后,控制效果又会即时反应到下一阶段的统计分析结果之中,形成一个数据库负载控制自治机制的闭环,自动根据当前的数据库负载情况进行限流方案的自我调整以达到让数据库保持较高的数据处理能力的目标。其核心技术是高性能的实时(纳秒级)性能分析,基于这个实时分析,控制效果才能及时反映到下一轮控制策略当中,也是与其它方案的本质区别。

通过对数据库代理层性能指标的实时分析,在数据库代理服务中针对问题1对超过性能限制的部分数据处理请求按平均耗时按比例边拦截边销毁,以避免数据库长期处于一个高负载的水平;针对问题2拦截新增的耗时在平均水平以上的类型请求,并使其请求数量占比保持在警戒线以内,首先保证资源占用较少的请求的可用性。这样在外界看来数据库总体上仍具有较高的请求处理能力和响应能力,只是对于部分消耗资源超过限制的请求进行了合理的控制。

优点

本方案提出一种自适应的数据库负载控制的方法,根据实时统计分析的数据,使数据库自动调整限流方案,总体保持一个可用度较高的状态。

与机器学习方案相比,机器学习所需的时间周期较长,本方案甚至在动态调整的能力上更强更及时。而与之相比,机器学习可能综合分析的指标较多,还可以通过SQL语法分析等特征进行判断,或许判断考虑会更加全面。

与传统解决方案相比,本方案更加智能更加准确更加细致,且不需要人工介入。

文章来自个人专栏
数据库
8 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0