聊聊分布式 SQL 数据库Doris(四)
FE层的架构都能在网上找到说明. 但BE层的架构模式、一致性保障、与FE层之间的请求逻辑,数据传输逻辑等,我个人暂时没有找到相应的博客说明这些的。当然这些是我个人在学习与使用Doris过程中,对内部交互逻辑与实现感兴趣才有这些疑问. 还好现在有GPT这类大模型,有了疑问,只要问题描述得当,大多可以解惑.
BE节点选择策略
FE(Frontend)节点与 BE(Backend)节点之间的通信是通过 HTTP 协议进行的。
以下是 FE 节点选择 BE 节点的一般策略:
负载均衡: FE 节点会考虑集群中各个 BE 节点的负载情况,选择负载相对较低的节点来发送请求。这有助于确保集群资源得到均匀利用,避免出现单一节点负载过高的情况。
数据分布: Doris 使用分区来存储数据,FE 节点在执行查询请求时通常会选择负责相应分区的 BE 节点。这样可以最大程度地减少数据的传输和处理时间,提高查询效率。
Replication 策略: 如果表的 replication_allocation 属性配置了多个副本和相应的节点信息,FE 节点可能会考虑选择其中一个副本所在的 BE 节点。这也涉及到数据的复制和容错机制。
故障容忍: FE 节点需要考虑 BE 节点的健康状态。如果某个 BE 节点出现故障,FE 节点可能会选择其他正常的节点来发送请求。这也与 Raft 协议中的 Leader-Follower 模型有关,查询和写入请求通常由 Leader 节点处理。
就近原则: 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(四)的更多相关文章
- 分布式SQL数据库中部分索引的好处
在优锐课的java学习分享中,探讨了分布式SQL数据库中部分索引的优势,并探讨了性能测试,结果等. 如果使用局部索引而不是常规索引,则在可为空的列上(其中只有一小部分行的该列不具有空值),然后可以大大 ...
- 保姆级教程!手把手教你使用Longhorn管理云原生分布式SQL数据库!
作者简介 Jimmy Guerrero,在开发者关系团队和开源社区拥有20多年的经验.他目前领导YugabyteDB的社区和市场团队. 本文来自Rancher Labs Longhorn是Kubern ...
- C++操作 SQL数据库 实例 代码步骤
C++连接SQL数据库第一步 系统配置 1.设置SQLSERVER服务器为SQL登录方式,并且系统安全性中的sa用户要设置登录功能为“启用”,还有必须要有密码. 2.需要在ODBC中进行数据源配置,数 ...
- CockroachDB学习笔记——[译]The New Stack:遇见CockroachDB,一个弹性SQL数据库
原文链接:https://www.cockroachlabs.com/blog/the-new-stack-meet-cockroachdb-the-resilient-sql-database/ 原 ...
- 【原创】分布式之数据库和缓存双写一致性方案解析(三) 前端面试送命题(二)-callback,promise,generator,async-await JS的进阶技巧 前端面试送命题(一)-JS三座大山 Nodejs的运行原理-科普篇 优化设计提高sql类数据库的性能 简单理解token机制
[原创]分布式之数据库和缓存双写一致性方案解析(三) 正文 博主本来觉得,<分布式之数据库和缓存双写一致性方案解析>,一文已经十分清晰.然而这一两天,有人在微信上私聊我,觉得应该要采用 ...
- MSSQL Server数据库的四种连接方法和sql连接字符串
MSSQL Server数据库的四种连接方法和sql连接字符串 分类: [ 03 ] C#(131) [ 07 ] SQL Server(68) [ 01 ] .NET(189) 今天用SQL Ser ...
- 基于Qt5.5.0的sql数据库、SDK_tts文本语音朗读的CET四六级单词背诵系统软件的编写V1.0
作者:小波 QQ:463431476 请关注我的博客园:http://www.cnblogs.com/xiaobo-Linux/ 我的第二款软件:CET四六级单词背诵软件.基于QT5.5.0.sql数 ...
- ORCAL 数据库的约束以及SQL语言的四种类型
oracle数据库约束: 定义:要输入的这个值是一个什么样的值, 或者是哪个范围内的值 作用: 确保完整性, 确保精确性 1, 非空约束(not null) 记录一条信息的时候如果用户名和密码没有被记 ...
- AppBoxFuture: 集成第三方Sql数据库
框架设计之初是不准备支持第三方数据库的,但最近几个朋友都提到需要将旧的基于传统Sql数据库的应用迁移到框架内,主要是考虑到一方面目前框架内置的分布式数据库尚未完善,另一方面是希望能逐步迭代旧应用替 ...
- Spring Cloud Config(一):聊聊分布式配置中心 Spring Cloud Config
目录 Spring Cloud Config(一):聊聊分布式配置中心 Spring Cloud Config Spring Cloud Config(二):基于Git搭建配置中心 Spring Cl ...
随机推荐
- JDV背后的技术-助力618
一.项目介绍 JDV(可视化大屏)是京东内部搭建可视化大屏的数据工具平台,内置10+种模版特效,40+种风格各异的图表.导航等组件.与集团其他数据工具打通,支持一站式.自助化.拖拽式搭建大屏,实现数据 ...
- 小议ml.NET机器学习与人机责任划分
最近,特斯拉宣布召回110万辆车,名义上是纠正单踏板不良习惯,背后原因可能是这些车辆的电子控制单元存在缺陷,可能导致刹车失灵(潮州等交通事故至今没有定论).这个事件引起了人们对于机器学习技术和人机责任 ...
- vivo 场景下的 H5无障碍适配实践
作者:vivo 互联网前端团队- Zhang Li.Dai Wenkuan 随着信息无障碍的建设越来越受重视,开发人员在无障碍适配中也遇到了越来越多的挑战.本文是笔者在vivo开发H5项目做无障碍适配 ...
- DAY005_异或运算
运算规则 二进制:相同为0 相异为1 十进制:相同为0 任何数字和0异或都是它本身 不利用额外变量交换两个数 数组中一种数字出现了奇数次,其他数都出现了偶数次,怎么得到这个出现了奇数次的数 将所有的数 ...
- 如何在Nuxt3.0中使用MongoDB数据库
如何在Nuxt3.0中使用MongoDB数据库 一.介绍 Nuxt.js 是一个基于 Vue.js 的开源框架,用于构建服务端渲染 (Server-Side Rendering, SSR) 或静态生成 ...
- 利用SPI实现全自动化——LCD屏与RGB灯
如果你开启了广告屏蔽,请将博客园加入白名单,帮助博客园渡过难关,谢谢! 前言 在21年做物理实验和23年客串电赛之后,我带着STM32重回电子DIY界.这次的项目是一个电池供电的补光灯,由于用途更偏向 ...
- Springboot简单功能示例-6 使用加密数据源并配置日志
springboot-sample 介绍 springboot简单示例 跳转到发行版 查看发行版说明 软件架构(当前发行版使用) springboot hutool-all 非常好的常用java工具库 ...
- 《机器人SLAM导航核心技术与实战》第1季:第6章_机器人底盘
<机器人SLAM导航核心技术与实战>第1季:第6章_机器人底盘 视频讲解 [第1季]6.第6章_机器人底盘-视频讲解 [第1季]6.1.第6章_机器人底盘_底盘运动学模型-视频讲解 [第1 ...
- 什么???CSS也能原子化!
1.什么是原子化 CSS? Atomic CSS is the approach to CSS architecture that favors small, single-purpose class ...
- 使用Spring Integration接收TCP与UDP请求
1. 简介 Spring Integration 是一个开源的项目,它是 Spring 生态系统的一部分,旨在简化企业集成(Enterprise Integration)的开发.它提供了一种构建消息驱 ...