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. QMainWindow类中比较重要的方法

    方法和描述 addToolBar():添加工具栏 centralWidget():返回窗口中心的一个空间,未设置时返回NULL menuBar(): 返回主窗口的菜单栏 setCentralWidge ...

  2. 【干货】浅谈如何给.net程序加多层壳达到1+1>2的效果

    软件破解分白盒和黑盒两种方式. 白盒破解:白盒破解是指对软件进行破解时,攻击者可以访问软件的内部结构和源代码.这种破解方式通常发生在软件的开发者.技术人员或软件公司内部.攻击者使用这些详细信息来理解软 ...

  3. Python 潮流周刊第 14 期(内容摘要)

    你好,我是猫哥.这里每周分享优质的 Python.AI 及通用技术内容,本期分享的全部是英文材料. 本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程. ...

  4. 利用msfvenom生成木马

    msfvenom命令行选项如下: 英文原版: 中文版: Options: -p, --payload <payload> 指定需要使用的payload(攻击荷载).如果需要使用自定义的pa ...

  5. C#利用Refit实现JWT自动续期

    前言 笔者之前开发过一套C/S架构的桌面应用,采用了JWT作为用户的登录认证和授权.遇到的唯一问题就是JWT过期了该怎么办?设想当一个用户正在进行业务操作,突然因为Token过期失效,莫名其妙地跳转到 ...

  6. AI绘画关键词Prompt:分享一些质量比较高的StableDiffusion(SD)关键词网站

    今天向大家推荐一些SD(StableDiffusion)高质量的 关键词 网站.这些网站的质量可靠,能为大家在创建 AI 绘画时提供有效的参考.以下是六个推荐的网站,优缺点分析. 有几个质量还算是挺高 ...

  7. 【NestJS系列】连接数据库及优雅地处理响应

    前言 Node作为一门后端语言,当然也可以连接数据库,为前端提供CURD接口 我们以mysql为例,自行安装mysql TypeORM TypeORM 是一个ORM框架,它可以运行在 NodeJS.B ...

  8. 1-MySQL数据库的安装和基础语法介绍

    1.MySQL是什么? MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.它是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最 ...

  9. LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题

    ️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...

  10. dedebiz友情链接样式修改

    文件位置 /system/taglib/flink.lib.php 45行位置 根据自己需求修改就行