栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Dledger】-源码解读

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Dledger】-源码解读

一、背景

Dledger是RocketMQ4.5以后推出来的功能,用于实现副本的集群选举

源码地址: 机智的路易 / dledger

二、架构设计 通信层 (一)协议

使用Raft算法

(二)请求与响应

Entry

  • GetEntries
  • PullEntries
  • PushEntries

HeatBeat

VoteRequest

Metadata

  • MetadataRequest
  • MetadataRepose

AppendEntry

  • AppendEntryRequest
  • AppendEntryReponse
  • BatchAppendEntryRequest

异步
基本都使用异步操作来实现

存储层 (一)Command

对操作系统的操作,提供了4种命令

  • GetCommand:
  • LeadershipTransferCommand:
  • ReadFileCommand:
  • AppendCommand:
(二)mmp 三、启动与停止 (一)启动参数

使用com.beust.jcommander.JCommander接收启动的环境变量传入,实现命令行交互。

参数                  默认值                含义
-g  --group           default               组名
-i  --selfId          n0                    id
-p  --peers           n0-localhost:20911    端口
-s  --storeBaseDir    D:/tmp/dledgerstore   保存目录

默认存储在当前磁盘下的

/tmp/dledgerstore/dledger-n0

DLedgerConfig

(二)启动流程

(1)属性注入(没属性,则默认)
(2)根据属性创建 DLedgerServer

(3)启动DLedgerServer
启动一系列服务(以下服务的内容待更新)


①存储:启动线程flushData和cleanSpace
②RPC:默认启动了两个Netty的客户端与服务端 (实现双向通信)

③推送:

④选举:获取角色

⑤定时任务:每秒执行一次checkPreferredLeader
单程线程线程池,里面是一个守护线程,进行

(4)添加优雅停止的钩子

(三)钩子函数
关闭方式有三种:

正常关闭:当最后一个非守护线程结束 / 调用了System.exit / 通过其他特定平台关闭(发送SIGINT,SIGTERM信号等)
强制关闭:调用Runtime.halt方法 / 直接kill JVM进程(发送SIGKILL信号)
异常关闭:运行中遇到RuntimeException异常等。

shutdown钩子函数使用案例

Thread thread1 = new Thread(() -> System.out.println("thread1..."));

// 定义关闭线程
Thread shutdownThread = new Thread(() -> System.out.println("shutdownThread..."));

// jvm关闭的时候先执行该线程钩子
Runtime.getRuntime().addShutdownHook(shutdownThread);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007419.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号