首批通过分布式安全可靠测评,为关键业务系统打造
数据路由影响因素
更新时间:2026-04-14 17:41:09
在介绍 ODP 的路由原理前,首先讨论下路由需要考虑的影响因素,方便更好地理解后面的内容,以及评价一个路由功能的好坏。本文将从功能、性能和高可用三个因素展开介绍。
功能因素
本节以 Prepared Statements 功能为例说明功能对路由的影响。Prepared Statements 执行主要有以下两个步骤:
执行 PREPARE 操作,如发送 SQL
select * from t1 where c1 = ?执行 EXECUTE 操作,传递 select 语句使用的数据,并执行 select
步骤 2 是依赖于步骤 1 的,假设执行情况如下图所示,当 OBServer2 节点收到步骤 2( EXECUTE)的请求后,并不知道步骤 1(PREPARE)请求的内容,这时,OBServer2 节点就会报错(优雅做法)或断连接(粗暴做法)。

对于这种问题,常见的解决办法有两种。
方法一:记录 PREPARE 路由到的节点 OBServer1,EXECUTE 请求继续路由到 OBServer1 节点;该方法实现简单,但无法发挥分布式系统的优势。
方法二:在执行 EXECUTE 前,将 PREPARE 的状态同步给 OBServer2 节点,参考 会话状态同步;该方法需要 ODP 同步连接状态,实现复杂,但可以利用分布式系统的优势,目前 ODP 正是采用该方法。

性能因素
高性能是 OceanBase 数据库的重要特性,路由对性能的影响主要是延迟,即网络通信开销。ODP 通过感知数据分布和机器地理位置降低网络通信开销,提高整体性能。
数据分布
数据分布主要影响执行链路的跳数,最佳情况是 ODP 路由时直接命中数据所在的节点。此处以 SQL 语句
select c1 from test为例说明数据分布对性能的影响。如下图所示,t1 表的数据分布在 OBServer1 节点上面,路由方式 1 直接路由到 OBServer1 节点,效率最高;路由方式 2 将 SQL 语句发给了无 t1 表数据的 OBServer2 节点,OBServer2 节点再进行路由转发给 OBServer1 节点,相比方式 1 而言性能变差。为了实现路由方式 1 的路由,ODP 需要感知 SQL 和表数据分布。
机器地理位置
机器地理位置主要影响网络延迟,当选择了一个远端节点后,SQL 执行会变慢,有时网络延迟的时间比数据库执行时间要大很多。因此,对于不同地理位置的机器,ODP 选择优先级是:同机房 > 同城不同机房 > 不同城市。
高可用因素
高可用因素是指 OceanBase 数据库对机器故障有容忍能力,让故障对应用透明无感知。高可用涉及故障探测、黑名单机制、重试逻辑等内容。ODP 发现 OBServer 节点故障后,路由时会排除故障节点,选择健康节点,对于正在执行的 SQL 也有一定的重试能力。
有关高可用的内容请参考 高可用机制。