直连 Observer 与通过 ODP/obproxy 连接的差异是什么?生产环境为何通常建议走 ODP?

  • 直连 Observer 与通过 ODP/obproxy 连接的差异是什么?生产环境为何通常建议走 ODP?

在 OceanBase 数据库中,应用程序可以通过两种方式连接到数据库:直连 OBServer 或通过 ODP/obproxy 连接。这两种方式的主要差异如下:

连接管理:

直连 OBServer:如果应用程序直接连接到 OBServer,当 OBServer 发生故障、维护或上下线时,客户端连接可能会中断,导致业务受到影响。

通过 ODP/obproxy:ODP/obproxy 作为代理层,可以屏蔽 OBServer 分布式集群的复杂性,保证连接的稳定性。即使某个 OBServer 出现问题,ODP/obproxy 也会自动切换到其他健康的 OBServer,从而避免客户端连接中断。

数据路由:

直连 OBServer:应用程序需要自己管理数据路由,确定每个 SQL 语句应该发送到哪个 OBServer。这增加了应用程序的复杂性和开发难度。

通过 ODP/obproxy:ODP/obproxy 可以获取到 OBServer 中的数据分布信息,高效地将 SQL 语句转发到数据所在的 OBServer,提高执行效率。例如,对于 insert into t1 语句,ODP/obproxy 会将请求转发到包含 t1 表主副本的 OBServer。

负载均衡:

直连 OBServer:应用程序需要自行实现负载均衡,将请求分散到多个 OBServer 上,这增加了运维的复杂性。

通过 ODP/obproxy:ODP/obproxy 通常与负载均衡设备(如 F5)配合使用,可以自动将请求分散到多个 OBProxy 实例,从而实现负载均衡,简化运维工作。

连接稳定性:

直连 OBServer:由于 OBServer 集群规模庞大,机器和软件出现问题的概率较大,直连方式容易导致客户端连接不稳定。

通过 ODP/obproxy:ODP/obproxy 通过连接池管理和智能路由,能够提供更稳定的连接体验,减少客户端因 OBServer 故障而导致的断连问题。

用户体验:

直连 OBServer:用户需要手动管理连接和数据路由,使用体验较差。

通过 ODP/obproxy:ODP/obproxy 可以实现像使用单机数据库一样的体验,用户无需关心底层的分布式架构,简化了使用和管理过程。

生产环境为何通常建议走 ODP

在生产环境中,通常建议通过 ODP/obproxy 连接 OceanBase 数据库,主要原因如下:

连接稳定性:

ODP/obproxy 通过连接池管理和智能路由,能够有效应对 OBServer 的故障和维护,保证客户端连接的稳定性,减少业务中断风险。

数据路由优化:

ODP/obproxy 可以获取到 OBServer 中的数据分布信息,将 SQL 语句高效转发到数据所在的 OBServer,提高查询和写入的执行效率。

负载均衡:

通过 ODP/obproxy 和负载均衡设备的配合,可以自动将请求分散到多个 OBProxy 实例,实现负载均衡,提高系统的整体性能和可用性。

简化运维和管理:

ODP/obproxy 屏蔽了 OBServer 分布式集群的复杂性,简化了运维和管理过程,减少了因 OBServer 故障导致的连接中断和业务影响。

用户体验:

通过 ODP/obproxy,用户可以像使用单机数据库一样使用分布式数据库,无需关心底层的分布式架构,降低了使用门槛和复杂性

打卡

直连 Observer 与通过 ODP/obproxy 连接的差异及生产环境建议

在 OceanBase 数据库架构中,客户端可以通过两种方式访问数据:直接连接到 OBServer 节点(直连 Observer)通过 OceanBase Database Proxy(ODP,又称 OBProxy)代理连接。两者在连接模型、性能、高可用性和运维管理方面存在显著差异。

一、核心差异对比

对比维度 直连 Observer 通过 ODP 连接
连接模型 客户端与单个 OBServer 建立一对一物理连接 客户端 ↔ ODP 为 M:N 映射,ODP 维护多个后端连接池
SQL 路由能力 无法自动路由,需应用自行判断数据位置 支持智能路由,根据分区信息、副本位置、负载情况选择最优节点
读写分离支持 不支持,需手动配置连接字符串 支持基于策略的读写分离,自动将读请求转发至只读副本
高可用性 单点故障风险高,节点宕机导致连接中断 屏蔽后端异常,OBServer 故障时自动切换至健康节点,对应用透明
连接复用与管理 每个客户端连接独占一个服务端连接,资源消耗大 支持连接池化,高效复用后端连接,降低 OBServer 连接压力
会话状态一致性 状态完全由 OBServer 维护 ODP 采用基于版本号的增量同步机制,维持各 OBServer 上的会话状态一致
协议兼容性 使用标准 MySQL 协议 兼容 MySQL 协议,并默认使用 OceanBase 专有协议增强可靠性(如 CRC 校验)

:pushpin: 参考依据

二、ODP 的关键优势详解

1. 最佳路由(Best Routing)

ODP 能够解析 SQL 请求所涉及的数据分布(如分区表、主键、租户等),结合以下因素进行精准路由:

  • 数据副本的实际物理位置
  • 用户配置的读写分离策略
  • 多地部署下的地理链路延迟
  • 各 OBServer 的实时负载与健康状态

这确保了请求尽可能被发送到本地副本(local plan),减少跨节点通信开销,提升整体性能。

:link: ODP 性能分析 → 路由准确性

2. 高性能转发

ODP 采用多线程异步框架和透明流式转发技术,在保证低延迟的同时最小化自身资源消耗。它完整兼容 MySQL 协议,并支持 OceanBase 自研协议,实现高效、可靠的 SQL 转发。

3. 高可用保障

ODP 是 OceanBase 高可用体系的重要组成部分,具备以下能力:

  • 在 OBServer 节点发生宕机、升级或重启时,保持客户端连接不断开
  • 自动探测并绕过异常节点,快速切换至健康副本
  • 支持 SSL 加密传输,满足安全合规需求

:link: 连接管理

4. 易于运维与扩展

  • ODP 本身无状态,支持无限水平扩展,可通过负载均衡部署多个实例
  • 提供丰富的内部命令用于监控运行状态(如 show proxysession, show processlist
  • 支持同时接入多个 OceanBase 集群,便于多租户或多环境统一管理

三、生产环境为何推荐使用 ODP?

尽管直连 Observer 在测试或简单场景下可行,但在生产环境中强烈建议通过 ODP 接入,主要原因如下:

:white_check_mark: 1. 屏蔽分布式复杂性

OceanBase 是分布式数据库,数据分布在多个节点上。若直连,应用必须感知数据分布、副本角色、节点状态等信息,增加了开发和维护成本。而 ODP 作为“智能网关”,完全隐藏了这些复杂性。

:white_check_mark: 2. 提升系统稳定性与容灾能力

当某个 OBServer 出现故障时,直连模式会导致连接中断和事务失败;而 ODP 可自动重试或切换到其他副本,保障业务连续性。

:white_check_mark: 3. 优化性能表现

通过最佳路由和连接池复用,ODP 显著减少了网络跳数和连接建立开销,尤其在高并发场景下可大幅降低响应时间。

:white_check_mark: 4. 支持灵活的流量调度

支持基于规则的读写分离、LDC(Local Data Center)、Primary Zone 等高级路由策略,满足金融级容灾和异地多活架构需求。

:white_check_mark: 5. 统一入口,便于安全管理与审计

所有流量经过 ODP,便于实施访问控制、SQL 审计、限流熔断等安全策略。

四、典型部署架构

+----------------+     +------------------+
|   Application  |---->|    Load Balancer |
+----------------+     +------------------+
                             |
                      +------------------+
                      |   ODP Cluster    |  ← 可水平扩展
                      +------------------+
                             |
                   +-----------------------+
                   | OceanBase Cluster     |
                   | (Multiple OBServer)   |
                   +-----------------------+

:link: OceanBase 数据库整体架构 → 接入层