自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 Redis Sentinel原理解析

一、概述这篇文章主要用来讲述redis高可用的实现原理,学习redis高可用实现,可以让我们更好的进行系统设计。也可以学习redis中的设计,将其迁移到其他系统的实现中去。二、整体架构监控:Sentinel节点会定期检测Redis数据节点(主从)、其余Sentinel节点是否可达。主节点故障转移:主节点不可用,将从节点晋升为主节点并维护后续正确的主从关系。通知:Sentinel节点会将故障转移的结果通知给应用方。配置提供者:在Redis Sentinel架构中,客户端在初始化的时候连接的是S

2021-04-21 14:39:33 983

原创 Redis复制原理解析

1.概述redis在目前生产环境都是集群部署,通过哨兵保证集群的高可用。但凡涉及到集群以及存储方面的需求,无法避免的就是数据复制问题。这篇文章主要说一下redis复制原理,以及redis复制需要注意的问题,还有就是业务方应该避免的坑。2.核心点建立主从命令slaveofslaveof no one: 取消现有的主从关系,使slave变成masterslaveof host port:将当前实例变成指定节点的从节点。主从命令slaveof实现(定时任务驱动)通过定时任务和主节点建立连接并进行复制

2021-04-21 14:36:54 578

原创 SOFAJRaft 源码分析三(状态机、线性一致性读)

1.概述今天来看一下jraft如何将日志写入到状态机,其实就是业务真正的存储工作。如果我们需要使用jraft,我们对这里的实现就需要足够的了解。然后还会介绍jraft的读取逻辑。2.思路整理对于状态机,我们关注问题如下:何时会将日志同步到状态机?对于节点变化,状态机会做什么?状态机为了业务解藕做了怎么样封装?对于读取操作:主要就是如何做读取优化操作?那我们带着这几个问题一起深入源码,寻找答案吧!3.状态机源码分析主要就是leader和follower将日志应用到状态机的过程。当然le

2020-08-23 17:38:57 863

原创 SOFAJRaft 源码分析二(日志复制、心跳)

1.概述今天来看一下jraft的日志复制,其实读源码并不一定需要完全理解其逻辑,更重要的是对于需求的实现方式。如果能深刻领悟,应用的自己的工作中,是非常有意义的。2.日志同步架构其实主要依赖Replicator、LogManager、LogStorage这三个实现。Replicator,leader发送日志和心跳的功能就是在此实现。每个leader>>都会有一个ReplicatorGroup,用来管理所有followersLogManager用于处理日志,主要就是消费复制或者app

2020-08-23 17:38:26 921 1

原创 SOFAJRaft 源码分析一(启动流程和节点变化)

1.概述前段时间接触了raft协议,唯一的感受就是易于理解。对于raft,在分布式领域还是有一片天地的。当然,光看算法不去工程化就是耍流氓,所以我专门拉了一下sofa团队的jraft代码。然后对其实现进行分析,一方面是为了提高自己的编码功底,一方面也是更加深入的理解。今天我们就先看看其架构实现。然后会对其进行逐一拆分,深入底层代码。sofastack是一个不错平台,大家也可以持续关注。2.架构设计纵观设计架构图,还是非常容易理解的。整个系统围绕着Node进行。涵盖了日志管理、元数据存储、快照、

2020-08-23 17:37:59 1408

原创 CompletableFuture使用场景和实现原理

1.概述CompletableFuture是jdk1.8引入的实现类。扩展了Future和CompletionStage,是一个可以在任务完成阶段触发一些操作Future。简单的来讲就是可以实现异步回调。2.为什么引入CompletableFuture对于jdk1.5的Future,虽然提供了异步处理任务的能力,但是获取结果的方式很不优雅,还是需要通过阻塞(或者轮训)的方式。如何避免阻塞呢?其实就是注册回调。业界结合观察者模式实现异步回调。也就是当任务执行完成后去通知观察者。比如Netty的Chan

2020-08-23 17:37:23 3437 2

原创 ForkJoinPool实现原理(《A Java Fork/Join Framework》)

1.概述是一个可以并行执行任务的线程池。可以处理一个可递归划分的任务并获取结果(分而治之的思想,父任务等待子任务执行完成并组装结果)。因为是多线程去执行任务,可以充分利用多核,提高cpu的利用率。那么他如何做构建管理任务队列,多线程如何去处理任务,以及他的应用场景和性能瓶颈是什么?通过下面原理以及源码我们来进一步了解。2.Fork/Join介绍为分治算法的并行实现。Result solve(Problem problem) { if (problem is small) dire

2020-08-23 17:36:47 473

原创 epoll源码分析以及在Redis中的实现

1.概述这篇文章分析一下linux中epoll的实现原理,主要为了增强自己对网络调用的理解。业界使用epoll的框架比较多,随便就能列出来很多,比如jdk的nio在linux下的实现,以及netty、redis等涉及到长链接网络请求的地方,我们都可以直接使用epoll。文末会从redis源码简单看看如何使用epoll做IO多路复用实现高并发。2.具体实现参考官方文档描述:The central concept of the epoll API is the epoll instance, an i

2020-08-23 17:33:11 271

原创 RMQ问题(from leetcode周赛的折磨)

1.概述这篇blog来源于leetcode。参加了第198场周赛,结果比前几次周赛惨很多。不过没关系,及时发现了自己很菜,路漫漫其修远兮!这边blog主要是针对周赛第四题衍发出来的思考。主要包括RMQ问题以及自己思考题目的过程。价值不是很大,随便写写。2.RMQ问题RMQ(Range Minimum / Maximum Query )主要是用来求区间最值问题研究出来的算法。对于RMQ问题有很多方法可以求解,比如线段树,或者使用动态规划。对于静态区间的RMQ问题,使用DP是非常好理解的。下面我们就来

2020-07-19 18:09:53 436

原创 闲聊网络通信原理、openjdk-socket源码分析

1.概述最近没有写想法,但本着长时间不写会生疏的说法,还是简单写一篇技术文章。这篇主要聊聊网络方面知识,涉及面广,但是不深 a。OK,话不多说,下文主要就是先介绍网络工作原理,然后从语言层面进行具体的实现分析。希望对大家有所帮助。2.网络现状互联网是离不开网络的(说了句废话)。比如IM、游戏、浏览器网页等场景,都需要网络的支持。网络依赖协议,没有协议是无法进行网络传输的。因为别人并不知道你发送的是什么妖魔鬼怪。目前用的最多的就是IP协议。传输层一般是TCP和UDP。游戏场景可能用UDP多一点,毕竟

2020-07-07 20:56:56 412

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除