SOFAJRaft源码之Node发起预投票请求(二十四)

(1). 概述前面剖析了Node的启动方法,会判断是否有其它节点,如果有其它节点的情况下,会判断是否要进行选举,这一小篇,剖析下定时任务中的选举处理.

SOFAJRaft源码之Node预投票请求处理(二十五)

(1). 概述上一篇,分析的是Node发起预投票请求,这一篇主要分析,Node发起预投票请求之后,服务端处理流程.

SOFAJRaft源码之Node初始化(二十三)

(1). 概述一直以为Node的角色是网络通信的Server,但是,稍微的剖析了一下之后,发现好像,它在网络通信层属于Client端,这一篇主要是看下Node的初始化方法.

SOFAJRaft源码之Node提交任务(二十八)

(1). 概述在这一篇,继续剖析完一个比较重要的环节,那就是应用任务,这是JRaft提供给业务开发人员的一个重要接口.

SOFAJRaft源码之StateMachine(十五)

(1). 概述终于轮到剖析StateMachine了,其实,剖析完:FSMCaller之后,StateMachine要不要剖析,也没多大的意义了,只是,还是要让整个源码剖析过程比较完整一些,此处,以:CounterStateMachine为例.(...

SOFAJRaft源码之SnapshotWriter(七)

(1). 概述本来是想剖析SnapshotStorage,但是在用UML对SnapshotStorage进行分解时,底层实际上还是依赖一个比较重的:Snapshot,所以,这一篇改成,剖析:Snapshot(2). Snapshot UML图解(...

SOFAJRaft源码之SnapshotStorage(九)

(1). 概述终于到分析的重头戏了,这一小篇主要剖析:SnapshotStorage,它组合了:SnapshotWriter和SnapshotReader的功能,所以,它的职责应该是产生快照以及读取快照.

SOFAJRaft源码之SnapshotReader(八)

(1). 概述上一篇对SnapshotWriter的源码进行了剖析,在这篇,对SnapshotReader进行剖析(相比SnapshotWriter,SnapshotReader还是比较复杂一点)

SOFAJRaft源码之RpcServer初始化(十九)

(1). 概述在准备剖析Replicator时,发现它会与网络通信有一些纠缠不清,因为与网络相关,想要剖析整个链路,不想再进行Mock了,所以,这一小篇主要剖析与网络相关的类:RpcServer

SOFAJRaft源码之RocksDBLogStorage常用方法剖析(三)

(1). 概述在前面对RocksDBLogStorage的初始化进行了剖析,在这里,主要剖析追加日志和获取日志.

SOFAJRaft源码之RocksDBLogStorage初始化(二)

(1). 概述在看源码,我建议还是拆开来看,以点向面去扩展,在这里,主要剖析日志的存储这一块,重点要剖析的对象是:RocksDBLogStorage.(2). UML图 在开始看源码之前,先看下与RocksDBLogStorage类相关的UML图

SOFAJRaft源码之RepeatedTimer(二十一)

(1). 概述这一篇主要剖析:RepeatedTimer,因为,Node的源码里用到了它,我们知道,RAFT启动时,会产生一个随机延迟数进行选举,而这一步是需要构建一个定时任务来着的,上一篇,我们粗略的剖析了一下:HashedWheelTimer...

SOFAJRaft源码之RaftRpcServerFactory(一)

(1). 概述最近一直在看RAFT相关的源码,Atomix突然开始转型(用Go重写),不得不看其它RAFT的实现,从蚂蚁金服官网clone RAFT演示代码,进行源码剖析,在这里先看RPC初始化处理.

SOFAJRaft源码之RaftMetaStorage(六)

(1). 概述固名词义,这个接口的主要功能是元数据的存储.

SOFAJRaft源码之LogManager常用方法剖析(五)

(1). 概述还是按照官网的框架图,以局部作为点,进行剖析,这一小篇主要分析:LogManager,它是对LogStorage进行了包装,为什么要包装呢?因为,这个类它在LogStorage的基础上增加了:缓存和批量提交的功能,咱们一点点的剖析....

SOFAJRaft源码之LogManager初始化(四)

(1). 概述还是按照官网的框架图,以局部作为点,进行剖析,这一小篇主要分析:LogManager,它是对LogStorage进行了包装,为什么要包装呢?因为,这个类它在LogStorage的基础上增加了:缓存和批量提交的功能,咱们一点点的剖析.

SOFAJRaft源码之IteratorImpl(十四)

(1). 概述本来应该要剖析StateMachine的,但是,在剖析FSMCaller(onCommitted方法)时,有涉及到一个类:IteratorImpl,所以,在这一篇主要剖析它了.

SOFAJRaft源码之HashedWheelTimer(二十)

(1). 概述前面剖析了与网络相关的内容,按理来说:应该要开始剖析Replicator,但却发现,如果用Mock来走测试案例剖析的话,自我感觉太虚了,所以,换种方式来解读源码,解析一套网络流程,在剖析之前,要先把Node里所依赖的一些对象给先剖析...

SOFAJRaft源码之FSMCaller下篇(十二)

(1). 概述一直都好奇,FSMCaller与StateMachine的onApply方法是如何交互的,曾还一度怀疑可能不存在交互,这一小篇主要剖析:FSMCaller与StateMachine的onApply方法交互.

SOFAJRaft源码之FSMCaller中篇(十一)

(1). 概述在上一篇对FSMCaller的初始化和基本方法进行了剖析,发现,大量的API操作最终是往Disruptor里发布事件而已,所以,Disruptor的消费(ApplyTaskHandler)是这一篇要分析的.

SOFAJRaft源码之FSMCaller上篇(十)

(1). 概述本来这一节,要剖析SnapshotExecutor,结果,我发现:SnapshotExecutor底层却依赖:FSMCaller,所以,先剖析:FSMCaller(2). FSMCaller UML图

SOFAJRaft源码之ClosureQueue(十三)

(1). 概述本来应该要剖析StateMachine的,但是,在剖析FSMCaller(onCommitted方法)时,有涉及到一个接口:ClosureQueue,所以,在这一篇主要剖析它了.(2). 先看下ClosureQueue接口签名 有...

SOFAJRaft源码之ClientService初始化(十八)

(1). 概述在准备剖析Replicator时,发现它会与网络通信有一些纠缠不清,因为与网络相关,想要剖析整个链路,不想再进行Mock了,所以,这一小篇主要剖析与网络相关的类:ClientService

SOFAJRaft源码之BallotBox之日志确认(十七)

(1). 概述在前面对BallotBox追加任务进行了剖析,在这一部份,主要剖析日志确认这一部份,RAFT要求,过半加一的节点确认后,这条日志才能真正的成功,才能推动commitIndex和applyIndex.

SOFAJRaft源码之BallotBox之追加任务(十六)

(1). 概述本来是要剖析:Replicator的,但是,发现Replicator,它依赖很多的其余组件,所以,这一篇开始,先解决内部组件依赖的剖析,再分析Replicator,这一篇的重头戏是:BallotBox

Atomix源码之服务发现之BootstrapDiscoveryProvider(二)

(1). 概述前面对BootstrapDiscoveryBuilder源码分析,最终是调用:BootstrapDiscoveryBuilder.build方法,构建:BootstrapDiscoveryProvider,所以,这一篇主要对:Boo...

Atomix源码之服务发现之BootstrapDiscoveryBuilder(一)

(1). 概述在前面的节点发现的例子中,我们能看到Atomix用到了构建者模式,通过构建者创建:BootstrapDiscoveryProvider,在这里,先剖析下:BootstrapDiscoveryBuilder.

Atomix源码之业务模型(三)

(1). 概述在继续往下剖析源码Atomix前,需要先看下Atomix的业务模型,即:Atomix的配置类.

Atomix分布式基本数据类型操作(二)

(1). 概述在这一小篇,主要学习Atomix在分布式环境下,基本数据类型的使用.

Atomix服务发现案例(一)

(1). 概述在这一小篇,主要是把Atomix的源码,拉取下来,然后,运行一个测试案例,测试案例的需求是这样的,多个节点组成一个集群启动,能实时(上线/下线)感知其它节点.