FE层的架构都能在网上找到说明. 但BE层的架构模式、一致性保障、与FE层之间的请求逻辑,数据传输逻辑等,我个人暂时没有找到相应的博客说明这些的。当然这些是我个人在学习与使用Doris过程中,对内部交互逻辑与实现感兴趣才有这些疑问. 还好现在有GPT这类大模型,有了疑问,只要问题描述得当,大多可以解惑.

BE节点选择策略

FE(Frontend)节点与 BE(Backend)节点之间的通信是通过 HTTP 协议进行的。

以下是 FE 节点选择 BE 节点的一般策略:

  1. 负载均衡: FE 节点会考虑集群中各个 BE 节点的负载情况,选择负载相对较低的节点来发送请求。这有助于确保集群资源得到均匀利用,避免出现单一节点负载过高的情况。

  2. 数据分布: Doris 使用分区来存储数据,FE 节点在执行查询请求时通常会选择负责相应分区的 BE 节点。这样可以最大程度地减少数据的传输和处理时间,提高查询效率。

  3. Replication 策略: 如果表的 replication_allocation 属性配置了多个副本和相应的节点信息,FE 节点可能会考虑选择其中一个副本所在的 BE 节点。这也涉及到数据的复制和容错机制。

  4. 故障容忍: FE 节点需要考虑 BE 节点的健康状态。如果某个 BE 节点出现故障,FE 节点可能会选择其他正常的节点来发送请求。这也与 Raft 协议中的 Leader-Follower 模型有关,查询和写入请求通常由 Leader 节点处理。

  5. 就近原则: FE 节点可能会选择距离较近的 BE 节点,以减少网络延迟。这对于提高查询和写入的响应速度至关重要。

这些策略和配置项通常是 Doris 内部的机制,直接由系统管理。在一般情况下,用户无需手动配置 BE 节点的选择策略,而是通过合理配置表的副本和集群的负载均衡机制来实现。

副本

在创建表时,可以指定BE层的节点副本配置. 个人觉得这个博客写得蛮详细,可以详细的看看 数据分布和副本

BE节点数据一致性

BE节点上,有着众多的Tablet副本,这些副本的数据一致性是如何保障的?BE节点集群是主副本架构么?

如下是文心一言的回答:

在Apache Doris中,BE节点间的数据一致性是通过副本同步和增量同步机制实现的。

首先,Apache Doris支持基于Paxos协议的分布式锁机制,确保在写入数据时,所有BE节点都能获得相同的锁信息。当一个BE节点获得写入权限并完成数据写入后,它会将修改操作记录到本地日志中,并利用Paxos协议将日志同步到其他BE节点。其他BE节点在接收到日志后,会根据日志内容对数据进行相应的修改,以保证所有节点数据的一致性。

其次,Apache Doris还支持基于时间戳的数据扫描机制,定期扫描不同节点上的数据,发现不一致的情况及时进行修复。当发现数据不一致时,BE节点会利用Paxos协议重新协商一致性,并根据协商结果进行数据修复。

此外,Apache Doris还提供了多种数据同步配置项,用户可以根据实际需求进行设置和调整,以满足不同的业务场景和性能需求。例如,用户可以设置同步的副本数、同步延迟时间等参数,以确保BE节点间的数据一致性。

总之,Apache Doris通过副本同步和增量同步机制以及多种数据同步配置项的结合使用,实现了BE节点间的数据一致性保证。这些机制的结合使用使得Apache Doris在分布式环境下能够提供可靠的数据一致性保证。

如下是ChatGPT的回答:

在 Apache Doris 中,BE(Backend)节点间的数据一致性是通过 Raft 一致性协议来实现的。Raft 协议是一种分布式一致性算法,用于确保在集群中的多个节点之间维持数据的强一致性。

以下是 BE 节点间数据一致性的基本流程:

1. Raft 组(Replica Group): Doris 中的每个表都会被分为多个 Raft 组,每个 Raft 组包含一个 Leader 节点和多个 Followers 节点。Leader 负责处理写入请求,而 Followers 节点负责复制 Leader 的数据。

2. Leader-Follower 模型: 在每个 Raft 组中,有一个节点被选为 Leader,其他节点成为 Followers。Leader 节点接收客户端的写入请求,并负责将这些写入请求的变更复制到 Followers 节点。

3. 写入请求的处理: 当 Leader 节点接收到写入请求时,它会将这个写入请求的变更记录到其本地日志,并通过 Raft 协议将这个变更通知给 Followers 节点。

4. Quorum Commit: 在 Raft 协议中,写入操作需要在 Leader 和大多数 Followers 节点上完成才算成功。Leader 将等待大多数节点确认成功后,再向客户端返回写入成功的响应。

5. Followers 数据同步: Followers 节点接收到 Leader 的写入请求后,会将这些变更应用到本地的存储中,确保所有节点上的数据保持一致。

6. Leader 故障转移: 如果 Leader 节点发生故障,Raft 协议会进行新一轮的选举,选择新的 Leader 节点。这确保了即使在节点故障的情况下,数据仍然能够得到一致性的维护。

通过 Raft 协议,Doris 确保了 BE 节点之间的数据一致性。这包括对写入操作的 Quorum Commit、Leader-Follower 模型以及节点故障时的 Leader 重新选举等机制。Raft 协议的设计目标是在分布式环境下提供强一致性,确保数据的可靠性和一致性。

最后在github上提了个discussions,期待回复吧.

聊聊分布式 SQL 数据库Doris(四)的更多相关文章

  1. 分布式SQL数据库中部分索引的好处

    在优锐课的java学习分享中,探讨了分布式SQL数据库中部分索引的优势,并探讨了性能测试,结果等. 如果使用局部索引而不是常规索引,则在可为空的列上(其中只有一小部分行的该列不具有空值),然后可以大大 ...

  2. 保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!

    作者简介 Jimmy Guerrero,在开发者关系团队和开源社区拥有20多年的经验.他目前领导YugabyteDB的社区和市场团队. 本文来自Rancher Labs Longhorn是Kubern ...

  3. C++操作 SQL数据库 实例 代码步骤

    C++连接SQL数据库第一步 系统配置 1.设置SQLSERVER服务器为SQL登录方式,并且系统安全性中的sa用户要设置登录功能为“启用”,还有必须要有密码. 2.需要在ODBC中进行数据源配置,数 ...

  4. CockroachDB学习笔记——[译]The New Stack:遇见CockroachDB,一个弹性SQL数据库

    原文链接:https://www.cockroachlabs.com/blog/the-new-stack-meet-cockroachdb-the-resilient-sql-database/ 原 ...

  5. 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制

    [原创]分布式之数据库和缓存双写一致性方案解析(三)   正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...

  6. MSSQL Server数据库的四种连接方法和sql连接字符串

    MSSQL Server数据库的四种连接方法和sql连接字符串 分类: [ 03 ] C#(131) [ 07 ] SQL Server(68) [ 01 ] .NET(189) 今天用SQL Ser ...

  7. 基于Qt5.5.0的sql数据库、SDK_tts文本语音朗读的CET四六级单词背诵系统软件的编写V1.0

    作者:小波 QQ:463431476 请关注我的博客园:http://www.cnblogs.com/xiaobo-Linux/ 我的第二款软件:CET四六级单词背诵软件.基于QT5.5.0.sql数 ...

  8. ORCAL 数据库的约束以及SQL语言的四种类型

    oracle数据库约束: 定义:要输入的这个值是一个什么样的值, 或者是哪个范围内的值 作用: 确保完整性, 确保精确性 1, 非空约束(not null) 记录一条信息的时候如果用户名和密码没有被记 ...

  9. AppBoxFuture: 集成第三方Sql数据库

      框架设计之初是不准备支持第三方数据库的,但最近几个朋友都提到需要将旧的基于传统Sql数据库的应用迁移到框架内,主要是考虑到一方面目前框架内置的分布式数据库尚未完善,另一方面是希望能逐步迭代旧应用替 ...

  10. Spring Cloud Config(一):聊聊分布式配置中心 Spring Cloud Config

    目录 Spring Cloud Config(一):聊聊分布式配置中心 Spring Cloud Config Spring Cloud Config(二):基于Git搭建配置中心 Spring Cl ...

随机推荐

  1. 三万字盘点Spring 9大核心基础功能

    大家好,我是三友~~ 今天来跟大家聊一聊Spring的9大核心基础功能. 其实最近有小伙伴私信问我怎么不写文章了,催更来了 其实我不是不写,而是一直在写这篇文章,只不过令我没想到的是,从前期的选题.准 ...

  2. Spring Secriuty登录失败错误状态999重定向302

    原因是login.html登录页面有不能加载的静态资源,找出来去掉就好了,比如 bootstrap.min.css 环境 使用Spring Boot Security 3做一个登录功能,使用了一个教程 ...

  3. selenium报错:This version of ChromeDriver only supports Chrome version 109 Current browser version is 112.0.5615.49...解决办法

    前言:跟GPT交互,让其写一段代码,执行失败.经过排查验证,GPT写的代码没有问题,是本地环境问题. 执行报错: selenium.common.exceptions.SessionNotCreate ...

  4. 文心一言 VS 讯飞星火 VS chatgpt (77)-- 算法导论7.3 2题

    二.如果用go语言,在 RANDOMIZED-QUICKSORT 的运行过程中,在最坏情况下,随机数生成器 RANDOM 被调用了多少次?在最好情况下呢?以θ符号的形式给出你的答案? 文心一言: 在 ...

  5. 文心一言 VS 讯飞星火 VS chatgpt (78)-- 算法导论7.4 2题

    二.如果用go语言,证明:在最好情况下,快速排序的运行时间为 Ω(nlgn). 文心一言: 在最好情况下,快速排序的运行时间为Ω(nlgn)的证明如下: 快速排序是一种分治算法,它将一个数组分成两个子 ...

  6. 使用 OpenTelemetry 构建 .NET 应用可观测性(1):什么是可观测性

    目录 什么是系统的可观测性(Observability) 为什么需要软件系统需要可观测性 可观测性的三大支柱 日志(Logging) 指标(Metrics) 分布式追踪(Distributed Tra ...

  7. PGO in Go 1.21

    原文在这里. 由 Michael Pratt 发布于 2023年9月5日 在2023年早些时候,Go 1.20发布了供用户测试的概要版本的基于性能分析的优化(PGO).经过解决预览版已知的限制,并得益 ...

  8. 深入理解HTTP的基础知识:请求-响应过程解析

    首先,我们从网络协议的最顶层开始讲解,即应用层.在网络通信中,应用层是最接近用户的一层,它负责为特定的网络应用提供服务和功能.应用层协议定义了数据交换的规则和格式,以便不同的应用程序能够相互通信和交换 ...

  9. Mybatisplus3.5.1+shardingsphere-jdbc5.1.1分表

    注意使用雪花ID的话,查询ID时候必须使用long类型的ID,不要使用MP自带的默认的Serializable类型.否则会提示分片主键id数据类型和分片算法不匹配Inline sharding alg ...

  10. 校招零Offer要不要先找实习?

    国庆前后被问到最多的问题是:"磊哥,我现在还是 0 Offer,要不要先去找个实习?",给大家看看部分截图. 同学 A: 同学 B: 同学 C: 其他还有一些截图,我这里就不一一贴 ...