什么是数据库代理

更新时间: 2023-08-18 10:27:02

本文介绍RDS MySQL的数据库代理服务。

RDS MySQL数据库代理又分独享代理和共享代理,是位于数据库服务端和应用服务端之间的网络代理服务,用于代理应用服务端访问数据库时的所有请求,具有高可用、高性能、可运维、简单易用等特点。独享代理还提供自动读写分离、事务拆分、连接池等高级功能。

说明

当前仅支持开通独享代理。更多信息,请参见附录:共享代理简介

适用场景

  • 事务内有大量请求,导致主实例负载过高的场景。

  • 连接数过多导致主实例负载过高的场景。

  • 短连接为主的业务。

  • 有读写分离需求的业务场景。

  • 纯只读有隔离需求的业务。

    说明

    假设您购买了包含1个主实例和4个只读实例的RDS实例,现在需要将A业务(纯只读)和B业务(可读可写)都连接至该实例。您可以将只读实例1和只读实例2组成代理终端A(只读模式)提供给业务A,主实例、只读实例3和只读实例4组成代理终端B(读写模式)提供给业务B,以实现两个业务在数据库使用上的物理隔离,避免相互影响。

代理终端简介

代理终端是数据库独享代理的核心,是阿里云自主研发的可自定义连接地址功能,RDS MySQL实例中最多支持7个代理终端,您可以修改各代理终端的读写属性来满足不同的业务场景,增强业务的灵活性。

读写属性说明

每个代理终端都可以分别设置各自的读写属性。

  • 读写:用来支持读写分离功能实现业务线性扩展。

    该模式下创建的代理终端中至少包含一个主实例和一个只读实例,写请求都只会发往主实例。支持如事务拆分连接池等读写分离功能。

  • 只读:用来支持只读的业务,比如报表。

    该模式下创建的代理终端中至少包含一个只读实例,主实例不会参与路由,不支持事务拆分连接池等功能。

    当代理终端的读写属性设置为只读时,RDS会根据代理终端下配置的只读实例轮循分配连接,即一个客户端连接仅对应到一个只读实例的一个连接,而主实例不会参与到该分配,可用的业务连接总数是所有只读实例上的连接数之和。

说明

关于如何修改代理终端的读写属性,请参见设置代理终端

功能概览

数据库代理包含如下功能:

  • 代理服务:在代理服务总览页面,可以进行升级独享代理小版本、新增连接地址等操作。数据库独享代理页面

    类别

    参数

    说明

    代理地址

    运行状态

    代理运行状态。

    实例ID

    代理ID。

    关联代理实例数量

    代理连接地址关联的代理数量,可以通过增加代理数量提升代理处理请求的能力。

    连接地址

    代理终端

    代理终端名称,一个代理终端中可以创建多个连接地址。更多信息,请参见什么是读写分离

    连接地址

    代理连接地址,独享代理目前提供一个默认代理连接地址,代理终端功能绑定该地址。 您可以额外新增、修改、删除代理地址。更多信息,请参见设置独享代理连接地址

    端口

    代理连接地址的端口。

    说明

    您可以单击右侧的修改端口按钮修改代理连接端口,取值:1000~5999。

    网络地址类型

    代理地址的网络地址类型。暂不支持切换网络地址类型。

    代理实例

    代理类型

    当前仅支持独享代理

    代理规格

    代理的规格,当前仅支持2核CPU、4 GB内存的规格。

    开通个数(个)

    代理的数量,多个代理可以实现负载均衡,分担代理压力。最多16个代理。

    说明

    推荐的代理个数计算方式:主实例CPU核数 + 该主实例下所有只读实例CPU核数 / 8 (结果向上取整),最多16个。

    例如主实例为8核CPU,该实例下有1个4核CPU的只读实例,则推荐代理数量为(8+4)/8 ≈ 2

  • 代理终端(原读写分离)

    通过独享代理地址(读写分离地址)实现读写请求的自动转发。更多信息,请参见什么是读写分离

  • 连接池:有效解决连接数过多或短连接业务(例如PHP)频繁建立新连接导致实例负载过高的问题。更多信息,请参见设置连接池类型

  • 事务拆分:将事务内写操作之前的读请求转发到只读实例,降低主实例负载。更多信息,请参见事务拆分

  • 监控数据:使用独享代理时,您可以随时查看独享代理的CPU使用率,了解独享代理的负载情况,以便及时调整代理数量。具体操作,请参见查看监控数据

  • SSL:对独享代理连接地址进行SSL加密,可以保证数据的传输安全。具体操作,请参见设置独享代理SSL加密

注意事项

请参见数据库代理注意事项

使用方法

请参见开通并配置数据库代理服务

附录:共享代理简介

RDS MySQL提供两种数据库代理服务的部署模式:独享代理和共享代理。

共享代理也叫多租户代理,属于多用户共享代理资源,争抢资源会导致代理服务不稳定,同时不支持独享代理的高级特性,如连接池、SSL加密、事务拆分等;共享代理中的读写分离地址类型依赖主实例的网络地址类型,当您切换了主实例的网络类型,读写分离地址的网络类型也会被切换。目前共享代理模式已下线,更多信息,请参见【通知】2021年04月01日起共享代理功能停止更新维护

独享代理也叫单租户代理,使用独立代理计算资源为当前实例提供代理服务,相比共享代理有如下优势:

  • 更好的稳定性。

  • 更好的隔离性。

  • 更好的性能。每个RDS实例最多可以创建16个代理实例,Sysbench基准测试OLTP场景下,QPS稳定在2万到5万,建议以实际业务压测数据为准。

    说明

    独享代理本身并没有最大连接数的限制,连接数的限制还是由后端数据库中计算节点的规格决定。

  • 扩容方便快捷,您可以快速调整代理数量

  • 代理性能可监控,您可以根据监控数据及业务规划调整代理个数。

  • 切换主实例的网络类型不会改变读写分离地址的网络类型。

  • 提供独享代理连接地址,应用使用该地址后不用反复变更应用内的地址,减少维护成本。只要不释放代理,代理连接地址可以永远使用。例如您在大促时期开启读写分离,大促结束后释放只读实例,关闭读写分离,也不用变更应用内的连接地址。

  • 支持自动读写分离,减少维护成本。例如,有只读实例时,一般需要在应用程序中添加每个主实例和只读实例的地址,手动实现读写分离。而开通独享代理后,应用程序中只需配置一个代理连接地址,该地址会自动实现读写分离,将读请求发送至只读实例,将写请求发送至主实例。即使增加或删除只读实例,也无需调整应用程序的设置。

  • 支持更多高级功能,例如连接池事务拆分SSL加密等。

说明

由于共享代理的局限性,新实例目前不支持共享代理。RDS MySQL仅为已开通共享代理的存量实例继续提供服务。已开启共享代理的实例建议升级为独享代理,享受更多高级特性。具体操作,请参见共享代理升级为独享代理

阿里云首页 云数据库 RDS 相关技术圈