如果您的主实例因连接数过多导致负载较高,或因业务需求要进行读写分离,可以使用RDS PostgreSQL数据库代理功能,该功能支持读写分离、事务拆分等能力,能够有效降低主实例访问压力,具有高可用、高性能、可运维、简单易用等特点。
数据库代理概述
RDS PostgreSQL数据库代理是位于数据库服务端和应用服务端之间的网络代理服务,用于代理应用服务端访问数据库时的所有请求。您可以连接数据库代理访问地址使用数据库代理的各项功能,以简化RDS PostgreSQL数据库实例的连接管理,请参见通过代理连接地址连接数据库。
适用场景
事务内有大量请求,导致主实例负载过高的场景。
连接数过多导致主实例负载过高的场景。
有读写分离需求的业务场景。
纯只读和有隔离需求的业务。
说明假设您购买了包含1个主实例和4个只读实例的RDS PostgreSQL实例,现在需要将A业务(纯只读)和B业务(可读可写)都连接至该实例。您可以将只读实例1和只读实例2组成代理终端A(只读模式)提供给业务A,主实例、只读实例3和只读实例4组成代理终端B(读写模式)提供给业务B,以实现两个业务在数据库使用上的物理隔离,避免相互影响。
基本概念
代理终端(数据库代理连接地址)
代理连接地址(原代理终端)是数据库代理的核心,支持自定义连接地址访问策略、修改连接地址前缀和端口号等。通过数据库代理连接地址连接RDS实例可以使用数据库代理的高级功能。
开通数据库代理后,每个RDS PostgreSQL实例最多支持7个代理连接地址(原代理终端),每个代理连接地址可以申请1个内网地址和1个外网地址,支持自定义配置每个代理连接地址的访问策略来满足不同的业务场景,增强业务的灵活性。 具体操作,请参见配置数据库代理连接地址访问策略、通过代理连接地址连接数据库。
读写分离
读写分离指通过代理连接地址实现读写请求的自动转发。
少写多读的应用场景可能会对主实例造成巨大的读取压力,进而影响到业务。读写分离功能可使写请求自动转发到主实例,读请求自动转发到各个只读实例,实现读写请求的自动分流,减轻主实例的压力。更多信息,请参见什么是读写分离。
事务拆分
数据库代理默认开启事务拆分功能,能够将事务内写操作之前的读请求转发到只读实例,降低主实例负载。更多信息,请参见事务拆分。
说明显式事务(例如begin或者start transaction)暂时不支持拆分。
某些业务对全局一致性有要求,开启事务拆分后将不满足全局一致性,因此在开启事务拆分前请评估事务拆分功能是否适用于您的业务。
该功能暂不支持关闭。
数据库代理类型介绍
RDS PostgreSQL 数据库代理提供两种类型:通用型和独享型。
通用型:共享CPU物理资源,不收取任何费用,更经济。
独享型:独占CPU物理资源,按量计费,具有更好的性能稳定性。
两种类型的差异和支持的功能如下表所示:
对比项 | 通用型 | 独享型 |
计费类型 | 免费 | 按量计费。计费详情,请参见数据库代理费用说明。 |
资源类型 | 共享CPU物理资源 | 独占CPU物理资源,具有更好的性能稳定性 |
代理规格 | 最高配置:16核(代理个数 8) | 最高配置:32核(代理个数16) |
配套RDS实例系列 | 配套RDS PostgreSQL高可用系列 | |
部署架构 | 高可用冗余架构 | |
读写分离 | 支持 | |
事务拆分 | 支持 | |
连接地址(代理终端) | 支持1-7个代理连接地址(每个代理终端支持申请1个内网连接地址和1个外网连接地址) |
代理规格和代理个数的关系:代理规格 = 单位代理规格 × 代理个数
,其中单位代理规格固定为2核CPU。例如,代理实例的代理个数为3 ,则对应的代理规格为2核 x 3 = 6核
。
注意事项
请参见数据库代理注意事项。
费用说明
请参见数据库代理费用说明。
使用方法
请参见使用数据库代理。