什么是数据库代理-九游平台
背景
在业务对数据库有少量写请求,但存在大量读请求的场景下,单个数据库实例可能无法承受巨大的读取压力,导致数据库性能下降,严重时甚至会对业务产生影响。
rds for mysql数据库支持通过创建只读节点来实现读写流量自动分离,通过只读节点满足大量的数据库读取请求。主节点承担写流量,只读节点分摊读流量,实现弹性扩展的读取能力,为数据库主实例分担压力,使得读多写少业务的性能显著提升。
功能介绍
数据库代理是指通过一个读写分离的连接地址实现读写请求的自动转发。
一个rds for mysql实例支持创建多个代理实例,适用于需要业务隔离的场景。
开通读写分离功能后,如果无只读实例,通过rds的读写分离连接地址,读写请求均会自动访问主实例。
开通读写分离功能后,如果存在只读实例,通过rds的读写分离连接地址,写请求均会自动访问主实例,读请求按照权重配比或负载均衡转发模式自动访问各个只读实例。
专属计算集群开通读写分离,需要有相应的操作权限,您可联系华为云客服人员申请。
基本概念
- 代理地址
购买数据库代理后,可以从数据库代理中查看代理地址,连接该地址可以执行读写操作,数据库代理会通过代理地址自动将写请求发送到主节点,将读请求发送到只读节点,降低主节点的压力。
- 事务拆分
数据库代理提供事务拆分的功能,能够将事务内写操作之前的读请求转发到只读节点,降低主节点负载。
更多关于事务拆分的内容请参见。
- 连接池
数据库代理提供了会话级连接池,可减少短连接业务频繁建立连接导致数据库负载高。
更多关于连接池的内容请参见。
- 路由模式
rds for mysql数据库代理支持权重负载、负载均衡和可用区就近负载的路由模式,可根据需要配置不同的路由模式。
- 权重负载:根据您设置的读权重比例分发读请求。
- 负载均衡:根据数据库节点的活跃连接数情况进行读请求分发,将读请求分发到活跃连接数较少的节点上。负载均衡模式不需要修改权重。
更多关于路由模式的内容请参见。
计费说明
购买数据库实例后可以选择开启数据库代理,开启后单独对数据库代理计费。
包周期数据库代理服务开启条件:需要数据库实例为包周期实例、需要联系客服人员开通权限。
数据库代理服务已经正式商用,数据库代理服务按照节点计费,控制台购买数据库代理实例时,默认创建2个节点,总费用=节点数*节点单价。代理规格单价请参见中的数据库代理价格。
读写分离原理
rds for mysql支持开通一个或多个数据库代理。
- 单个数据库代理下的读写分离
一个rds for mysql实例下只有1个数据库代理实例,应用服务通过数据库代理地址连接到数据库代理实例,写请求通过数据库代理实例自动转发到主节点,读请求根据数据库代理实例的路由模式转发至主节点或只读节点。
图1 单个数据库代理原理图
- 多个数据库代理下的读写分离
一个rds for mysql实例下可以创建多个数据库代理实例,最多支持创建4个代理实例,主要适用于有隔离需求的复杂业务。不同的应用服务可以根据业务需要连接不同的数据库代理,数据库代理连接指定的只读节点,将不同应用服务之间的读请求最终转发到不同的只读节点上,实现业务隔离。
一个mysql只读实例可以被不同代理连接,但通常建议只有一个代理分配流量到该只读实例上。
图2 多个数据库代理原理图
适用场景
- 相比在应用程序内手动做读写分离,扩容灵活,维护成本低。
- 客户端读请求按权重分发至后端只读节点,数据库实例整体负载更加均衡,提升资源利用率。
- 通过代理将指定业务的读请求路由到选定的只读实例上,实现业务隔离,避免多个业务之间相互影响。
请求路由规则
- 只发往主节点
- insert、update、delete、select for update。
- 所有ddl操作(建表/库、删表/库、变更表结构、权限等)。
- 所有事务中的请求(事务拆分开启时部分读请求可能发送至只读节点,详见)。
- 用户自定义函数。
- 存储过程。
- execute语句。
- multi statements。
- 使用到临时表的请求。
- select last_insert_id()。
- 所有对用户变量的查询和更改。
- kill(sql语句中的kill,非命令kill)。
- 发往只读节点或主节点
- 非事务中的select。
- com_stmt_execute命令。
- 总是发往所有节点
- 所有系统变量的更改。
- use命令。
读写属性处理逻辑
读写属性 |
路由模式 |
主节点权重 |
正常情况 |
只读节点全部故障 |
---|---|---|---|---|
只读 |
权重负载 负载均衡 |
主节点权重不可设置 |
主节点:不参与只读请求的转发 代理地址:可读不可写 |
主节点:不参与只读请求的转发 代理地址:连接报错 |
读写 |
负载均衡 |
系统分配 |
主节点:可读可写 代理地址:可读可写 |
主节点:可读可写 代理地址:可读可写 |
权重负载 |
> 0 |
主节点:可读可写 代理地址:可读可写 |
主节点:可读可写 代理地址:可读可写 |
|
= 0 |
主节点:不可读可写 代理地址:可读可写 |
主节点:可读可写 代理地址:可读可写 |
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨