TFdream / blog

个人技术博客,博文写在 Issues 里。
Apache License 2.0
129 stars 18 forks source link

SOFAJRaft-RheaKV 分布式锁实现剖析 #390

Open TFdream opened 2 years ago

TFdream commented 2 years ago

转载自【金融级分布式架构】SOFAJRaft-RheaKV 分布式锁实现剖析:https://mp.weixin.qq.com/s/ahcbgxWVVmRwrH9Y4-gXBA

SOFAJRaft 是一个基于 Raft 一致性算法的生产级高性能 Java 实现,支持 MULTI-RAFT-GROUP,适用于高负载低延迟的场景。 本文为《剖析 | SOFAJRaft 实现原理》第七篇,本篇作者米麒麟,来自陆金所。《剖析 | SOFAJRaft 实现原理》系列由 SOFA 团队和源码爱好者们出品,项目代号:,文末包含往期系列文章。 SOFAJRaft : https://github.com/sofastack/sofa-jraft

导读

在分布式部署、高并发、多线程场景下,我们经常会遇到资源的互斥访问的问题,最有效、最普遍的方法是给共享资源或者对共享资源的操作加一把锁。在 JDK 中我们可以使用 ReentrantLock 重入锁或者 synchronized 关键字达成资源互斥访问目的,但是由于分布式系统的分布性(即多线程和多进程并且分布在不同机器中),使得两种锁失去原有锁的效果,需要用户自定义来实现分布式锁。

本文重点围绕分布式锁概览、实现方式以及基于 SOFAJRaft 实现等方面剖析 SOFAJRaft-RheaKV 基于 SOFAJRaft 实现分布式锁原理,阐述如何使用 SOFAJRaft 组件提供分布式锁服务功能:

分布式锁

分布式锁是控制分布式系统之间同步访问共享资源的一种方式,用于在分布式系统中协调他们之间的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下便需要使用到分布式锁。分布式锁通过共享标识确定其唯一性,对共享标识进行修改时能够保证原子性和对锁服务调用方的可见性。