OceanBase数据库代理ODP

OceanBase 数据库作为一款分布式数据库,数据天然分布于多个节点上。为了屏蔽分布式数据库给应用程序带来的复杂性,使得应用程序访问 OceanBase 数据库像访问单机数据库一样简单,从架构上引入了 ODP,全称是 OceanBase 数据库代理(OceanBase Database Proxy,又称为 OBProxy),ODP 是 OceanBase 专用的反向服务代理,以解决 OceanBase 数据库的 SQL 路由和 容灾问题。OceanBase Database Proxy(简称 ODP )是 OceanBase 数据库专用的代理服务器。OceanBase 数据库的用户数据以多副本的形式存放在各个 OBServer 节点上,ODP 接收用户发出的 SQL 请求,并将 SQL 请求转发至最佳目标 OBServer,最后将执行结果返回给用户。

ODP 作为数据链路上的核心组件,存在多种部署形态:

  • OBServer 端部署:ODP 与 OBServer 部署于同一台机器上,当压力大时可能存在资源竞争,排查问题比较困难。常见于私有云场景。

  • ODP 独立部署:ODP 作为独立集群部署,减少了 ODP 与 OBServer 的相互影响。常见于公有云场景。

  • 客户端部署:在 APPServer 容器旁再运行一个容器运行 ODP,两者位于同一个 Pod 中,可进行独立升级、发布、运维等。该部署形态对控制面要求较高,实际使用较少。

前两种部署形态,APPServer 访问 ODP 需要经过一层负载均衡组件,负载均衡组件负责 ODP 的高可用和负载均衡。例如 F5 将请求分散到多台 ODP 上。

在产品形态上,ODP 除了代理形态,还有 SDK 形态。SDK 形态以库形式集成到业务代码中,相比代理模式,访问链路上少一跳,性能更好,排查问题链路更短。但存在与业务代码耦合度更高,互相影响,且 ODP SDK 升级时需要业务重启等缺点。

引入 ODP 后,OceanBase 的数据链路为 APPServer <-> OBProxy <-> OBServer。APPServer 通过数据库驱动连接 ODP 发送请求,由于 OceanBase 数据库的分布式架构,用户数据以多日志流多副本的方式分布于多个 OBServer 上,ODP 将用户请求转发到最合适的 OBServer 上执行,并将执行结果返回用户。每个 OBServer 也有路由转发的功能,如果发现请求不能在当前节点执行,则会转发请求到正确的 OBServer,该场景需要进行一次远程执行,对请求的 RT(Response Time) 会有一定影响。

ODP 是 OceanBase 数据库的反向代理层,提供了从用户端到数据库端的路由选择和容灾功能,屏蔽应用程序对分布式数据库的感知。OBServer 包含完整的 SQL 引擎、存储引擎和分布式事务引擎,负责解析 SQL 生成物理执行计划并执行,及事务提交时通过 Paxos 协议达成多数派提交,提供高性能、高可用、高扩展的数据库服务。ODP 和 OBServer 采用松耦合的方式,允许 ODP 上的路由信息更新不及时导致错误的路由选择,OBServer 内部会再转发一次,返回结果时通知 ODP 更新路由信息。

如上所述,应用层将用户请求发送到代理服务 ODP,经过 ODP 的路由后,发送到实际服务数据的数据库节点 OBServer,执行结果沿着反向路径返回给应用层。整个链路中的组件通过不同的方式来达到高可用能力。

图中 APP 是我们的业务程序,APP 前面有三台 ODP(ODP 的进程名叫做 obproxy),在实际部署中,ODP 和 APP 之间一般会有一个负载均衡(如:F5 )将请求分散到多台 ODP 上面,ODP 下面是 OBServer 节点,图中有 6 个 OBServer 节点。

需要使用 ODP 的原因如下:

  • 连接管理:OceanBase 集群规模庞大,机器、软件出现问题或者本身运维机器上线、下线概率较大,如果直连 OBServer 节点,遇到上面的情况客户端就会发生断连。ODP 屏蔽了 OBServer 节点本身分布式的复杂性,客户连接 ODP,ODP 可以保证连接的稳定性,自身对 OBServer 节点的复杂状态进行处理。

  • 数据路由:ODP 可以获取到 OBServer 节点中的数据分布信息,可以将用户 SQL 高效转发到数据所在机器,执行效率更高。如:表 t1 数据在图中 P1 内,表 t2 数据在图中 P2 内,表 t3 数据在图中 P3 内。对于 insert into t1 语句 ODP 可以将 SQL 转发到 ZONE_2 中含有 P1 主副本的机器上。对于 update t2 语句 ODP 可以将 SQL 转发到 ZONE_1 中含有 P2 主副本的机器上。

ODP 可以实现像使用单机数据库一样使用分布式数据库。

ODP 特性

作为 OceanBase 数据库的关键组件,ODP 具有如下特性:

  • 高性能转发

    ODP 完整兼容 MySQL 协议,并支持 OceanBase 自研协议,采用多线程异步框架和透明流式转发的设计,保证了数据的高性能转发,同时确保了自身对机器资源的最小消耗。

  • 最佳路由

    ODP 会充分考虑用户请求涉及的副本位置、用户配置的读写分离路由策略、OceanBase 数据库多地部署的最优链路,以及 OceanBase 数据库各机器的状态及负载情况,将用户的请求路由到最佳的 OBServer 节点上,最大程度的保证了 OceanBase 数据库整体的高性能运转。

  • 连接管理

    针对一个客户端的物理连接,ODP 维持自身到后端多个 OBServer 节点的连接,采用基于版本号的增量同步方案维持了每个 OBServer 节点连接的会话状态,保证了客户端高效访问各个 OBServer 节点。

  • 专有协议

    ODP 与 OBServer 节点默认采用了 OceanBase 专有协议,如增加报文的 CRC 校验保证与 OBServer 节点链路的正确性,增强传输协议以支持 Oracle 兼容性的数据类型和交互模型。

  • 安全可信

    ODP 支持使用 SSL 访问数据,并和 MySQL 协议做了兼容,满足客户安全需求。

  • 易运维

    ODP 本身无状态支持无限水平扩展,支持同时访问多个 OceanBase 集群。可以通过丰富的内部命令实现对自身状态的实时监控,提供极大的运维便利性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值