PolarDB支持基于负载的自动调度策略,读请求将在多个只读节点中按照活跃连接数自动调度,来保证多个只读节点间的负载均衡。本文主要介绍负载均衡的两大功能主库是否接受读和事务拆分功能。

主库是否接受读

开启主库是否接受读后,普通的读请求将不再发往主节点。而事务内,一致性要求的读请求还是会被发往主节点,以保证业务的需求。另外,当所有只读节点出现故障后,读请求也会发往主节点。如果业务对一致性的要求较低,可以通过设置一致性级别为最终一致性来减少读请求到主节点,也可以通过事务拆分功能来减少真正事务前的读请求发往主节点。广播的请求(例如SET或PREPARE)还是会被发往主节点。关于如何修改主库是否接受读设置,请参见配置数据库代理
说明
  • 仅当读写模式可读可写(自动读写分离)时,支持设置主库是否接受读
  • 主库是否接受读配置更改后会立即生效。

事务拆分

当使用PolarDB可读可写模式集群地址时,读写请求会由数据库代理(Proxy)分发到主节点和只读节点。为了保证一个会话连接中事务读写一致性,代理会将这个会话中所有在事务中的请求都发送到主节点。例如,某些数据库客户端驱动(如JDBC)默认将请求封装在事务中,因此应用的请求都会被发送到主节点,导致主节点压力大,而只读节点几乎没有压力,如下图所示。无事务拆分
为了解决上述问题,PolarDB提供了事务拆分功能,旨在保证业务中读写一致性的前提下,将事务中读请求发送到只读节点,以减轻主节点的压力。您不需要改动应用的代码或配置就可以将事务中的读压力从主节点转移到只读节点,从而提高主节点的稳定性。
说明 仅对读已提交(Read Committed)事务隔离级别的会话支持事务拆分功能。

Proxy会将事务中第一个写请求前的读请求发送到只读节点,从而减轻主节点的负载,由于事务中未提交(COMMIT)的数据在只读节点上处于不可见的状态,为了保障事务中读写一致性,第一个写请求后的所有读写请求仍路由到主节点。如需开启事务拆分服务,请参见配置数据库代理