OceanBase Database Proxy(简称ODP)是OceanBase数据库专用的代理服务器。OceanBase数据库的用户数据以多副本的形式存放在各个OBserver上,ODP接收用户发出的SQL请求,并将SQL请求转发至最佳目标observer,最后将执行结果返回给用户。
ODP具有以下特征:
- 高性能转发
- 最佳路由
- 连接管理
- 专有协议
-
易运维
WXWorkLocalPro_174037602542.png
最佳路由
ODP充分考虑用户请求涉及的副本位置、用户配置的读写分离路由策略、OceanBase多地部署的最优链路,以及OceanBase 各机器的状态以及负载情况,将用户的请求路由到最佳的OBserver,最大程度保证了OceanBase 整体的高性能运转。
路由策略:
写请求:写请求路由到readwrite zone 的主副本
读请求:
- 强一致性读(默认策略,需要读取partition主的数据)
- 弱一致性读:备据衡器策略(默认)、备优先读策略、读写分离策略。
OBproxy强一致性读路由策略 - OceanBase里默认读是强一致性读,即写后读立即可见(read after write),强一致性读语句,obproxy会优先sql路由到访问表的分区的主副本节点上。
- 如果sql访问了两个表,会依据第一个表及其条件判断出该分区主副本节点,如果得不到,就随机发,所以SQL里多表连接时,表的前后顺序对路由策略是有影响的,间接对性能有影响。
- 如果要判断的表是分区表,会看条件是否是分区键等值条件;如果不是,则不能确定是哪个分区,就随机发到该表的所有分区所在的节点任意一个。
- 如果开启事务了,则事务里开事务的SQL的路由节点会作为事务后面其他sql路由的目标节点,直到事务结束(提交或者回滚)为止。
OBproxy弱一致性读路由策略 - 弱一致性读不要求写后立即可见,弱一致性读可以路由到分区的主副本和备副本节点,通常有三副本所在节点可以选。
- 开启弱一致读后,如果observer 和obproxy都开启了LDC(逻辑数据中心路由)特性,那么弱一致性读语句的路由策略就是优先路由到同一个机房或者同一个region的状态不是合并中的节点;其次是合并中的节点,最后是其他region的不在合并的或在合并的节点。
高性能转发
ODP完整兼容MySQL协议,并支持OceanBase自研协议,采用多线程异步框架和透明流式转发的设计,保证了数据的高性能转发,同时确保了ODP对机器资源的最小消耗。
专有协议
ODP与observer默认采用了OceanBase专有协议,如增加报文的CRC校验保证与observer链路的正确性,增强传输协议以及支持oracle兼容性的数据类型和交互模型。
连接管理
针对一个客户端的物理连接,ODP维持自身到后端多ODP,采用对会话变量进行版本管理,采用增量同步方案保障和每个observer连接的会话一致性,保证了客户端高效访问各个observer。
1、在observer宕机/升级/重启时,客户端与obproxy的连接不会断开,obproxy可以迅速切换到正常的server上,对应用透明。
2、obproxy支持用户通过同一个obproxy访问多个OceanBase集群。
3、server session对于每个client session 独占。
4、同一个client session 对应server session状态保持相同(session变量同步 )。
易运维
无状态的ODP支持无限水平扩展,支持同时访问多个OceanBase集群,可以通过丰富的内部命令对ODP状态进行实时监控,这使得运维简单便利。
- 周期性汇报统计到OCP。实现了语句级别,事务级别,session级别,obproxy级别的各种统计。
- xflush日志监控
- sql audi功能
- 实现了大量内部命令来实现远程监控、查询和运维。