- 直连 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 校验) |
参考依据:
二、ODP 的关键优势详解
1. 最佳路由(Best Routing)
ODP 能够解析 SQL 请求所涉及的数据分布(如分区表、主键、租户等),结合以下因素进行精准路由:
- 数据副本的实际物理位置
- 用户配置的读写分离策略
- 多地部署下的地理链路延迟
- 各 OBServer 的实时负载与健康状态
这确保了请求尽可能被发送到本地副本(local plan),减少跨节点通信开销,提升整体性能。
2. 高性能转发
ODP 采用多线程异步框架和透明流式转发技术,在保证低延迟的同时最小化自身资源消耗。它完整兼容 MySQL 协议,并支持 OceanBase 自研协议,实现高效、可靠的 SQL 转发。
3. 高可用保障
ODP 是 OceanBase 高可用体系的重要组成部分,具备以下能力:
- 在 OBServer 节点发生宕机、升级或重启时,保持客户端连接不断开
- 自动探测并绕过异常节点,快速切换至健康副本
- 支持 SSL 加密传输,满足安全合规需求
4. 易于运维与扩展
- ODP 本身无状态,支持无限水平扩展,可通过负载均衡部署多个实例
- 提供丰富的内部命令用于监控运行状态(如
show proxysession
,show processlist
) - 支持同时接入多个 OceanBase 集群,便于多租户或多环境统一管理
三、生产环境为何推荐使用 ODP?
尽管直连 Observer 在测试或简单场景下可行,但在生产环境中强烈建议通过 ODP 接入,主要原因如下:
1. 屏蔽分布式复杂性
OceanBase 是分布式数据库,数据分布在多个节点上。若直连,应用必须感知数据分布、副本角色、节点状态等信息,增加了开发和维护成本。而 ODP 作为“智能网关”,完全隐藏了这些复杂性。
2. 提升系统稳定性与容灾能力
当某个 OBServer 出现故障时,直连模式会导致连接中断和事务失败;而 ODP 可自动重试或切换到其他副本,保障业务连续性。
3. 优化性能表现
通过最佳路由和连接池复用,ODP 显著减少了网络跳数和连接建立开销,尤其在高并发场景下可大幅降低响应时间。
4. 支持灵活的流量调度
支持基于规则的读写分离、LDC(Local Data Center)、Primary Zone 等高级路由策略,满足金融级容灾和异地多活架构需求。
5. 统一入口,便于安全管理与审计
所有流量经过 ODP,便于实施访问控制、SQL 审计、限流熔断等安全策略。
四、典型部署架构
+----------------+ +------------------+
| Application |---->| Load Balancer |
+----------------+ +------------------+
|
+------------------+
| ODP Cluster | ← 可水平扩展
+------------------+
|
+-----------------------+
| OceanBase Cluster |
| (Multiple OBServer) |
+-----------------------+