快速,持续,稳定,傻瓜式
支持Mysql,Sqlserver数据同步

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

请联系QQ:1793040 索取软件

发件人: DBAplus社区

团队介绍

网易领导的DBA组, 负责网易领导商户,网易邮箱,网易技术部的数据库日常运营和维护,负责数据库私有云平台的开发和维护,以及数据库和数据库中间件Cetus的开发和测试。

I.背景

传统的分片是通过DAO层完成的,但是DAO层在数据分片方面存在许多问题。 从业务的角度来看,配置修改需要重新启动服务,这是昂贵的。分片结果集需要处理,业务逻辑变得更加复杂。功能比较简单。从数据库运维角度来看,统一配置管理非常困难。数据库升级和迁移操作很复杂。

网易电子商务也面临这些问题。为了彻底解决数据库瓶颈,网易团队在实际生产中开发了自己的中间件Cetus。它的具有正统基因,基于正式的MySQL-Proxy版本进行全面修复和重新创新,不久前已开源,已广泛用于各种产品线,性能和稳定性都很好。

Cetus与MySQL协议兼容,并且前端应用程序可以通过Cetus访问数据库而无需进行修改,这很方便DBA运维生和开发生。数据库级别的水平扩展。

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

第二,负载平衡策略和性能优化

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

  • 加载策略,用于读取主库和从库之间的流量;

  • 加载策略,用于从库中读取流量。

具体实现时,流量分配单元也与Atlas和其他中间件略有不同。性能优化。以下各章将详细介绍。

1.读取主库和从属库之间流量的加载策略

默认在非事务的情况下,尚未被强制通过注释或未使用的锁通过主库的读取流量将优先路由到从属库,并且在从属库之间平衡负载。仅当从库不可用时,读取的流量才会路由到主库。

在某些业务场景中,主库可以共享部分读取流量。这时,它涉及到主库和从库上的读取流量。配置加载策略。

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

此值默认为0,也就是说,所有读取流量将优先路由到从属库,并将路由到从属库。如果所有从属库均不可用,则为主库。如果参数设置为100,则所有读取流量将路由到主库;如果将该值设置为(0,100),则会根据设置的比率进行路由。应当注意,该值表示主库与所有从库的比率。

2.读取从站之间的流量负载策略

路由到从站将在从站之间进行负载平衡。当前,每个Cetus从属库之间的读取流量负载策略仅支持轮询(RR)模式。

在流量分配方面,Cetus也进行了优化。某些MySQL数据库中间件(例如Atlas)是基于SQL维度进行负载平衡的。它不考虑SQL是从相同连接还是从不同连接发送的。中间件根据该策略将接收到的SQL发送到后端数据库。

在实际使用中,这种策略将在长连接的情况下导致大量的连接切换,从而导致会话级变量的频繁调整,影响SQL执行效率。因此,Cetus已对其进行了优化,并且无法根据SQL维度完全实现负载平衡。

Cetus考虑在同一连接上连续发送SQL请求的情况,因此不会立即连接已使用的Cetus和MySQL由当前的SQL放回连接池以供重用,但保留较短的时间(256毫秒),以期将来仍将执行SQL,从而避免了会话级变量的调整并大大提高了效率SQL执行。

在长连接情况下,优化前后在Cetus上进行了简单测试。通过测试发现,经过优化的Cetus在长连接情况下显着提高了读取流量的吞吐量。该图是在比较搬运工环境中的简单的测试:

为了防止IO太高,只需将sysbench发送的SQL修改为限制回报。结果集的大小。在禁用事务和准备的情况下,每次使用100个线程来测试60s,并执行5次连续测试。结果如下:

由于Docker的机器性能差,并且sysbench模拟测试语句相对简单,不涉及会话的切换变量,因此比较效果不是很明显,此测试性能仅提高了约30%。在长连接业务场景中,性能优化可能会更加明显。

3.读取流量的路由策略摘要

至少有一个从库中可用时,影响查询语句的路由策略的主要因素是:

  1. 查询;

  2. 选择…以进行更新或选择…锁定为共享模式;

  3. Cetus设置参数master-preferred = true默认情况下,所有流量都路由到主库;

  4. Cetus设置参数read-master-percentage来控制主从读取流量;

  5. 使用注释或。

默认情况下,读取流量将优先路由到从属库。查询策略在从站之间进行负载平衡;一旦所有从站都不可用,就将它们路由到主站。目前,Cetus的每个从属库都不支持按重量加载。

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

  • 对于点d,如果设置了read-master-percentage = 100,则会路由所有查询流量到主图书馆;如果您设置read-master-percentage = [0,100),则Cetus将根据该比率 将读取的流量路由到主库和从属库(请注意,此处的从属库是指所有从属库,即比率是指主库与所有从属库的比率) ;

  • 对于e点,如果使用批注,则读取流量将被路由到主库;如果您使用批注,则读取流量将被路由到从属库,并且如果所有从属库都不可用,它们将被路由到主库。

上面每个因素的优先级,注释的优先级最高,后跟参数master-优选,最后是参数read-master-percentage。

三,摘要

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

 

相关推荐

咨询软件
 
QQ在线咨询
售前咨询热线
QQ1793040