AP 场景架构设计(一) :OceanBase 读写分离策略解析

news2025/4/21 8:07:49
说明:本文内容对应的是 OceanBase 社区版,架构部分不涉及企业版的仲裁副本功能。OceanBase社区版和企业版的能力区别详见: 官网链接。

概述​

当两种类型的业务共同运行在同一个数据库集群上时,这对数据库的配置等条件提出了较高的要求。为此,我们通常会采取读写分离的策略,将部分读请求重定向到Follower副本上,以此来减轻复杂分析计算对资源的占用,避免影响在线业务的响应速度。

将数据库的查询与写入操作分离的策略,即数据库的读写分离方案,可以减少读写操作间的干扰并提升资源的使用效率。在OceanBase这类的HTAP数据库中,读写分离的应用极为广泛,其中只读业务场景涵盖了BI查询、大数据ETL数据提取以及缓存数据的拉取等。

OceanBase 数据库天然支持读写分离的功能,即通过 OBProxy 代理服务和修改 OBServer 的配置即可实现业务的读写分离策略。

OceanBase 数据库在读取数据时,提供了两种一致性级别:强一致性和弱一致性。强一致性是指请求路由给主副本读取最新数据;弱一致性是指请求优先路由给备副本,不要求读取最新数据。

OceanBase 通过应用侧为执行的 SQL 添加 SQL Hint 来显性开启弱一致性读就可以实现基于注释的读写分离功能,同时也衍生出如下三种常用的读写分离策略,用户还可以根据实际情况,对读写分离策略进行灵活的配置。

备优先读(弱一致性读)​

  1. 无论从哪个 OBproxy 链接 OB 集群,通常单表 SQL 最后都会被路由到该表 Leader 副本所在的节点。这种默认的路由规则叫强一致性读。
  2. 可以通过修改 OBproxy 的路由策略为 follower_first ,将业务读流量指定到该 OBProxy 从而保证读请求优先访问 Follower 副本,对应 OBProxy 默认会将请求路由到本地 Follower 副本。如果本地该数据的副本为 Leader 副本,则会自动优先路由到同 Region 中其他 IDC 的 Follower 副本。综上,备优先的含义就是:就近读取 Follower 副本。
  3. 配置方法详见这篇 官方文档,这里不再细说。

路由策略示意图:

image.png

优点:配置相对简单,只修改 OBProxy 配置,无需修改 OBserver 配置;读流量均摊到全部 Follower 副本上。

缺点:如果本地副本是 Leader 副本,读请求则会跨 IDC(zone) 访问;在不调整副本 Leader 的情况下,同 zone 或同 server 下不同副本的 Leader 和 Follower 可能共存,不能完全实现 zone 级别或者 server 级别的读写隔离。

适用场景:备优先读(弱一致性读)通常用于对读写分离要求不高,且读请求较少的场景。如果有较多的读请求,为了不影响 Leader 副本的读写,推荐使用只读 zone 或者只读副本。

只读 zone​

  1. 设置 Primary Zone 为 zone1,zone2;zone3,注意这里 zone1 和 zone2 之间是逗号,zone2 和 zone3 之间是分号,表示 zone1 和 zone2 会被设置为 primary zone,因此所有的 Leader 副本都被迁移到了 zone1 和 zone2 中,zone3 默认情况下都为 Follower 副本,那么 zone3 的副本就可以只给弱一致性读的分析计算类SQL提供服务。
  2. 需要弱一致性读的 SQL,连接设置了弱读的 OBProxy;其余 SQL 连接正常 OBProxy。
  3. 通过连接弱读的 OBProxy 的所有 SQL,会基于 LDC 路由策略,以及 FOLLOWER_FIRST 策略,自动访问本地的 Follower 副本。
  4. 配置方法还是详见这篇 官方文档,这里不再细说。

路由策略示意图:

image.png

优点:通过设置只读 zone 实现了 zone 级别隔离读写请求,隔离性相比备优先读的方案更高。

缺点:需要人工设置 Primary Zone,写流量会被集中打到 zone1 和 zone2。

适用场景:适用于读写比较均衡的场景。

只读副本​

OceanBase 中除了默认的全功能性副本之外,还有一种只读型副本,只读型副本的名称为 READONLY,简称 R 副本。区别于全功能副本,只读副本提供读的能力,不提供写的能力,只能作为日志流的 Follower 副本,不参与选举及日志的投票,不能当选为日志流的 Leader 副本。

利用只读副本,我们就可以专门配置一个 zone,只放只读型副本,专门提供给 OLAP 分析计算类请求,并且只读副本出现故障,并不会影响主集群服务。

  1. 主集群正常提供服务。
  2. AP 类请求走独立的 OBProxy,访问只读型副本。
  3. 配置方法略,在创建租户时会要求选择各个 zone 中的副本类型,在对应 zone 中选择只对副本就好了。这里需要注意的一点是:全功能副本支持随时在线动态调整为只读副本。

image.png

路由策略示意图:

1730952460

优点:OLAP 与 OLTP 的请求可以做到完全隔离,互相不受任何影响。

缺点:需要为只读型副本提供更多资源。

适用场景:业务读请求远大于写请求,且大部分读请求对实时性要求不高,或者有大量的 AP 分析场景。

只读备集群(备租户)​

上面这些都是三副本或者五副本架构的读写分离方案。如果对可用性要求不高,但比较看重成本,可以考虑为 OB 集群搭建一个备集群,可以是单副本(或者三副本),让只读业务只访问备集群。

注意:备只能读不能写,并且这个读必须是弱一致性读。

物理备库介绍详见:基于日志异步复制的物理备库解决方案。

创建备租户,只需要在通过 OCP 创建租户时,选择租户类型为 “备租户” 并设置对应的主租户即可,十分简单,这里不再细说。

总结​

综上所述,OceanBase 的读写分离有三种方案:

  • 备优先读:三副本或者五副本架构下,个别 SQL 通过弱一致性读 HINT 或者会话设置,就近只读备副本(上面的 “备优先读” 和 “只读 zone” 都可以统一归为这种方案)。
  • 只读副本:三副本或五副本架构下,额外增加一个或多个只读副本,为只读副本配置单独的 OBProxy ,只读业务走这个 OBProxy 专门访问只读副本。
  • 只读备集群:搭建一个备集群,可以是单副本或者三副本。只读业务只访问备集群。

OceanBase 读写分离方案的优势有两点:

  • 不用担心误写 “备副本或只读副本”,因为它不支持写,写操作会被路由到主副本。
  • 不用担心 “备副本或只读副本” 发生故障,因为 OBProxy 会就近路由到其他备副本。

最后,用一位用户对 OceanBase 读写分离的比较中肯的评价,作为读写分离这一部分的结尾:“用惯了 Oracle 的 ADG 或者 MySQL 的主从读写分离,可能会觉得 OB 的读写分离方案看上去有一点儿复杂。这个时候,就需要转变观念了,读写分离方案严格的说要考虑各种异常情况,OB 把这些异常都做到内部去了,但对用户使用是极其方便的,对运维的工作也是很友好的。”

推荐阅读​

OceanBase 如何实现读写分离

OceanBase 读写分离方案全攻略

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2322706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 大视界 -- Java 大数据在智能金融区块链跨境支付与结算中的应用(154)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

手把手教你在linux服务器部署deepseek,打造专属自己的数据库知识库

第一步:安装Ollama 打开官方网址:https://ollama.com/download/linux 下载Ollama linux版本 复制命令到linux操作系统执行 [rootpostgresql ~]# curl -fsSL https://ollama.com/install.sh | sh在Service中增加下面两行 [rootlocalhost ~]# vi /etc/…

C++ 继承:面向对象编程的核心概念(一)

文章目录 引言1. 继承的基本知识1.1 继承的关键词的区别1.2 继承类模版 2. 基类和派生类间的转换3. 继承中的作用域4. 派生类的默认成员函数4.1 默认成员函数的规则4.2 自己实现成员函数4.3 实现一个不能被继承的基类(基本不用) 引言 在C中,…

蓝桥杯 临时抱佛脚 之 二分答案法与相关题目

二分答案法(利用二分法查找区间的左右端点) (1)估计 最终答案可能得范围 是什么 (2)分析 问题的答案 和 给定条件 之间的单调性,大部分时候只需要用到 自然智慧 (3)建…

【算法day22】两数相除——给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。

29. 两数相除 给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 &#x…

关于服务器只能访问localhost:8111地址,局域网不能访问的问题

一、问题来源: 服务器是使用的阿里云的服务器,服务器端的8111端口没有设置任何别的限制,但是在阿里云服务器端并没有设置相应的tcp连接8111端口。 二、解决办法: 1、使用阿里云初始化好的端口;2、配置新的阿里云端口…

基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 ADMM算法 4.2 最大似然ML检测算法 4.3 最小均方误差(MMSE)检测算法 4.4 迫零(ZF)检测算法 4.5 OCD_MMSE 检测算法 4.6 LAMA检测算法 …

Linux 配置时间服务器

一、同步阿里云服务器时间 服务端设置 1.检查chrony服务是否安装,设置chrony开机自启,查看chrony服务状态 [rootnode1-server ~]# rpm -q chrony # rpm -q 用于查看包是否安装 chrony-4.3-1.el9.x86_64 [rootnode1-server ~]# systemctl enable --n…

可视化web组态开发工具

BY组态是一款功能强大的基于Web的可视化组态编辑器,采用标准HTML5技术,基于B/S架构进行开发,支持WEB端呈现,支持在浏览器端完成便捷的人机交互,简单的拖拽即可完成可视化页面的设计。可快速构建和部署可扩展的SCADA、H…

C++笔记-模板初阶,string(上)

一.模板初阶 1.泛型编程 以往我们要交换不同类型的两个数据就要写不同类型的交换函数,这是使用函数重载虽然可以实现,但是有以下几个不好的地方: 1.重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时&a…

关于cmd中出现无法识别某某指令的问题

今天来解决以下这个比较常见的问题,安装各种软件都可能会发生,一般是安装时没勾选注册环境变量,导致cmd无法识别该指令。例如mysql,git等,一般初学者可能不太清楚。 解决这类问题最主要的是了解环境变量的概念&#x…

绿联NAS安装内网穿透实现无公网IP也能用手机平板远程访问经验分享

文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 大家好,今天给大家带来一个超级炫酷的技能——如何在绿联NAS上快速安装cpolar内网穿透工具。想象一下,即使没有公网IP,你也能随时随地远程访问自己…

d9-326

目录 一、添加逗号 二、爬楼梯 三、扑克牌顺子 添加逗号_牛客题霸_牛客网 (nowcoder.com) 一、添加逗号 没啥注意读题就是 注意逗号是从后往前加,第一位如果是3的倍数不需要加逗号,备注里面才是需要看的 count计数 是三的倍数就加逗号&#xff0c…

Win11+VS2022+CGAL5.6配置

1. CGAL库简介 CGAL(Computational Geometry Algorithms Library)是一个开源的计算几何算法库,主要用于处理几何问题和相关算法的实现。它提供了丰富的几何数据结构和高效算法,覆盖点、线、多边形、曲面等基本几何对象的表示与操…

【Linux】MAC帧

目录 一、MAC帧 (一)IP地址和MAC地址 (二)MAC帧格式 (三)MTU对IP协议的影响、 (四)MTU对UDP协议的影响 (五)MTU对TCP协议的影响 二、以太网协议 &…

Codeforces Round 1013 (Div. 3)(A-F)

题目链接&#xff1a;Dashboard - Codeforces Round 1013 (Div. 3) - Codeforces A. Olympiad Date 思路 找到第一个位置能凑齐01032025的位置 代码 void solve(){int n;cin>>n;vi a(n10);int id0;map<int,int> mp;for(int i1;i<n;i){cin>>a[i];mp[a…

Vite 与 Nuxt 深度对比分析

一、核心定位差异 二、核心功能对比 渲染能力 Vite&#xff1a;默认仅支持客户端渲染&#xff08;CSR&#xff09;&#xff0c;需通过插件&#xff08;如vite-plugin-ssr&#xff09;实现 SSR/SSG&#xff0c;但配置灵活 Nuxt&#xff1a;原生支持 SSR&#xff08;服务端渲…

通过一个led点灯的demo来熟悉openharmony驱动编写的过程(附带hdf详细调用过程)

概述 本应用程序(led_rgb)是在上实现直接通过消息机制与内核驱动进行交互&#xff0c;设置RGB三色灯的亮灯行为。我从网上随便找了个demo测试了一下&#xff0c;坑了三天…&#xff0c;整个状态如下图&#xff0c;同时也迫使我深度梳理了一下整个流程框架。直到绝望的时候&…

pycharm2024.1.1版本_jihuo

目录 前置&#xff1a; 步骤&#xff1a; step one 下载软件 step two 卸载旧版本 1 卸载软件 2 清除残余 step three 下载补丁 step four 安装2024.1.1版本软件 step five 安装补丁 1 找位置放补丁 2 自动设置环境变量 step six 输入jihuo码 前置&#xff1a; 之…

目标检测20年(四)——最终章

欢迎各位读者尽情阅读前三篇文献解读。这一篇将会介绍文献的第五部分&#xff1a;目标检测近些年的新技术发展以及第六部分&#xff1a;总结与未来展望。这也是本篇论文解读的最后一篇文章。 目录 五、目标检测最新进展 5.1 不采用滑动窗口的检测 5.2 旋转和尺度变化的鲁棒性…