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

说明:本文内容对应的是 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.rhkb.cn/news/41382.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CPU架构和微架构

CPU架构(CPU Architecture) CPU架构是指处理器的整体设计框架,定义了处理器的指令集、寄存器、内存管理方式等。它是处理器设计的顶层规范,决定了软件如何与硬件交互。 主要特点: 指令集架构(ISA, Instr…

6.4 模拟专题:LeetCode1419.数青蛙

1.题目链接:数青蛙 - LeetCode 2.题目描述 给定一个字符串 croakOfFrogs,表示青蛙的鸣叫声序列。每个青蛙必须按顺序发出完整的 “croak” 字符,且多只青蛙可以同时鸣叫。要求计算最少需要多少只青蛙才能完成该字符串,若无法完成…

Linux 搭建dns主域解析,和反向解析

#!/bin/bash # DNS主域名服务 # user li 20250325# 检查当前用户是否为root用户 # 因为配置DNS服务通常需要较高的权限,只有root用户才能进行一些关键操作 if [ "$USER" ! "root" ]; then# 如果不是root用户,输出错误信息echo "…

Leetcode 二进制求和

java solution class Solution {public String addBinary(String a, String b) {StringBuilder result new StringBuilder();//首先设置2个指针, 从右往左处理int i a.length() - 1;int j b.length() - 1;int carry 0; //设置进位标志位//从2个字符串的末尾向前遍历while(…

【NLP 49、提示工程 prompt engineering】

目录 一、基本介绍 语言模型生成文本的基本特点 提示工程 prompt engineering 提示工程的优势 使用注意事项 ① 安全问题 ② 可信度问题 ③ 时效性与专业性 二、应用场景 能 ≠ 适合 应用场景 —— 百科知识 应用场景 —— 写文案 应用场景 —— 解释 / 编写…

【NLP 43、文本生成任务】

目录 一、生成式任务 二、seq2seq任务 1.模型结构 2.工作原理 3.局限性 三、自回归语言模型训练 Decoder only 四、自回归模型结构:文本生成任务 —— Embedding LSTM 代码示例 🚀 数据文件 代码流程 Ⅰ、模型初始化 Ⅱ、前向计算 代码运行流程 Ⅲ、加载…

vscode 通过Remote-ssh远程连接服务器报错 could not establish connection to ubuntu

vscode 通过Remote-ssh插件远程连接服务器报错 could not establish connection to ubuntu,并且出现下面的错误打印: [21:00:57.307] Log Level: 2 [21:00:57.350] SSH Resolver called for "ssh-remoteubuntu", attempt 1 [21:00:57.359] r…

Linux之编辑器vim命令

vi/vim命令: 终端下编辑文件的首选工具,号称编辑器之神 基本上分为三种模式,分别是 命令模式(command mode)>输入vi的命令和快捷键,默认打开文件的时候的模式插入模式(insert mode&#x…

第一天学爬虫

阅读提示:我今天才开始尝试爬虫,写的不好请见谅。 一、准备工具 requests库:发送HTTP请求并获取网页内容。BeautifulSoup库:解析HTML页面并提取数据。pandas库:保存抓取到的数据到CSV文件中。 二、爬取步骤 发送请求…

MySQL实战(尚硅谷)

要求 代码 # 准备数据 CREATE DATABASE IF NOT EXISTS company;USE company;CREATE TABLE IF NOT EXISTS employees(employee_id INT PRIMARY KEY,first_name VARCHAR(50),last_name VARCHAR(50),department_id INT );DESC employees;CREATE TABLE IF NOT EXISTS departments…

windows下安装sublime

sublime4 alpha 4098 版本 下载 可以根据待破解的版本选择下载 https://www.sublimetext.com/dev crack alpha4098 的licence 在----- BEGIN LICENSE ----- TwitterInc 200 User License EA7E-890007 1D77F72E 390CDD93 4DCBA022 FAF60790 61AA12C0 A37081C5 D0316412 4584D…

激光线检测算法的FPGA实现

激光线检测算法的FPGA实现 1. 常见的激光线检测算法 激光线检测中常用的三种算法 MAX(最大值法)、THRESH(阈值法)、COG(灰度重心法) 分别具有以下特点和工作原理: 1.1 MAX(最大值法…

小样本微调大模型

一、环境搭建 conda create -n dseek python=3.10 conda activate dseek pip install bitsandbytes Pip install numpy python -m pip install --upgrade pip setuptools wheel 安装cuda,torch,Unsloth, huggingface,wandb等,见前述章节; 微调服务器配置:单机笔记本显卡4…

深入理解指针(2)(C语言版)

文章目录 前言一、数组名的理解二、使用指针访问数组三、一维数组传参的本质四、冒泡排序五、二级指针六、指针数组七、指针数组模拟二维数组总结 前言 在上一篇文章中,我们初步了解了指针的基本概念和用法。今天,我们将继续深入探索指针在数组、函数传…

高效内存管理:x86-64架构中的分页机制

在 x86-64 架构的世界里,内存分页机制扮演着举足轻重的角色,它就像是一座桥梁,连接着虚拟地址与物理地址。简单来说,内存分页机制就是将线性地址(也就是虚拟地址)切分成一个个固定大小的页,并把…

统一开放世界与开放词汇检测:YOLO-UniOW无需增量学习的高效通用开放世界目标检测框架

目录 一、摘要 二、引言 三、相关工作 开放词汇对象检测 开放世界目标检测 参数高效学习 四、高效通用的开放世界目标检测 问题定义 高效的自适应决策学习 开放世界通配符学习 五、Coovally AI模型训练与应用平台 六、实验 数据集 评价指标 实施细节 定量结果 …

fileinclude

##解题思路 场景首页没有什么提示,只有个flag在flag.php中,而且需要更改language,还有个index.php的路径,先记住它 习惯性查看源代码,得到了题目真正的内容,关键在于lan变量读取我们传入的Cookie值中的lang…

链表-LeetCode

这里写目录标题 1 排序链表1.1 插入法 O(n)1.2 归并排序 1 排序链表 1.1 插入法 O(n) /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullpt…

计算机网络基础:WiFi 与蓝牙的原理与应用

计算机网络基础:WiFi 与蓝牙的原理与应用 一、前言二、WiFi 原理2.1 概述2.2 工作频段2.2.1 2.4GHz 频段2.2.2 5GHz 频段2.3 调制技术2.3.1 正交频分复用(OFDM)2.3.2 直接序列扩频(DSSS)2.4 通信协议2.5 网络架构2.5.1 独立基本服务集(IBSS)2.5.2 基础服务集(BSS)2.5.…

深入解析 Java 类加载机制及双亲委派模型

🔍 Java的类加载机制是确保应用程序正确运行的基础,特别是双亲委派模型,它通过父类加载器逐层加载类,避免冲突和重复加载。但在某些特殊场景下,破坏双亲委派模型会带来意想不到的效果。本文将深入解析Java类加载机制、…