产品文档

分布式关系型数据库 DRDS

DRDS 读写分离介绍

在一些业务场景中,数据读取的请求比较多,对数据库实例产生的压力比较大。 在这种情况下,可以使用DRDS的读写分离功能,读请求转发到RDS MySQL的只读实例上,减轻主实例的负荷,使RDS MySQL的主实例更专注于关键的业务处理。

DRDS的读写分离具有以下优势

  1. 自动读写分离,无需修改代码
    对应用透明,用户无需修改代码,仅需在DRDS控制台上对账号和数据库进行相应的设置就可以实现自动实现读写分离。

  2. 只读操作支持高可用
    只读操作支持高可用特,单个RDS MySQL的只读实例故障不影响整个业务系统, DRDS会将自动只读SQL转发给其他正常工作的只读实例上。

  3. 配置灵活

  • DRDS的读写分离可针对不同的数据库进行单独的设置,同一个实例上数据库的读写分离可单独设置,互不干扰。
  • 在数据库启用了读写分离的基础上,通过账号权限可进一步控制是否对该账号开启读写分离,可满足同一业务系统不同模块对读写分离的需求。例如APP1,APP2都访问同一个库,但是APP1交易性,流量需要到主实例, APP2是查询类,流量需要到只读实例,这样APP1和APP2可使用不同账号,实现不同的读写分离策略。
  1. 支持Hint
    可在SQL中通过"Hint"方式指定SQL的路由,给业务提供了更大的灵活性。

注意: RDS MySQL 只读实例和主实例之间是半同步方式,在绝大多数场景上,DRDS 的读写分离都可以很好的满足业务的只读需求。 但由于只读实例和主实例之间不是强同步,因此如果业务需要强一致的读取操作,需要设置到主实例上进行读取。

自动读写分离规则

  • 仅对不在事务中的查询类SQL进行读写分离;在事务中的所有SQL均发送到主节点
  • SQL hint 规则如下:
    • 仅对权限为rws和ros的权限生效;
    • 仅对不在事务中的查询类SQL有效; 如果SQL 本身在事务中,或者是写类型的SQL,将忽略hint;
    • select for update 被当做写语句处理

只读实例间的流量分配

DRDS将只读流量统一发送到后端的RDS MySQL 只读实例或只读代理。如果只读代理中有多个只读实例,流量的分配和设置由MySQL 的只读代理决定。
目前情况下,MySQL只读代理将流量进行平均分配。这样当某个只读实例发生问题时,可实现高可用,确保查询服务不会中断。

更新时间:2020-07-27 13:14:50
文档反馈 docs feedback