dledger原理源码分析系列(一)-架构,核心组件和rpc组件

简介

      dledger是openmessaging的一个组件, raft算法实现,用于分布式日志,本系列分析dledger如何实现raft概念,以及dledger在rocketmq的应用

本系列使用dledger v0.40

本文分析dledger的架构,核心组件;rpc组件

关键词

Raft

Openmessaging

参考资料

In Search of an Understandable Consensus Algorithm  raft论文简版

技术架构

  • 应用/client  client是dledger提供给应用访问节点的组件
  • rpc服务

rpc服务内置rpc client/rpc server,对外接收外部rpc访问,包括client和节点间通讯;对内,解释rpc请求,转发给Server;对外,发送rpc请求到其他节点

  • Server

主程序,负责节点启动,其他组件的启动;写入日志请求初步处理等

  • Elector

选举类,负责集群主节点选举

  • EntryPusher

日志写入器,内置分发器和处理器,分发器主节点用于复制日志到跟随者;处理器跟随者使用,写入日志

  • 存储

存储日志条木,有两个实现,基于内存和基于文件

  • 快照/状态机

新版本的dledger提供状态机,dledger成为通用的raft组件,不再是转为rocketmq使用

启动

本节分析节点启动,下图是典型的dledger启动代码

  1. 构建和初始Server,Server代表节点
  2. 注册状态机,若需要的话
  3. 注册自定义的处理器,扩展rpc服务,若有的话
  4. Metrics组件初始化
  5. 启动server

     Server启动,负责启动核心组件

     6. 优雅关机

rpc

本节介绍dledger的rpc模块,dledger选主,日志写入和复制通过来来回回的rpc完成,本节介绍dledger业务层面的rpc设计

节点间通讯

上图节点间通讯模型

RaftProtocol/RaftProtocolHanlder  raft服务接口/处理器接口,raft服务接口定义外部,包括client和节点间访问接口;处理器定义raft处理服务接口

ClientProtocol/ ClientProtocolHanlder 日志服务接口/处理器接口,日志服务接口定义外部,包括client和节点间访问接口;处理器定义日志处理服务接口

RpcService 内置rpc client/rpc server, 对内使用NettyRemotingServer接收rpc请求,解释rpc请求,转发给Server;对外,使用NettyRemotingClient发送rpc请求到其他节点

Server  handler的真正实现者

技术架构图很直观的展示rpc调用关系

客户端通讯

Client组件是应用用于集成dledger,应用可使用client组件访问集群

MetadataUpdate 定时更新leaderId,让Client访问领导者节点

DLedgerClientProtocol 定义了访问集群的接口

扩展机制

Dledger提供rpc扩展机制,通过增加rpc处理器,DLedgerRpcService提供方法注册用户定义处理器

 系列文章

  • 架构,核心组件和rpc组件 完成
  • 心跳和选举 TBD
  • 日志写入/复制和存储  包括日志写入和复制,日志存储组件
  • 集成rocketmq  rocketmq使用dledger实现消息存储复制;broker控制器 元数据复制
  • 快照/状态机
  • 集群成员变更  成员变更管理,节点的上线下线发现,dledger v0.4未实现,但计划中,未来版本实现
  • jraft  “double check”  多重分析,jraft比较忠实实现了raft算法,在dledger基础上,再研究jraft对raft更深入的认识

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/366308.html

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

相关文章

高等数学在Android开发中的应用:函数极限与算法优化

高等数学在Android开发中的应用:函数极限与算法优化 在Android开发中,高等数学中的许多概念和技术都能够显著提高应用程序的性能和功能。这篇博客将探讨一些具体的数学原理,特别是函数极限在Android中的实际应用。 函数极限的基本概念 函数极限是微积分的基础,广泛应用于…

6.The hardest part about learing hard things(学一件难的事,难在哪里)

I’ve been recording a lot of podcast interviews for my upcoming book, Ultralearning.One of the reurring themes I’ve noticed in our conversations is that how people feel about learning is the overwhelming cause of the results they experience. 我为我的新书…

最新AIGC系统源码-ChatGPT商业版系统源码,自定义ChatGPT指令Promp提示词,AI绘画系统,AI换脸、多模态识图理解文档分析

目录 一、前言 系统文档 二、系统演示 核心AI能力 系统快速体验 三、系统功能模块 3.1 AI全模型支持/插件系统 AI模型提问 文档分析 ​识图理解能力 3.2 GPts应用 3.2.1 GPTs应用 3.2.2 GPTs工作台 3.2.3 自定义创建Promp指令预设应用 3.3 AI专业绘画 3.3.1 文…

基于OpenCV与Keras的停车场车位自动识别系统

本项目旨在利用计算机视觉技术和深度学习算法,实现对停车场车位状态的实时自动识别。通过摄像头监控停车场内部,系统能够高效准确地辨认车位是否被占用,为车主提供实时的空闲车位信息,同时为停车场管理者提供智能化的车位管理工具…

谷歌GenType:1分钟生成AI艺术字母表,小众但好用,完全免费!(附教程)

文章首发于公众号:X小鹿AI副业 大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~ 最近发现一个好玩的…

linux 控制台非常好用的 PS1 设置

直接上代码 IP$(/sbin/ifconfig eth0 | awk /inet / {print $2}) export PS1"\[\e[35m\]^o^\[\e[0m\]$ \[\e[31m\]\t\[\e[0m\] [\[\e[36m\]\w\[\e[0m\]] \[\e[32m\]\u\[\e[0m\]\[\e[33m\]\[\e[0m\]\[\e[34m\]\h(\[\e[31m\]$IP\[\e[m\])\[\e[0m\]\n\[\e[35m\].O.\[\e[0m\]…

云计算【第一阶段(23)】Linux系统安全及应用

一、账号安全控制 1.1、账号安全基本措施 1.1.1、系统账号清理 将非登录用户的shell设为/sbin/nologin锁定长期不使用的账号删除无用的账号 1.1.1.1、实验1 用于匹配以/sbin/nologin结尾的字符串,$ 表示行的末尾。 (一般是程序用户改为nologin&…

将exe文件添加到注册表中,实现开机时自动运行

目录 一、前言 二、代码 三、使用步骤 1.编译生成exe文件、 2.以管理员身份运行代码 3.打开注册表,验证结果 一、前言 在Windows操作系统中,将exe文件的路径添加到注册表下,主要用于实现程序的开机自动运行功能。 注册表路径为&#xf…

nlp--最大匹配分词(计算召回率)

最大匹配算法是一种常见的中文分词算法,其核心思想是从左向右取词,以词典中最长的词为优先匹配。这里我将为你展示一个简单的最大匹配分词算法的实现,并结合输入任意句子、显示分词结果以及计算分词召回率。 代码 : # happy coding…

3个企业级最佳实践,教你ByteHouse云数仓这么用

随着各业务场景各行业数字化转型加快,数据量呈爆炸式增长。在拥有庞大数据的同时,业务也在分析、查询与响应层面,对数据库系统性能提出了更高要求。云原生技术推动了分布式数据库系统的迭代升级,对云数仓技术而言,“写…

猫头虎博主全栈前沿AI技术领域矩阵社群

猫头虎博主全栈前沿AI技术领域矩阵社群 👋大家好,我是猫头虎!今天我要向大家介绍一个非常重要的社群矩阵——专为全栈前沿AI技术领域的朋友们打造的各种技术交流和资源互助的社群。这些社群不仅能帮助大家快速提升技术水平,还能拓…

科普文:一文搞懂jvm实战(二)Cleaner回收jvm资源

概叙 在JDK9中新增了Cleaner类,该类的作用是用于替代finalize方法,更有效地释放资源并避免内存泄漏。 在JEP260提案中,封装了大部分Sun包内部的API之余,还引入了一些新的API,其中就包含着Cleaner这个工具类。Cleaner承…

Golang | Leetcode Golang题解之第204题计数质数

题目&#xff1a; 题解&#xff1a; func countPrimes(n int) int {primes : []int{}isPrime : make([]bool, n)for i : range isPrime {isPrime[i] true}for i : 2; i < n; i {if isPrime[i] {primes append(primes, i)}for _, p : range primes {if i*p > n {break}…

排序算法(1)之插入排序----直接插入排序和希尔排序

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 排序之插入排序----直接插入排序和希尔排序(1) 收录于专栏【数据结构初阶】 本专栏旨在分享学习数据结构学习的一点学习笔记&#xff0c;欢迎大家在评论区交流讨…

密码学基础之ASN.1编码

简介 ASN.1(Abstract Syntax Notation One)&#xff0c;抽象语法标记。ASN.1是一种国际标准的正式语言&#xff0c;由国际标准化组织&#xff08;ISO&#xff09;和国际电信联盟&#xff08;ITU-T&#xff09;共同制定&#xff0c;用于定义数据结构的抽象语法。它的设计目标是…

双端队列广搜——AcWing 175. 电路维修

双端队列广搜 定义 双端队列广搜&#xff08;Breadth-First Search with a Deque&#xff09;是一种图或树的遍历算法变体&#xff0c;它利用了双端队列&#xff08;Deque&#xff0c;全称Double Ended Queue&#xff0c;允许在其两端进行插入和删除操作&#xff09;作为数据…

docker-compose搭建minio对象存储服务器

docker-compose搭建minio对象存储服务器 最近想使用oss对象存储进行用户图片上传的管理&#xff0c;了解了一下例如aliyun或者腾讯云的oss对象存储服务&#xff0c;但是呢涉及到对象存储以及经费有限的缘故&#xff0c;决定自己手动搭建一个oss对象存储服务器&#xff1b; 首先…

基于YOLOv10的车辆统计跟踪与车速计算应用

文章目录 1、前言2、安装运行环境3、下载v10s模型4、代码实现5、代码详读5.1、导入必要的库5.2、识别车辆5.3、读取视频文件5.4、创建视频写入器5.5、车速计算5.6、统计车辆5.7、应用跟踪5.8、视频处理 6、目标检测系列文章 1、前言 在智能交通系统&#xff08;ITS&#xff09…

FastApi中的常见请求类型

FastApi中的常见请求类型 后端开发语言中&#xff0c;我钟情于node&#xff0c;高效的异步处理真是让我眼前一亮&#xff0c;同时&#xff0c;简单易懂的语法也让我非常倾心 但是但是&#xff0c;因为考虑要写一个深度学习算法的后端接口&#xff0c;所以不得不选用python作为…

【源码+文档+调试讲解】基于vue的线上点餐系统

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了线上点餐系统的开发全过程。通过分析线上点餐系统管理的不足&#xff0c;创建了一个计算机管理线上点餐系统的方案。文章介绍了线上点餐系统的系统分析部分&…