高质量的MySQL服务
我是本际云服务器推荐网的小编小本本。随着互联网的高速发展,对业务系统的能力要求也越来越高,做为底层提供数据服务的MySQL数据库更是如此。高质量的MySQL服务时时提供高可用、高效、高稳定的能力,杜绝雪崩产生。

服务高质量实现
为保证MySQL服务的高质量,本文采用限流、超时SQL拦截的手段来进行实现。但MySQL数据库本身或现有集群模式并没提供这种能力,因此需设计一个数据库中间件来提供这种能力,事前杜绝这些隐患,保证后端MySQL服务的高质量。
数据库中间件产品的主要功用模块如下:
- SQL解析器:对客户端发来的sql语句进行解析处理,以便进行sql的路由操作。
- SQL拦截器:对耗时超过阀值的SQL进行拦截,直接返回错误,不再路由至后端MySQL数据库。
- SQL路由器:对解析后的sql语句,依据读写分隔、分片配置信息,转发至相应后端MySQL节点。
- 限流器:限制后端MySQL节点的QPS能力,降低突增流量带来的影响。
限流
限流的方式有很多种,比如限制单位时间段内的调用量、系统的并发调用程度,或使用漏桶、令牌桶算法进行限流。本产品采用令牌桶算法进行业务的限流,以应对MySQL的高并发请求。
令牌桶算法:
- 以固定频率往桶中添加令牌,如果桶满,则丢弃。
- 请求到来时,从桶中取N个令牌。
- 如果桶中现有令牌数>=N,则执行请求,并销毁N个令牌。
- 如果桶中现有令牌数<N,则直接返回错误。
程序实现一个令牌桶算法模块,以MySQL最大QPS为频率向桶中添加令牌,以后每个数据库请求都需访问该模块,以判读该请求是否可以执行。
超时SQL拦截
超时SQL拦截的意思是,耗时的SQL语句直接返回错误,不再路由转发至后端节点。本产品以降低内存使用、提高效率为目的,采用位图算法进行超时SQL拦截。
位图算法(bitmap):
在一个结构中,用一个比特位来描述一个数据的状态,这种结构就称为位图。位图实际上是哈希表的一种变形,它的主要使用场景为:大数据滤重、大数据查询、定位大数据排序。它的主要优点为节省内存、位操作效率更快。
实现逻辑:
- 初始化位图模块,用一个容量为2^20的byte数组初始化为bitmap,占用内存128K,可记录百万类SQL。
- SQL请求过滤,每个SQL请求到来时,生成该类sql的数字标识符id,用该ID与bitmap进行位与运算,如果为0,则执行SQL,否则直接返回。
- 如果SQL运行时长超过阀值,并达到固定次数后,用该SQL的id与bitmap进行位或运算,在bitmap中记录该目录。
- 超时SQL异步入库,以便后期优化处理。
总结
本文以限流、超时SQL拦截两个手段来达到提高MySQL服务质量的目的。限流是为了拦截突增流量,保证Mysql服务的稳定;超时SQL拦截是为了提高MySQL服务效率,减低MySQL服务器资源使用率。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/5993.html
