mysql 中间点策略_网易MySQL中间件的负载均衡策略及性能优化

团队介绍

网易乐得DBA组,负责网易乐得电商、网易邮箱、网易技术部数据库日常运维,负责数据库私有云平台的开发和维护,负责数据库及数据库中间件Cetus的开发和测试等等。

一、背景

随着业务的爆发式增长,电商系统中的读写压力越来越高,单节点MySQL实例压力越来越大,单纯升级服务器硬件已经无法满足生产环境的需要。解决读请求压力,需要支持从库扩展;解决写请求压力,对数据分片增加多个节点,降低单节点MySQL实例的压力成了更优的选择。

传统的分片是通过DAO层进行的,但是DAO层对数据分片存在诸多问题。从业务角度看,配置修改需要重启服务,代价巨大;需要对分片结果集进行处理,业务逻辑愈加复杂;功能相对简单。从数据库运维角度看,配置管理的统一化难度较大;DB的升级、迁移等操作复杂。

网易电商同样面临着这些问题,为了彻底解决数据库瓶颈,网易乐得团队在实际生产中研发了自己的中间件Cetus。其具有正统基因,基于官方MySQL-Proxy的版本进行全面修复和再创新,已于不久前开源,在各个产品线上得到广泛应用,性能和稳定性均表现良好。

Cetus兼容MySQL协议,前端应用不用修改即可通过Cetus访问数据库,方便DBA运维同学和开发同学使用,实现了数据库层面的横向扩展。

目前Cetus有读写分离和Sharding两个版本,可通过编译参数选择适合的版本。它支持对用户透明的多项功能,例如分布式事务、连接池、结果集压缩、安全管理、状态监控、Tcp Stream传输等等。

二、负载均衡策略及性能优化

本文所讨论的负载均衡,指的是读流量的负载均衡,即读流量如何分配到后端同一MySQL集群内的各个DB。

Cetus的负载均衡策略,主要分为两部分:

主从库之间读流量的负载策略;

从库之间读流量的负载策略。

具体实现时候,流量的分配单位与Atlas等中间件也略有不同,进行了性能优化。下面章节将依次详细介绍。

1、主从库之间读流量的负载策略

默认情况下,非事务中、未通过注释强制路由主库或未使用锁的读流量会优先路由到从库,各个从库之间负载均衡。只有当从库都不可用时,读流量才会路由到主库。

有些业务场景下,主库可以分担部分读流量,这时就涉及到读流量在主库和从库上配置负载策略了。

Cetus中,可以通过配置参数read-master-percentage来指定默认的读流量路由到主库的百分比,该参数的取值范围是[0, 100]。

该值默认为0,即所有读流量会优先路由从库,所有从库均不可用时,才会路由主库;如果该参数设置为100时,则所有读流量都会路由到主库;如果该值设置为(0, 100)时,则会按照设置的比例进行路由。需要注意的是,该值表示的是主库和所有从库的比例。

2、从库之间的读流量负载策略

路由到从库的流量会在各个从库之间进行负载均衡。目前Cetus各个从库之间的读流量负载策略仅支持轮询(RR)方式。

在流量分配方面,Cetus也进行了优化。一些MySQL数据库中间件(例如Atlas)是基于SQL的维度做负载均衡的,不会考虑SQL是同一个连接还是不同连接发送来的,中间件依次将接收到的SQL按照策略发往后端的数据库。

cb8f2e2a7962b735a362970aa2cd2252.png

在实际使用中发现,长连接的场景下,该策略会造成大量的连接切换,从而导致session级变量的频繁调整,影响SQL执行效率。因此,Cetus对其进行了优化,并非完全按照SQL的维度做负载均衡。

Cetus考虑了同一个连接连续发送SQL请求的情况,不会立即将当前SQL使用完的Cetus与MySQL的连接放回连接池复用,而是持有短暂(256毫秒)时间,以期后续仍有SQL执行,从而避免了session级变量的调整,大大增加了SQL执行的效率。

31501df37e64bf5d37a4ff30dd7a99b2.png

长连接场景下,对优化前后的Cetus进行了简单测试。通过测试发现,通过优化后的Cetus针对长连场景下的读流量的吞吐量有了明显提升。下图是在docker环境下的简单测试对比:

ad420de76744e21f5b91890206dedb22.png

为了防止IO过高,简单改造了sysbench发送的SQL,限制了返回的结果集大小。禁用事务和prepare的情况下,采用100个线程每次测试60s,连续测试5次,结果如下:

4c9781bf56f4da938b28d430984ffc7c.png

由于本机Docker性能较差,且sysbench模拟测试的语句较为简单,不涉及session变量的切换,因此对比效果不甚明显,本次测试性能仅提升30%左右。长连接业务场景下,性能优化可能会更加明显。

3、读流量的路由策略总结

在存在至少1个可用从库的情况下,影响查询语句的路由策略的因素主要有:

a. 事务中的查询;

b. select…for update 或 select … lock in share mode;

c. Cetus设置参数master-preferred=true所有流量默认全部路由主库;

d. Cetus设置参数read-master-percentage控制主从读流量负载;

e. 使用注释/#mode=READWRITE/或/#mode=READONLY/。

默认情况下,读流量会优先路由到从库,从库之间按照轮询策略在各个从库之间做负载均衡;一旦所有从库均不可用,会路由到主库上。目前Cetus的各个从库暂不支持按照权重做负载。

对于a、b、c点,Cetus会将查询语句直接路由主库;

对于d点,如果设置read-master-percentage=100,所有的查询流量均路由到主库;如果设置read-master-percentage=[0, 100),Cetus会将读流量按照该比例路由到主库和从库(注意,这里的从库指的是全部的从库,即该比例指的是主库和全部从库的比例);

对于e点,如果使用注释/#mode=READWRITE/,读流量会路由到主库;如果使用注释/#mode=READONLY/读流量会路由从库,如果所有从库均不可用时才会路由到主库。

上面的各个因素的优先级,注释的优先级最高,其次是参数master-preferred,最后是参数read-master-percentage。

三、总结

MySQL数据库中间件的主要特性是对客户端发送的SQL进行路由,而其中负载均衡便是路由策略中的重要部分。通过了解Cetus的负载均衡机制,可以在后续维护过程中,更好的对数据库中间件进行调优,更灵活地控制SQL的路由。

Cetus中间件开源地址:https://github.com/Lede-Inc/cetus/blob/master/doc/cetus-quick-try.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521153.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为与美国公司就授权5G平台展开初期谈判;Linux 中存在严重漏洞;Microsoft 发布 Cosmos DB GA 版……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周两次,打卡即read更快、更全了解泛云圈精彩newsgo go go iPhone12 概念图&#xff08…

Bellman_Ford算法总结

知识概览 Bellman_Ford算法适合解决存在负权边的最短路问题,时间复杂度为O(nm)。在存在负权边的最短路问题中,Bellman_Ford算法的效率虽然不如SPFA算法,但是Bellman_Ford算法能解决SPFA算法不能解决的经过不超过k条边的最短路问题。 例题展示…

java collections_扫盲java.util.Collections工具包,学习排序、二分、洗牌、旋转算法

作者:小傅哥 博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获! 一、前言算法是数据结构的灵魂!好的算法搭配上合适的数据结构,可以让代码功能大大的提升效率。当然,算法学习…

如何进行MaxCompute 用户认证?

您可以通过以下两种方式进行用户认证。 检查请求Request发送者的真实身份 即请求发送后,参数包括用户名和密码,服务端会验证用户名和密码是否正确,以此判断Request发送者的身份是否可信。 使用此方法有可能在请求时间较长的情况下&#xf…

Linux Shell脚本专栏_MySQL数据库备份_09

文章目录一、MySQL数据库备份单循环1. 安装mysql2. 配置mysql环境变量3. 刷新环境变量4. 创建数据库和表lue5. 脚本制作6. 运行脚本7. 查看备份的sql文件7. 脚本升级动态传参8. 运行脚本9. 查看备份的sql文件二、MySQL数据库表备份多循环2.1. 脚本制作2.2. 运行脚本2.3. 指定目…

【当头棒喝】你是真的了解云计算吗?

戳蓝字“CSDN云计算”关注我们哦!作者 | 全球物联网观察责编 | 阿秃对于“云计算”这个名词,大家早已耳熟能详,而且出场率越来越高!但对于很多新入行的“小白”来说,其中涉及的各种概念可能令人毫无头绪,这…

专注数据,打造阿里云Elasticsearch“一站式”数据服务体系

众所周知,Elasticsearch的问世使得各种结构、非结构数据得以实现实时搜索、分析的可能,越来越多的用户使用ES集群(即Elasticseach集群,下文均简称ES集群)实现数据的升值与挖掘。而用户在开发的过程中总是面临数据导入、…

java8 lambda maplist排序_「java8系列」流式编程Stream

前言「Java8系列」神秘的Lambda「Java8系列」神奇的函数式接口继上两篇之后,本文已经java8系列的第三篇了。本篇文章比较长,但我希望大家都能认真读完。读不完可以先收藏,在找时间读。没看过前两篇的可以点上边的链接看看,前两篇文…

Centos7 下载、安装、配置、启动部署

文章目录1. 下载tomcat2. 解压tomcat3. 重命名tomcat4. 配置tomcat环境变量5. 刷新配置文件6. 启动tomcat1. 下载tomcat wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-9/v9.0.31/bin/apache-tomcat-9.0.31.tar.gz2. 解压tomcat [rootly-01 ~]# tar -zxf apache-tomca…

世界杯千万级直播高稳定的挑战和实践

今年夏天,俄罗斯世界杯召开。在刚刚落幕的重庆云栖飞天技术汇专场中,阿里视频云技术专家裘良科,就世界杯这个话题,跟参会嘉宾一起探讨了千万级直播高稳定的挑战和相关实践,本文为演讲全文。 2018年俄罗斯世界杯从6月14…

会议邀请 | 10月25日北京,首期D2iQ云原生主题论坛正式启动

在开始今天的内容之前,先问大家一个问题:云原生究竟是什么? 一般来说,“云原生”是一种构建和运行应用程序的方法,它利用了云计算交付模型的优势。CNCF(云原生计算基金会)将“云原生”定义为使…

Flutter快速上车之Widget

Flutter作为一种全新的响应式,跨平台,高性能的移动开发框架。从开源以来,已经得到越来越多开发者的喜爱。闲鱼是最早一批与谷歌展开合作,并在重要的商品详情页中使用上线的公司。一路走来,积累了大量的开发经验。虽然越…

Linux Shell脚本专栏_自动发布Java项目(tomcat)_10

文章目录一、需求背景及实现流程1. 需求背景2. 实现流程二、软件准备2.1. 公共工具包yum下载2.2. tomcat安装及配置2.3. maven安装及配置2.4. 安装mysql2.5. order项目配置2.6. 脚本制作2.7. 运行脚本一、需求背景及实现流程 1. 需求背景 order项目代码已经到版本仓库中&…

[Phoenix] 十、全局索引设计实践

概述 全局索引是Phoenix的重要特性,合理的使用二级索引能降低查询延时,让集群资源得以充分利用。 本文将讲述如何高效的设计和使用索引。 全局索引说明 全局索引的根本是通过单独的HBase表来存储数据表的索引数据。我们通过如下示例看索引数据和主表数…

云原生数据库崛起,阿里云POLARDB当选世界互联网领先科技成果

戳蓝字“CSDN云计算”关注我们哦!作者 | 晶少责编 | 阿秃10月20日,在第六届世界互联网大会上,阿里云自研数据库POLARDB当选世界互联网领先科技成果,POLARDB解决了企业在云时代的数据库难题,帮助企业在数小时内完成上云…

gitee提交代码_git 版本控制,github和gitee

3.4 git 版本控制# 查看本地状态git status # 修改README.txt ,添加一行,保存,添加到暂存区git add README.txt # 查看当前仓库某一个文件的版本git diff README.txt# 提交到本地仓库git commit README.txt -m second Commit# 查看当前仓库某一个文件版本…

IT 拉呱室 | 论我遇到的最刺激的bug【长期福利站】

戳蓝字“CSDN云计算”关注我们哦!套路的最高境界是没有套路:这是一个只送福利的长期互动栏目【如果你们让我尴尬,我就哭给你们看】。书籍、键盘、鼠标、鼠标垫、CSDN 20周年纪念T恤、技术沙龙门票、线上公开课名额……你敢一直在,…

“百变”Redis带你见识不同场景下的产品技术架构

2018飞天技术汇24期-云数据库Redis产品发布会,由阿里云数据库技术组技术专家王欢、怀听、梁盼分别带来以“Redis全球多活产品”、“Redis混合存储产品”、“Redis多线程性能增强版”为题的演讲。本文对Redis进行了简单的介绍,进而针对不同的应用场景研制…

阿里云PyODPS 0.7.18发布,针对聚合函数进行优化同时新增对Python 3.7支持

近日,阿里云发布PyODPS 0.7.18,主要是针对聚合函数进行优化同时新增对Python 3.7支持。 PyODPS是MaxCompute的Python版本的SDK,SDK的意思非常广泛,辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。 PyODPS在这…

centos安装rabbitmq_【SpringBoot MQ系列教程】RabbitMq 初体验

SpringBoot 系列教程之 RabbitMq 初体验​mp.weixin.qq.commq 在异步解耦削峰的优势非常突出,现在很多的项目都会用到,掌握 mq 的知识点,了解如何顺畅的使用 mq,可以说是一个必备的职业技能点了接下来我们进入 rabbitmq 的学习过程…