当前位置: 首页 > 科技观察

数据库治理工具:动态读写分离

时间:2023-03-19 01:51:17 科技观察

背景在分布式系统架构中,业务流量是端到端的。每个请求都会经过很多层的处理,比如从入口网关到WebServer再到服务之间的调用,再到服务访问缓存或者DB等存储。对于我们的系统来说,数据库是非常重要的一块。所以无论是稳定性治理还是开发效率提升场景,我们的系统都需要数据库相关的治理能力。下面总结了微服务访问数据库层时,数据库治理的一些常见场景和能力。OpenSergo领域数据库治理概览本文将介绍MSE服务治理最近上线的数据库治理工具:读写分离,无入侵地访问数据库。什么是读写分离?读写分离是指将数据库拆分成主库和从库,即主库负责处理事务性的增删改查,从库负责处理查询操作。为什么读写分离?稳定性当一个大客户的请求来的时候,查询数据库返回几万条几百兆的数据,直接把数据库的CPU占满。不知道大家有没有遇到过类似的问题。性能在业务处理过程中,如果对数据库的读操作远多于写操作,业务对数据查询结果的实时性要求不高(比如可以容忍秒级延迟),那么在优化系统性能的时候可以考虑引入读写分离方案。只读库可以承担主库的压力,有效提升微服务应用的性能。规模增长随着业务的增长,达到一定规模后会进行产能扩张,但很多都卡在了扩张的步伐上,极大地限制了企业响应市场变化的速度。其中,数据库的扩容难度最大。目前常见的数据库扩容方式有:垂直升级分库分表读写分离垂直升级需要中断服务,高可用不如其他方式,分库分库表在分区键的选择上会比较困难,使用SQL也会有很多限制,同时业务的改造也是一个非常大的工作量。相对来说,读写分离对业务的侵入性最小,也是最容易实现扩展的方案。根据经验,大部分应用的读写比都在5:1以上,部分场景甚至大量高于10:1。在对数据库的写请求数量较少,而读请求数量较多的应用场景下,单个实例可能无法承受读取压力,甚至会对业务造成影响。综上所述,数据库读写分离方案可以满足大部分公司在阿里云上的稳定性管理、性能提升和数据库扩展需求。常见的读写分离方案目前业界流行的读写分离方案通常是基于上述主从数据库架构。读写分离的实现方案大多是通过引入odp、mycat等数据访问代理产品,利用其读写分离功能来帮助实现读写分离。引入数据访问代理的好处是源程序无需任何修改即可实现读写分离。缺点是由于增加了一层中间件作为中转代理,性能会下降,数据访问代理容易成为性能瓶颈。ShardingSphere读写分离方案[1](来自shardingSphere官网)ShardingSphere[2]的读写分离主要依赖于内核的相关功能。包括解析引擎和路由引擎。分析引擎将用户的SQL转化为ShardingSphere可以识别的Statement信息,路由引擎根据SQL读写的类型和事务的状态进行SQL路由。如下图所示,ShardingSphere识别读操作和写操作,分别路由到不同的数据库实例。MSE数据库读写分离能力MSE提供动态数据流量管理解决方案,无需修改任何业务代码即可实现数据库的读写分离能力。下面介绍MSE基于Mysql数据存储的读写分离能力。前提条件应用接入MSE部署Demo应用在阿里云容器服务中部署A、B、C三个应用,并将应用接入MSE服务治理[3],添加具有数据库管理能力的代理。创建RDS只读实例[4]我们需要创建一个RDS只读实例,利用只读实例来满足大量的数据库读取需求,提高应用的吞吐量。配置读写分离规则我们需要配置如下环境变量来额外启用/配置数据库的读写分离能力。我们可以通过控制台配置弱读请求规则或者指定某些接口为弱读请求target:-resource:path:'/getLocation'controlStrategies:weak:true以上OpenSergo标准规则表示/getLocation接口请求为弱读请求。对于一些对延迟不敏感的大规模查询和业务请求,我们可以将其配置为弱类型SQL洞察。如上所述,我们只需要简单的两步就可以实现数据库的读写分离能力。基于数据库的读写分离能力,结合MSE数据库治理的SQL洞察,我们可以快速定位RT过大的查询请求,帮助我们进一步分析SQL对我们数据库稳定性的影响。我可以在应用和资源API维度观察到SQL请求的实时数据(详细到秒级)。同时,MSE还提供了SQL的topN列表。RT高,查询返回值大的SQL语句一目了然。小结本文详细介绍了MSE即将推出的数据库治理能力矩阵中动态读写分离能力的介绍。通过MSE提供的SQL洞察,结合我们对业务的理解,可以快速定位接口请求并将其划分为弱请求。将对主库性能和稳定性有较大影响的读操作分散到RDS只读库中,可以有效降低主库的读写压力,进一步提升微服务应用的稳定性。从应用的角度,我们抽象出一些我们访问和使用数据库时的常见场景和相应的治理能力,梳理了我们在稳定性治理、性能优化、效率提升等方面的实践经验。对于每一个后端应用来说,数据库无疑是重中之重。我们希望通过我们的数据库治理能力,帮助大家更好的使用数据库服务。最后提一下服务治理标准OpenSergo:Q:什么是OpenSergo[5]?A:OpenSergo是一套面向分布式服务架构,覆盖全链路异构生态的开放、通用的服务治理标准。它基于行业服务治理场景和实践形成了服务治理的通用标准。OpenSergo最大的特点是使用一套统一的配置/DSL/协议定义服务治理规则,面向多语言异构架构,实现全链路生态覆盖。无论微服务的语言是Java、Go、Node.js还是其他语言,无论是标准微服务还是Mesh接入,从网关到微服务,从数据库到缓存,从服务注册发现到配置,开发者都可以使用同一套OpenSergoCRD标准配置对各层进行统一治理和控制,无需关注框架和语言的差异,降低异构全链路服务治理和控制的复杂性