更新时间:2025-08-18 GMT+08:00

TaurusDB数据库代理简介

数据库代理是TaurusDB和应用服务之间的网络代理服务,用于代理应用服务访问TaurusDB的所有请求。

读写分离是指通过数据库代理地址实现读写请求的自动转发。创建TaurusDB实例后,您可以开通数据库代理,通过代理地址,写请求自动访问主节点,读请求按照数据库代理的路由模式分发到各个节点,进行读写分离,降低主节点的负载。

数据库代理服务暂不收费。

介绍视频

基本概念

读写分离原理

TaurusDB支持开通一个或多个数据库代理。

一个TaurusDB实例下只有1个数据库代理实例,应用服务通过数据库代理地址连接到数据库代理实例,写请求通过数据库代理实例自动转发到主节点,读请求根据数据库代理实例的路由模式转发至主节点或只读节点。

图1 单个数据库代理读写分离原理图

一个TaurusDB实例下可以创建多个数据库代理实例,最多支持创建4个代理实例,主要适用于有隔离需求的复杂业务。不同的应用服务可以根据业务需要连接不同的数据库代理,数据库代理连接指定的只读节点,将不同应用服务之间的读请求最终转发到不同的只读节点上,实现业务隔离。

图2 多个数据库代理读写分离

读写分离优势

  • 相比在应用程序内手动做读写分离,扩容灵活,维护成本低。
  • 客户端读请求按权重分发至后端只读节点,数据库实例整体负载更加均衡,提升资源利用率。
  • 通过代理将指定业务的读请求路由到选定的只读实例上,实现业务隔离,避免多个业务之间相互影响。
  • 数据库代理默认提供过载保护功能:避免用户执行大结果集操作时,因压力过大引起服务端OOM。该功能默认打开,不需要用户单独设置。针对数据库内核过慢引起的压力,依赖数据库限流机制。

请求路由规则

注意事项

表2 数据库代理注意事项

分类

注意事项

版本约束

  • TaurusDB实例内核版本如下时,不支持开通数据库代理。
    • 大于等于2.0.26.2且小于等于2.0.28.3
    • 等于2.0.29.1
  • TaurusDB实例的内核版本低于2.0.42.230601时,仅支持创建1个代理实例。
  • TaurusDB实例的内核版本高于或等于2.0.42.230601时,最多支持创建4个代理实例。

内核版本的查询方法请参见如何查看云数据库 TaurusDB实例的版本号

不支持的功能

  • 数据库代理不支持压缩协议。
  • 数据库代理不支持事务隔离级别READ-UNCOMMITTED。
  • 数据库代理不支持读写表中单列超过16MB的数据。
  • 数据库代理不支持SQL_MODE参数PAD_CHAR_TO_FULL_LENGTH

使用约束

  • 实例的CPU总核数(即所有节点的CPU核数的总和)低于8核时,不支持开通数据库代理。
  • 至少创建1个只读节点才能开启读写分离功能。
  • 开启读写分离功能后,不允许修改TaurusDB实例的端口和读写内网地址。
  • 如果执行了Multi-Statements,当前连接的后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离。
  • 使用代理地址时,事务请求都会路由到实例的主节点(可以使用事务拆分功能对事务中写之前的读请求进行拆分),不保证非事务读的一致性,业务上有读一致性需求可以封装到事务中。
  • 使用代理地址时,show processlist和直连数据库有差异。因为数据库代理的show processlist是逻辑的,仅仅将通过数据库代理节点下发的业务展示出来,所以和直连数据库有差异。
  • 当某一个代理节点处于异常状态时,通过代理执行show processlist或者Kill时,有可能会出现命令执行时间稍微变长的情况,此时无需关注,业务不会受到影响。
  • 当数据库代理进行缩容后,通过代理执行show processlist命令时,可能会将被缩容的节点上的业务展示出来。
  • 通过数据库代理进行Kill时,偶尔可能会出现超时等报错信息,此时可以通过二次show processlist查看业务是否真正被Kill成功。
  • 当数据库代理的某个节点处于异常状态时,执行show processlist命令时,可能会出现2秒卡顿,此时无需关注,结果会正常返回。
  • 当使用数据库代理时,多语句拼接的SQL大小不超过100MB,避免数据库代理解析SQL消耗过多的资源。

HTAP实时分析

  • 不支持一致性级别和连接池。
  • 路由模式仅支持权重负载模式。
  • 代理模式仅支持读写模式。