伴随互联网的高速发展,对业务系统的能力要求也越来越高,做为底层提供数据服务的MySQL数据库更是如此;基本的MySQL集群模式虽提供了高可用、高并发的服务能力,但突然的高并发,或流量并没被业务架构层层过滤,最终过载的流量流向数据库,这时MySQL的服务能力就会降低,甚至雪崩。
高质量的MySQL服务就是时时提供高可用、高效、高稳定的能力,杜绝雪崩产生。
本文采用限流、超时SQL拦截的手段来保证MySQL服务的高质量,但MySQL数据库本身或现有集群模式并没提供这种能力。因此需设计一个数据库中间件来提供这种能力,事前杜绝这些隐患,保证后端MySQL服务的高质量。下图为数据库中间件产品的主要功用模块,简单说明以下几个:
1)SQL解析器:对客户端发来的sql语句进行解析处理,以便进行sql的路由操作。
2)SQL拦截器:对耗时超过阀值的SQL进行拦截,直接返回错误,不再路由至后端MySQL数据库。
3)SQL路由器:对解析后的sql语句,依据读写分隔、分片配置信息,转发至相应后端MySQL节点。
4)限流器:限制后端MySQL节点的QPS能力,降低突增流量带来的影响。
限流的方式有很多种,以下为目前常见的限流方式:
通过限制单位时间段内调用量来限流
通过限制系统的并发调用程度来限流
使用漏桶(Leaky Bucket)算法来进行限流
使用令牌桶(Token Bucket)算法来进行限流
本产品采用令牌桶算法进行业务的限流,下面简单介绍下令牌桶算法
1)以固定频率往桶中添加令牌,如果桶满,则丢弃
2)请求到来时,从桶中取N个令牌
3)如果桶中现有令牌数>=N,则执行请求,并销毁N个令牌
4)如果桶中现有令牌数
首先程序实现一个令牌桶算法模块,以MySQL最大QPS为频率向桶中添加令牌,以后每个数据库请求都需访问该模块,以判读该请求是否可以执行。
1)初始化N个令牌桶
后端有多少MySQL节点,则初始化多少个令牌桶,并与节点绑定。以相应节点最大QPS为频率,即1/QPS秒向桶中添加一个令牌
2)令牌请求
客户端请求的SQL经过解析后,由SQL路由器转发至某一个后端MySQL节点时,请求相应令牌桶中的令牌,请求满足,则执行相应SQL
3)令牌不足
如果请求不满足,则把SQL放入相应节点队列中等待,直到有令牌满足或队列满时直接返回错误。
超时SQL拦截的意思是,耗时的SQL语句直接返回错误,不再路由转发至后端节点;当某类sql运行时长超过阀值,并达到一定次数后,记录下该类sql的id,下次再有这类sql请求时,中间件直接拦截并返回错误。
程序实现这种逻辑的方法有很多种,比如使用map结构,以sql的id做为key,或者以数组方式记录下超时sql的id,但这类方式占用内存较高,并且效率很低;再比如使用redis数据库,以sql_id做为key来缓存这些数据,虽说redis效率比较高,但每次sql请求都要访问一次,总体来说效率还是比较低的。
本产品以降低内存使用、提高效率为目的,采用的是位图算法。
在一个结构中,用一个比特位来描述一个数据的状态,这种结构就称为位图。位图实际上是哈希表的一种变形,它的主要使用场景为:
大数据滤重
大数据查询、定位
大数据排序
它的主要优点为:
节省内存
位操作,效率更快
程序实现一个位图模块,主要有设置(set)、查询(get)、清除(clear)sqlid等方法。
1)初始化位图模块
初始化一个容量为2^20的byte数组为bitmap,占用内存128K,可记录百万类SQL
2)SQL请求过滤
每个SQL请求到来时,生成该类sql的数字标识符id,用该id与bitmap进行位与运算,如果为0,则执行sql,否则直接返回。
3)SQL请求超时
如果sql运行时长超过阀值,并达到固定次数后,用该sqlid 与bitmap进行位或运算,以达到在bitmap中记录的目录。
4)超时SQL入库
超时sql异步入库,以达到后期优化处理的目的。
本文以限流、超时SQL拦截两个手段来达到提高MySQL服务质量的目的。限流是为了拦截突增流量,保证Mysql服务的稳定;超时SQL拦截是为了提高MySQL服务效率,减低MySQL服务器资源使用率。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129977.html
摘要:创立者云计算必须建在开源之上的成功是归功于全世界成千上万的传道者开创开源公司新的盈利模式于年加入,担任。云计算潜力的发挥,必须建立在开源之上在公司任职期间,看到云计算将成为一种新的计算趋势。 云计算,IT行业最热门的技术之一,开源云计算则被认为IT的发展趋势。Marten Mickos,作为开源数据库MySQL创立者、开源云计算平台Eucalyptus(桉树)公司CEO,除被称为开源软件...
摘要:数据库数据库入门教程系列工具掘金工具共同编辑,修正错误,这里点击进去在这里持续更新由于软件是基于模式的数据库管理系统一个客户机服务器,因此在日常各种工作中,可以通过各种客户端软件来与数据库管理系统关联。 MySQL入门教程系列-1.5 如何学习MySQL - 掘金 在这里持续更新 MySQL入门教程系列-1.5 如何学习MySQL 如何学习 MySQL 这是一个伪命题,每个人都有适合自...
摘要:安装使用文档代码质量相信是每个团队的最高追求之一,质量高的团队,开发成本维护成本都很低同样人数的团队,一年内高质量团队是低质量团队产出的倍打个比方,一个团队开发完产品,行代码出一个和行代码一个的团队。 SonarQube Scanner 安装使用文档 代码质量相信是每个团队的最高追求之一,质量高的团队,开发成本、维护成本都很低;同样人数的团队,一年内高质量团队是低质量团队产出的10倍;...
阅读 1346·2023-01-11 13:20
阅读 1684·2023-01-11 13:20
阅读 1132·2023-01-11 13:20
阅读 1860·2023-01-11 13:20
阅读 4100·2023-01-11 13:20
阅读 2704·2023-01-11 13:20
阅读 1385·2023-01-11 13:20
阅读 3597·2023-01-11 13:20