湖北省勘察设计协会网站,seo网站结构优化,淘宝导购网站模版,seo公司哪家好团队介绍网易乐得DBA组#xff0c;负责网易乐得电商、网易邮箱、网易技术部数据库日常运维#xff0c;负责数据库私有云平台的开发和维护#xff0c;负责数据库及数据库中间件Cetus的开发和测试等等。一、背景随着业务的爆发式增长#xff0c;电商系统中的读写压力越来越高…团队介绍网易乐得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按照策略发往后端的数据库。在实际使用中发现长连接的场景下该策略会造成大量的连接切换从而导致session级变量的频繁调整影响SQL执行效率。因此Cetus对其进行了优化并非完全按照SQL的维度做负载均衡。Cetus考虑了同一个连接连续发送SQL请求的情况不会立即将当前SQL使用完的Cetus与MySQL的连接放回连接池复用而是持有短暂(256毫秒)时间以期后续仍有SQL执行从而避免了session级变量的调整大大增加了SQL执行的效率。长连接场景下对优化前后的Cetus进行了简单测试。通过测试发现通过优化后的Cetus针对长连场景下的读流量的吞吐量有了明显提升。下图是在docker环境下的简单测试对比为了防止IO过高简单改造了sysbench发送的SQL限制了返回的结果集大小。禁用事务和prepare的情况下采用100个线程每次测试60s连续测试5次结果如下由于本机Docker性能较差且sysbench模拟测试的语句较为简单不涉及session变量的切换因此对比效果不甚明显本次测试性能仅提升30%左右。长连接业务场景下性能优化可能会更加明显。3、读流量的路由策略总结在存在至少1个可用从库的情况下影响查询语句的路由策略的因素主要有a. 事务中的查询b. select…for update 或 select … lock in share modec. Cetus设置参数master-preferredtrue所有流量默认全部路由主库d. Cetus设置参数read-master-percentage控制主从读流量负载e. 使用注释/#modeREADWRITE/或/#modeREADONLY/。默认情况下读流量会优先路由到从库从库之间按照轮询策略在各个从库之间做负载均衡一旦所有从库均不可用会路由到主库上。目前Cetus的各个从库暂不支持按照权重做负载。对于a、b、c点Cetus会将查询语句直接路由主库对于d点如果设置read-master-percentage100所有的查询流量均路由到主库如果设置read-master-percentage[0, 100)Cetus会将读流量按照该比例路由到主库和从库(注意这里的从库指的是全部的从库即该比例指的是主库和全部从库的比例)对于e点如果使用注释/#modeREADWRITE/读流量会路由到主库如果使用注释/#modeREADONLY/读流量会路由从库如果所有从库均不可用时才会路由到主库。上面的各个因素的优先级注释的优先级最高其次是参数master-preferred最后是参数read-master-percentage。三、总结MySQL数据库中间件的主要特性是对客户端发送的SQL进行路由而其中负载均衡便是路由策略中的重要部分。通过了解Cetus的负载均衡机制可以在后续维护过程中更好的对数据库中间件进行调优更灵活地控制SQL的路由。Cetus中间件开源地址https://github.com/Lede-Inc/cetus/blob/master/doc/cetus-quick-try.md