摘要:前言 今天看Jraft的时候发现了很多地方都用到了读写锁,所以心血来潮想要分析以下读写锁是怎么实现的。 先上一个doc里面的例子: 我们一般实例化一个ReentrantReadWriteLock,一般是调用空的构造器创建,所以默认使用的是非公平锁 ReentrantReadWriteLock内部类S 阅读全文
posted @ 2019-12-02 23:27 luozhiyun 阅读 (121) 评论 (2) 编辑
摘要:前言 我在看SOFAJRaft的源码的时候看到了使用了对象池的技术,看了一下感觉要吃透的话还是要新开一篇文章来讲,内容也比较充实,大家也可以学到之后运用到实际的项目中去。 这里我使用RecyclableByteBufferList来作为讲解的例子: RecyclableByteBufferList 阅读全文
posted @ 2019-11-24 22:29 luozhiyun 阅读 (160) 评论 (0) 编辑
摘要:"深入理解Kafka必知必会(1)" Kafka目前有哪些内部topic,它们都有什么特征?各自的作用又是什么? __consumer_offsets:作用是保存 Kafka 消费者的位移信息 __transaction_state:用来存储事务日志消息 优先副本是什么?它有什么特殊的作用? 所谓的 阅读全文
posted @ 2019-11-22 00:02 luozhiyun 阅读 (268) 评论 (0) 编辑
摘要:开篇 其实这篇文章我本来想在讲完选举的时候就开始讲线性一致性读的,但是感觉直接讲没头没尾的看起来比比较困难,所以就有了RheaKV的系列,这是RheaKV,终于可以讲一下SOFAJRaft的线性一致性读是怎么做到了的。所谓线性一致性,一个简单的例子是在 T1 的时间写入一个值,那么在 T1 之后读一 阅读全文
posted @ 2019-11-17 20:46 luozhiyun 阅读 (116) 评论 (0) 编辑
摘要:概述 上一篇讲了RheaKV是如何进行初始化的,因为RheaKV主要是用来做KV存储的,RheaKV读写的是相当的复杂,一起写会篇幅太长,所以这一篇主要来讲一下RheaKV中如何存放数据。 我们这里使用一个客户端的例子来开始本次的讲解: 我们从这个main方法中启动我们的实例,调用rheaKVSto 阅读全文
posted @ 2019-11-10 16:16 luozhiyun 阅读 (132) 评论 (0) 编辑
摘要:Kafka的用途有哪些?使用场景如何? 消息系统: Kafka 和传统的消息系统(也称作消息中间件)都具备系统解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性等功能。与此同时,Kafka 还提供了大多数消息系统难以实现的消息顺序性保障及回溯消费的功能。 存储系统: Kafka 把消息持久化 阅读全文
posted @ 2019-11-07 14:24 luozhiyun 阅读 (431) 评论 (0) 编辑
摘要:由于RheaKV要讲起来篇幅比较长,所以这里分成几个章节来讲,这一章讲一讲RheaKV初始化做了什么? 阅读全文
posted @ 2019-10-30 23:50 luozhiyun 阅读 (166) 评论 (1) 编辑
摘要:开篇 在上一篇文章当中,我们讲解了NodeImpl在init方法里面会初始化话的动作,选举也是在这个方法里面进行的,这篇文章来从这个方法里详细讲一下选举的过程。 由于我这里介绍的是如何实现的,所以请大家先看一下原理: "SOFAJRaft 选举机制剖析 | SOFAJRaft 实现原理" 文章比较长 阅读全文
posted @ 2019-10-26 15:54 luozhiyun 阅读 (161) 评论 (0) 编辑
摘要:看完这个实现之后,感觉还是要多看源码,多研究。其实JRaft的定时任务调度器是基于Netty的时间轮来做的,如果没有看过Netty的源码,很可能并不知道时间轮算法,也就很难想到要去使用这么优秀的定时调度算法了。 对于介绍RepeatedTimer,我拿Node初始化的时候的electionTimer 阅读全文
posted @ 2019-10-19 22:49 luozhiyun 阅读 (233) 评论 (0) 编辑
摘要:简介 pinpoint是开源在github上的一款APM监控工具,它是用Java编写的,用于大规模分布式系统监控。它对性能的影响最小(只增加约3%资源利用率),安装agent是无侵入式的。 各大APM工具,几乎都是根据google这篇经典的Dapper论文而来,一定要读一读。这里是它的源文地址:ht 阅读全文
posted @ 2019-10-13 00:09 luozhiyun 阅读 (289) 评论 (0) 编辑