PolarDB数据库代理是位于数据库和应用程序之间的网络代理服务,用于代理应用程序访问数据库时的所有请求,具有高可用、高性能、可运维、简单易用等特点,支持自动读写分离、负载均衡、一致性级别、连接池等高级功能。您可以连接PolarDB集群地址使用数据库代理的各项功能。

PolarDB数据库代理介绍

1

PolarDB集群版是一个由多节点构成的数据库集群,包括一个主节点和多个只读节点。对外默认提供两个地址,分别为主地址集群地址。其中,集群地址功能由PolarDB数据库代理提供,集群地址分为可读可写和只读两种读写模式,可读可写模式支持读写分离,只读模式支持按连接数负载。

支持两种数据库代理版本

数据库代理企业版提供两种版本:企业通用版企业独享版
  • 企业通用版:配套集群子系列的通用规格,它可以共享CPU物理资源,可根据业务负载,提供智能秒级资源弹性扩展能力。
  • 企业独享版:配套集群子系列的独享规格,它可以独占CPU物理资源,具有更好的性能稳定性。
两种版本的差异如下表所示:
对比项 企业通用版 企业独享版
计费类型 付费(约占计算节点总费用的5~10%)

当前暂时免费使用,未来收费时间待定

资源类型 共享CPU物理资源,可根据业务负载,提供智能秒级资源弹性扩展能力 独占物理资源,具有更好的性能稳定性
部署架构 高可用冗余架构
实例规格 最低配置:2核
性能 集群存储最大IOPS相比历史版本可提升50%,不同规格集群的最大IOPS可参见计算节点规格
只读节点配置 只读节点无需与主节点配置保持一致,可以根据业务负载降配从而节省成本
只读节点数量 支持1~15个只读节点
连接地址 1个主地址+7个集群地址
热备切换 连接/事务不中断,短暂阻塞5~10秒
一致性
  • 最终一致性
  • 会话一致性
  • 全局一致性
连接池 支持
事务拆分 支持
防闪断(连接保持) 支持
数据脱敏(安全) 支持
变配业务无感 支持
多主架构 支持
计算节点秒级弹性扩展 支持 独占资源,无需支持
Proxy限流保护(即将上线) 支持

费用

数据库代理企业版目前可免费使用,未来将收费,收费时间待定。

数据库代理企业版的费用策略如下:
系列 购买类型 费用策略
单节点历史库(高压缩率) 不论是新购还是存量,都不支持数据库代理功能。
集群版历史库集群版 新购集群 在2021年12月9日后,新购集群仅提供数据库代理企业版。
存量按量付费集群 对于存量的按量付费集群,数据库代理于2021年12月9日已自动切换到数据库代理企业版。
存量包年包月集群 对于存量的包年包月集群,数据库代理于2021年12月9日已自动切换到数据库代理企业版。

使用限制

PolarDB集群版历史库集群版支持集群地址和数据库代理相关功能。PolarDB单节点历史库(高压缩率)采用单节点架构无需集群地址和数据库代理功能。

注意事项

  • 数据库代理默认的集群地址和自定义的集群地址都不支持压缩协议。
  • 使用集群地址后,若未启用事务拆分,事务内的所有请求都会路由到主节点。
  • 使用集群地址后,当执行SHOW PROCESSLIST命令时,系统会将所有节点的结果合并后返回。
  • 若执行了Multi Statements或调用了存储过程,当前连接的后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离功能。
  • PolarDB集群地址本身并没有最大连接数的限制,连接数的限制主要由后端数据库中计算节点的规格决定。对于读写模式的集群地址由于一个应用连接会与后端数据库中每个计算节点各建立一个连接,所以应用能使用的最大连接数就是单个计算节点的最大连接数;对于只读模式的集群地址由于一个应用连接只会与后端数据库中的一个计算节点建立连接,所以应用能够使用的最大连接数为该只读集群地址下所有只读节点的最大连接数之和。对于读写模式的集群地址可以通过事务级连接池功能来增加应用的最大可用连接。
  • 新增只读节点或重启只读节点之后新建的读写分离连接,会转发请求到该只读节点。新增只读节点或重启只读节点之前建立的读写分离连接,不会转发请求到新增的只读节点或重启后的只读节点上,需要断开该连接并重新建立连接,例如,重启应用程序。
  • 请勿在运行Multi Statements或调用存储过程时修改环境变量,例如set names utf8mb4;select * from t1;,否则可能会导致请求路由到只读节点和主节点查到的数据不一致。
  • 当您使用应用连接池建立URL链接时,为了防止连接池在网络或其它非预期场景下丢包导致应用连接池hang住的问题,建议在URL链接中增加connectTimeoutsocketTimeout参数。参数说明请参见参数说明。示例如下:

    java url: jdbc:mysql://ip:port/db?connectTimeout=60000&socketTimeout=300000;

读写分离

PolarDB集群版自带读写分离功能。应用程序只需连接一个集群地址,写请求会自动发往主节点,读请求会自动根据各节点的负载(当前未完成的请求数)发往主节点或只读节点,详情请参见读写分离

负载均衡

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

    在确保一致性及事务正确性前提下,将查询SQL仅发送到只读节点,来降低主节点的负载,确保主节点稳定。详情请参见主库是否接受读

  • 事务拆分

    PolarDB提供了事务拆分功能,旨在保证读写一致性的前提下,将事务中的读请求发送到只读节点,减轻主节点的压力。详情请参见事务拆分

一致性级别

由于PolarDB使用异步复制的方式进行主从同步,该模式在读写分离模式下,可能出现一个写请求之后的读请求无法获得最新的写结果,导致不一致。PolarDB提供了最终一致性、会话读一致性以及全局一致性级别供您选择,详情请参见一致性级别

连接池

PolarDB支持会话级连接池和事务级连接池,您可以根据业务场景选择合适的连接池,帮助降低因大量连接导致的数据库负载压力,详情请参见连接池

连接保持

PolarDB新增支持连接保持功能,避免由于一些运维操作(如升级配置、主备切换或升级小版本等)或非运维操作故障(如节点所在服务器故障)导致的连接闪断或新建连接短暂失败的问题,进一步提高PolarDB的高可用性。具体请参见连接保持

动态脱敏

当应用程序发起数据查询请求时,系统会在数据库内部对敏感数据进行变换后再返回给应用程序。开始查询前,仅需指定需要进行脱敏查询的数据库账号,以及需要脱敏的数据库、表或列的名称即可。详情请参见动态脱敏

相关API

API 描述
CreateDBEndpointAddress 创建PolarDB集群的公网地址。
CreateDBClusterEndpoint 创建PolarDB自定义集群地址。
DescribeDBClusterEndpoints 查询PolarDB集群的地址信息。
ModifyDBClusterEndpoint 修改PolarDB集群地址属性。
ModifyDBEndpointAddress 修改PolarDB集群的连接地址(如自定义集群地址)。
DeleteDBEndpointAddress 释放PolarDB集群地址(除了自定义集群地址的私网地址)。
DeleteDBClusterEndpoint 释放PolarDB自定义集群地址。