数据库修仙筑基篇三——raft重要概念

深入浅出一文搞懂Raft协议 前言 在分布式的世界里,要说最核心最复杂的功能,一致性的实现无出其右,之前的paxos算法堪称经典,被认为是同类算法中效果最好的,基本上成为分布式一致性的代名词,但是paxos算法也是出了名的难理解,而且相当不好实现。本人也花了很多时间、看了很多材料也没有真正理解。所以基于paxos的思想进行的一致性算法的简化和实现就成为了现实的需求,在此背景下,本文的主角Raft就出现了。 Raft算法的头号目标就是容易理解(UnderStandable),这从论文中就可以看出来。当然,R... 阅读详情

raft重要概念

执行流程

raft将分布式一致性问题分解成两个独立的问题,分成两个大的步骤来进行数据处理。

两个独立问题分别为:

  • leader election

  • log replication

对应的两个步骤分别为:

  • 先投票选出leader

  • leader存在后,由leader负责协调数据写入,当leader离开时,回到选leader步骤

节点与角色

在raft中每一个进程是一个节点,节点用节点id区分。节点有角色状态,并且在通信流程中,节点角色会不断发生变化。

节点角色状态分为如下三种:

  • follower

  • candidate

  • leader

节点启动时处于follower状态,并且每隔follower状态的节点都会等待leader状态节点的心跳报文,若有leader的话会定时收到心跳报文;若在一段时间内没有收到leader心跳报文,此时将会发生状态变更,follower切换到candidate状态,发起选举投票。投票过程中,若某节点获得大多数节点的投票,则该节点将从candidate转变为leader,而其他节点收到leader的消息后则从candidate转变为follower。

term

term在raft中作为逻辑时钟存在,Raft 把时间分割成任意长度的任期,用term来标识每一届leader的任期,这样可以保证在一个任期内只有一个Leader。

term是一个递增的数值,从选举开始,若在规定时间内选出leader,则term就是leader的工作期;若在规定时间未选出leader,将会开始新一轮选举,此时term将会增加。

当leader工作一段时间后下台,其他follower节点因心跳超时将会进入新一轮选举,此时term也会增加。

Candidate发起选举时就将自己的term加1,然后发起投票请求;

收到投票请求的节点比较请求的term和自己的term,如果请求的term比自己的大,则更新自己的term;

leader election

选举的限制条件如下:

  • 同一任期内每个节点最多只能投一票,先来先得

  • 数据最新才能获取到投票(选举人必须知道的比自己的多,需要比较term和log index)

当follower与leader的心跳超时时,就会触发选举,流程如下:

  1. 增加本地的current term,切换到candidate状态

  2. 投自己一票

  3. 并行给其他节点发送RequestVote

  4. 等待其他节点回复

  5. 根据回复结果进行状态变更

    1. 收到大多数节点的投票(包含自己的一票),则赢得选举,成为leader,并广播所有节点本节点已当选leader

    2. 被告知别人已当选,切换到follower

    3. 选举超时,发起新一轮选举

leader发送的第一个AppendEntriesRPC往往是一个空的包(不包含日志数据的心跳包,大部分时候是空的,如果当选leader和发送AppendEntries之间leader接收了新的数据,那么这部分新数据也会发送)。

当节点收到leader的第一条消息时:

  1. 比较local term与leader term,若local term>leader term,拒绝接受日志;若local term<leader term,更新local term,并append log;

  2. 如果local term==leader term,则需要比较local index和leader index;若local index<leader index,则append log;若local index>leader index,

reference

  1. 一文搞懂Raft算法 - xybaby - 博客园

  2. Raft算法同步过程 - 个人文章 - SegmentFault 思否

  3. 分布式 - Raft算法之选举篇 - 个人文章 - SegmentFault 思否

  4. https://www.sofastack.tech/projects/sofa-jraft/raft-introduction/

基于Raft算法的分布式KV数据库:一、开篇 阅读详情

相关推荐

Raft协议原理与C++实现详解

Raft协议通过将集群中的每个节点限制为三种互斥角色之一——Follower、Candidate 或 Leader——简化了分布式系统中复杂的协调过程。这种角色分离机制使得系统的状态演化更加可预测,便于调试与验证。每种角色承担特定职责,且只能在满足特定条件时进行转换。理解这些角色的功能边界及其转换路径,是设计高效状态机的前提。

weixin_42465332的博客 1263

raft算法浅析

raft算法可分解成六部分: 选举leader:包括检测崩溃和选举新的leader 复制log leader发生变化时的安全性、可用性和一致性 中立旧leader 客户端交互 修改配置:增加或删除server raft算法定义了term(任期)的概念。一个term可分为两个阶段:选举和复制日志。选举阶段用于选出一个leader,且仅有一个leader;leader选举出来以后,就可以...

a123s1d2f3的专栏 750

不用写代码!3个免费在线工具教你完成Lasso回归分析(含生存资料处理)

本文介绍3款免费在线工具,帮助用户无需编程即可完成临床数据的Lasso回归分析,特别适合处理生存资料。通过详细的操作指南和实战技巧,读者可以轻松掌握变量筛选、模型优化及结果解读,提升临床研究的效率和准确性。

weixin_33738555的博客 349

Raft协议

最近在系统的实战spring cloud,在学习nacos过程,我们知道nacos的底层用到了Raft协议。在Raft协议之前是一个paxos的协议,但是这个协议有点复杂,于是Stanford的两位教授决定设计一种较简单的一致性算法。参考自我们一起来学习一下Raft协议。

smile 401

HTML5网页基础设计——课程介绍专栏

案例: 参考代码: <!doctype html> <html> <head> <meta charset="utf-8"> <title>动手实践</title> <style> *{ margin: 0; padding: 0; font-size:14px; } dd{ width: 461px; height: 145px; margin: -4px; pad.

shengming_tutou的博客 4594

记录一下本地部署Dify的坑

1. 截止2025-3-4为止,请注意,不要直接拉Dify的1.0.0版本。请先试用0.15.3版本。1.0.0有一个bug需要解决。3. 请使用docker-ce 新版本,docker-engine等老版本可能会有部分容器启动脚本执行莫名报错。2. 注意,请使用docker-compose V2版本,或者V1较高版本,否则会导致解析官方yml模板错误。

哈利路亚的收藏夹 5348

TiDB:基于 Raft 的 HTAP 数据库

基于Raft的HTAP数据库:TiDB。在数据库中设计了一个由行存储和列存储组成的Multi-Raft存储系统。行存储是基于Raft算法构建的。它是可伸缩的,可以从具有高可用性的事务请求实现更新。特别是,它异步复制Raft日志到learners,learners将元组的行格式转换为列格式,形成一个实时可更新的列存储。这个列存储允许分析查询高效地读取一致的新数据,与行存储上的事务有很强的隔离。

Tyler_Zx的博客 2172

门控时钟(clock gating)的DFT设计

在数字IC芯片中,时钟树的功耗占比可能高达30%,因此一般会采取门控时钟的方式来降低该部分的功耗。所谓门控时钟,就是在芯片实际工作过程中,有些信号或者功能并不需要一直开启,那么就可以在它们不用的时候将其时钟信号关闭。这样一来信号不再翻转,从而能够有效减少动态功耗。 目前门控时钟都采用集成门控时钟单元(ICG,integrated clock gating cell),其结构如下。由一个latch和一个与门(也有的是或门)组成,可以过滤掉EN信号中的毛刺。一般的工艺库中都会有专门的ICG以供调用。 插入IC

weixin_44746697的博客 3878

【基于Raft的k-v存储数据库实现】

建立在网络之上的软件系统。一个分布式系统是一组计算机系统一起工作,在终端用户看来,就像一台计算机在工作一样。分布式系统的主要特点是:资源共享:分布式系统中的计算机拥有共享的状态,它们同时运行,独立机器的故障不会影响整个系统的正常运行。动态分配:系统可以动态地分配任务,有效地利用分散的物理和逻辑资源。透明性:对用户来说,分布式系统展现为一个整体,用户无需关心背后的复杂性。分布式选举协议:Raft(一致性算法,共识算法)Leader: 处理客户端交互和日志复制操作等,一般只有一个Leader节点。

qq_42898600的博客 1686

实验五 循环结构第1关:斐波那契数列第2关:统计一段英文语句中的单词数和句子数第3关:密码判断第4关:通过数列求自然常数e第5关:双倍余额递减法计算固定资产折旧第6关:销售统计第7关:投资年限计算

第1关:斐波那契数列第2关:统计一段英文语句中的单词数和句子数第3关:密码判断 第4关:通过数列求自然常数e 第5关:双倍余额递减法计算固定资产折旧

pro_daily的博客 8170

ESP32小车DIY:从零搭建无线遥控智能车(附完整代码与避坑指南)

本文详细介绍了如何从零开始DIY一台基于ESP32的无线遥控智能小车。内容涵盖核心硬件选型、电路设计、低延迟ESP-NOW无线通信协议的配置与实战,以及双电机差速控制算法与PWM调速的实现。文章提供了完整的代码示例和关键的避坑指南,旨在帮助开发者快速构建稳定可靠的智能车平台,并为进一步的功能扩展奠定基础。

gamma的博客 471

数据库修仙筑基篇五——c-raft分布式存储方案

c-raft分布式存储方案

growdu的网络博客 537

HBuilderX结合Android Studio实现Uniapp安卓Apk高效离线打包指南

本文提供了一份详细的Uniapp安卓Apk离线打包实战指南。通过整合HBuilderX与Android Studio,手把手教你搭建本地编译环境、配置原生工程、执行核心打包流程,并分享快速更新资源和排查常见问题的技巧,助你彻底摆脱云端打包的排队依赖,实现高效、可控的应用构建。

weixin_28835551的博客 560

数据库修仙筑基篇二——分布式一致性协议

分布式一致性协议

growdu的网络博客 924

RT-DETR改进前必看 - Ultralytics调参 1:1还原RT-DETR官方版本实验环境,更方便改进

的项目文件中集成了YOLOv3v5v6v8v9v10rt-detr11以及其中不同大小的模型结构,更方便我们学习和使用。的参数配置在路径下,其中中设置了模型在训练Train验证Val/Test预测Predict可视化Visualize导出Export超参数Hyperparameters、以及跟踪Tracker的相关参数。在调参过程中主要涉及训练Train和超参数Hyperparameters。下面主要介绍一下初始超参数Hyperparameters。

Limiiiing的博客 7968

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数据库修仙元婴篇一——dcf配置解析机制(元数据)

dcf配置解析机制(元数据)

growdu的网络博客 1069

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Raft 算法—Leader选举、Log复制

1. 复制状态机 (1)客户端向服务器发送一条命令; (2)服务器上的共识模块将接收到的命令添加到自己的 log 中,然后和其他服务器上的共识模块通信,以复制该命令到其他服务器上; (3)一旦命令被成功复制到大多数服务器上之后,每个服务器上的状态机将按序执行 log 中的命令; (4)状态机输出并返回命令的执行结果。 2. Raft基础 集群角色 Raft 集群中的节点按角色可划分为:leader、follower 和 candidate。 (1)正常情况下,集群中只存在一个 leader,并由 leade

gaoZhuanMing的博客 1841

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

MIT6824——lab2(实现一个Raft库)的一些实现,问题,和思考

MIT 6824 LAB2的一些思考

qq_44778436的博客 1168

Java面试题之:Raft

Java面试题之:Raft简介一、角色二、Term(任期)三、选举(Election)四、安全性(Safety) 简介   与 Paxos 不同 Raft 强调的是易懂(Understandability),Raft 和 Paxos 一样只要保证 n/2+1 节点正常就能够提供服务;raft 把算法流程分为三个子问题:选举(Leader election)、日志复制(Log replication)、安全性(Safety)三个子问题。 一、角色   Raft 把集群中的节点分为三种状态:Leader、 Fo

faramita_of_mine的博客 934

[Raft共识算法的分布式数据库]

1. Leader Append Entries:领导者追加日志条目,处理客户端请求,打包成日志,向follower同步。,它的设计目标之一就是提供更好的可读性和可理解性,相比之下,Paxos算法相对更加抽象和复杂。问题,即集群中的节点因为网络故障而互相失去联系,导致集群被分割成。其他节点检查自己任期,如果选举者任期大于自己,则投票,并更新。,而Paxos中角色的切换较为复杂,需要进行更多的投票和协调。在系统启动的时候或当前领导者失效的时候,节点发起选举过程。没有大多数节点的确认,当前的领导者将。

m0_55100398的博客 1199

Raft学习笔记

no-op空日志属于领导者任期的日志,多数派达成后立即提交,致使no-op空日志前面的那些未提交的日志全部间接提交了。两阶段提交协议是最经典的原子提交协议,其基本思想是:既然仅发送一个请求不足以知道其他节点是否成功提交事务,那么最直接的想法就是再增加一轮请求,先检查每个节点上的状态是否能够满足事务正确性,再进行事务操作。2)如果接收方发现发送方的任期陈旧,那么无论哪个过程,该RPC请求都会被拒绝,接收方如果将已知的最新任期回传给发送方,发送方知道自己的任期已经过期后,转变为跟随者状态并跟新其任期。

qq_15054345的博客 1162

分布式数据库之共识算法:Raft协议介绍

一、背景概述 在分布式系统中,通常需要多副本进行备份,但是副本的同步一致一直是一个比较棘手的问题。Raft算法是一个能够代替Paxos的分布式一致性算法,能够管理日志复制(replicated log),他的性能与Paxos不相上下,但是却比Paxos更容易理解。 Paxos存在的问题: 难以理解(不过《Paxos Made Simple》比较容易理解)。一是因为paxos选择了single-degree Paxos作为基础,二是因为Multi-Paxos 的合成规则又增加了许多复杂性。 不能为构建

qq_34924156的博客 2181

分布式Raft原理详解,从不同角色视角分析相关状态

CAP : 一个分布式系统不可能同时满足一致性 (C: Consistency)、可用性(A:Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中的两项 分布式存储架构中,设计共识算法要考虑在一个复制集群中,所有节点按照确认的顺序处理命令,最终结果是在客户端看来,一个复制集群表现的像一个单状态机一样一致。为了保证多个节点顺序一致,需要处理如下问题: - 非拜占庭错误,包含网络延迟,分区,丢包,重复和乱序 - 只要多数节点(quorum)

李姓门徒 1877

分布式一致性算法:Raft学习

Raft算法又被称为基于日志复制的一致性算法,旨在解决分布式系统中多个节点之间的数据一致性问题。它通过选举一个**领导者(Leader)**,让领导者负责管理和协调日志复制,确保所有节点的数据一致。复制日志在分布式系统中,每个节点都维护着一份日志,记录系统操作的历史。为了保证数据一致性,这些日志需要在所有节点之间保持同步。Raft通过领导者选举和日志复制机制,确保所有节点的日志最终是一致的。心跳机制与选举Raft使用心跳机制来触发选举。

shenfenxihuan的博客 8553

基于Raft算法的分布式KV数据库:二、raft算法主要概念和主要流程

基于Raft算法的分布式KV数据库:二、raft算法主要概念和主要流程

葛雨龙的博客 1839

什么是 Raft 协议?

Raft 是一种为了解决分布式一致性问题而设计的共识算法,属于 Paxos 协议的工程实现替代方案

欢迎来到我的技术分享博客!这里将带你深入了解AI技术、Java架构设计、系统开发与优化等前沿技术内容。我专注于从实战经验 1791
上一篇: 数据库修仙元婴篇二——dcf写入机制
下一篇: 数据库修仙元婴篇一——dcf配置解析机制(元数据)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在数据库世界里修仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值