单机锁与分布式锁
文章平均质量分 91
深入理解单机锁与分布式锁
MayMatrix
J2EE .
展开
-
redis set NX EX 命令
Redis 命令参考»SETSET key value [EX seconds] [PX milliseconds] [NX|XX]将字符串值value关联到key。如果key已经持有其他值,SET就覆写旧值,无视类型。对于某个原本带有生存时间(TTL)的键来说, 当SET命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。可选参数从 Redis 2.6.12 版本开始,SET命令的行为可以通过一系列参数来修改:EXsecond:设置键的过...转载 2021-03-30 17:27:39 · 36931 阅读 · 0 评论 -
Redis分布式锁解决方案 set nx px + LUA
Redis分布式锁解决方案我们知道分布式锁的特性是排他、避免死锁、高可用。分布式锁的实现可以通过数据库的乐观锁(通过版本号)或者悲观锁(通过for update)、Redis的setnx()命令、Zookeeper(在某个持久节点添加临时有序节点,判断当前节点是否是序列中最小的节点,如果不是则监听比当前节点还要小的节点。如果是,获取锁成功。当被监听的节点释放了锁(也就是被删除),会通知当前节点。然后当前节点再尝试获取锁,如此反复)本篇文章,主要讲如何用Redis的形式实现分布式...转载 2021-03-19 17:48:21 · 3803 阅读 · 1 评论 -
Java并发之AQS原理浅析
锁是最常用的同步方法之一,在高并发的环境下激烈的锁竞争会导致程序的性能下降,所以我们自然有必要深入的学习一下锁的相关知识。 在介绍Lock之前,我们需要先熟悉一个非常重要的基础组件,JUC包下的核心基础组件。也是实现大部分同步需求的基础。学习该组件是学习JUC绕不开的一块内容。该组件就是AQS。AQS简介AQS:AbstractQueuedSynchronizer,即队列同步器。它是构建锁或者其他同步组件的基础框架(如ReentrantLock、ReentrantReadWrite...转载 2020-06-10 15:59:52 · 244 阅读 · 0 评论 -
java为什么还需要分布式锁?锁的演进
原文:https://baijiahao.baidu.com/s?id=1655515801283332550&wfr=spider&for=pc目前的项目单体结构的基本上已经没有了,大多是分布式集群或者是微服务这些。既然是多台服务器。就免不了资源的共享问题。既然是资源共享就免不了并发的问题。针对这些问题,redis也给出了一个很好的解决方案,那就是分布式锁。这篇文章主要是针对为什么需要使用分布式锁这个话题来展开讨论的。不喜勿喷。前一段时间在群里有个兄弟问,既然分布...转载 2020-05-29 15:54:57 · 337 阅读 · 0 评论 -
Redisson实现Redis分布式锁的原理
Redisson实现Redis分布式锁的原理一、写在前面现在面试,一般都会聊聊分布式系统这块的东西。通常面试官都会从服务框架(Spring Cloud、Dubbo)聊起,一路聊到分布式事务、分布式锁、ZooKeeper等知识。所以咱们这篇文章就来聊聊分布式锁这块知识,具体的来看看Redis分布式锁的实现原理。说实话,如果在公司里落地生产环境用分布式锁的时候,一定是会用开源类库的,比如Redis分布式锁,一般就是用Redisson框架就好了,非常的简便易用。大家如果...转载 2020-05-22 17:46:05 · 4508 阅读 · 2 评论 -
共识算法:Raft
拜占庭将军问题https://www.jianshu.com/p/26adc88a1f49针对简化版拜占庭将军问题,Raft 解决方案类比我们还是用拜占庭将军的例子来帮助理解 Raft。假设将军中没有叛军,信使的信息可靠但有可能被暗杀的情况下,将军们如何达成一致性决定?Raft 的解决方案大概可以理解成 先在所有将军中选出一个大将军,所有的决定由大将军来做。选举环节:比如说现在一共有3个将军 A, B, C,每个将军都有一个随机时间的倒计时器,倒计时一结束,这个将军就会把自己..转载 2020-05-15 17:50:24 · 368 阅读 · 0 评论 -
Zookeeper:一致性协议:Zab协议(一)
什么是Zab协议 Zab 协议的作用 Zab 协议原理 Zab 协议核心 Zab 协议内容 原子广播 崩溃恢复 如何保证数据一致性 Zab 协议如何数据同步 如何处理需要丢弃的 Proposal Zab 协议实现原理 选主过程 什么是Zab协议?Zab协议 的全称是 Zookeeper Atomic Broadcast (Zookeeper原子广播协议)。Zookeeper 是通过 Zab 协议来保证分布式事务的最终一致性。 Zab协议是为分布式协调服务Zookeepe.转载 2020-05-15 15:20:54 · 243 阅读 · 0 评论 -
一致性及解决一致性的两种方式:2PC和3PC
1一致性1.1 简述一致性,是指对每个节点一个数据的更新,整个集群都知道更新,并且是一致的假设一个具有N个节点的分布式系统,当其满足以下条件时,我们说这个系统满足一致性:全认同: 所有N个节点都认同一个结果 值合法: 该结果必须由N个节点中的过半节点提出 可结束: 决议过程在一定时间内结束,不会无休止地进行下去1.2 面临着的问题消息传递异步无序: 现实网络不是一个可靠的信道,存在消息延时、丢失,节点间消息传递做不到同步有序 节点宕机: 节点持续宕机,不会恢复 节点宕机恢复..转载 2020-05-14 17:46:33 · 1519 阅读 · 1 评论 -
分布式一致性算法(二)Raft算法
一、更加直观的Raft算法Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它。为了提高理解性,Raft 将一致性算法分为了几个部分,包括领导选取(leader selection)、日志复制(log replication)、安全(safety),并且使用了更强的一致性来减少了必须需要考虑的状态。1.解决什么问题分布式存储系统通常通过维...转载 2020-03-05 11:49:19 · 555 阅读 · 0 评论 -
分布式一致性算法(一)Paxos算法
从分布式一致性到共识机制(一)Paxos算法从分布式系统的CAP理论出发,关注分布式一致性,以及区块链的共识问题及解决。区块链首先是一个大规模分布式系统,共识问题本质就是分布式系统的一致性问题,但是又有很大的不同。工程开发中,认为系统中存在故障(fault),但不存在恶意(corrupt)节点,而区块链,特别是公开链是落地到物理世界中,涉及到人性和利益关系,不可避免的存在信任以及恶意攻击...转载 2020-03-05 11:46:10 · 584 阅读 · 0 评论 -
分布式事务[7]柔性事务:可靠消息最终一致性
柔性事务:可靠消息最终一致性消息发送一致性:是指产生消息的业务动作与消息发送的一致。也就是说,如果业务操作成功,那么由这个业务操作所产生的消息一定要成功投递出去(一般是发送到kafka、rocketmq、rabbitmq等消息中间件中),否则就丢消息。柔性事务、可靠消息最终一致性、异步确保性下面用伪代码进行演示消息发送和投递的不可靠性:1、先进行数据库操作,再发送消息...转载 2019-09-05 10:04:01 · 332 阅读 · 0 评论 -
jdk1.8 LongAdder源码学习
LongAdder是jdk8新增的用于并发环境的计数器,目的是为了在高并发情况下,代替AtomicLong/AtomicInt,成为一个用于高并发情况下的高效的通用计数器。高并发下计数,一般最先想到的应该是AtomicLong/AtomicInt,AtmoicXXX使用硬件级别的指令 CAS 来更新计数器的值,这样可以避免加锁,机器直接支持的指令,效率也很高。但是AtomicXXX中的 CAS ...转载 2019-09-05 09:57:29 · 113 阅读 · 0 评论 -
Java中的Unsafe
Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存。Java中的Unsafe类为我们提供了类似C++手动管理内存的能力。Unsafe类,全限定名是sun.misc.Unsafe,从名字中我们可以看出来这个类对普通程序员来说是“危险”的,一般应用开发者不会用到这个类。Unsafe类是"final"的,不允许继承。且构造函数...转载 2019-09-05 09:44:06 · 305 阅读 · 0 评论 -
源码阅读:全方位讲解LongAdder
高并发下计数功能最好的数据结构就是LongAdder与DoubleAdder,低并发下效率也非常优秀,这是我见过的java并发包中设计的最为巧妙的类,从软硬件方面将java并发累加操作优化到了极致,所以应该我们应该弄清楚它的每一行代码为什么要这样做,它俩的实现大同小异,下面以LongAdder类为例介绍下它的实现。Striped64类public class LongAdder extend...转载 2019-09-05 10:00:50 · 224 阅读 · 0 评论 -
详细解读 Github 上发布仅一个月就获得4k+ star 的分布式事务解决方案
导读:阿里分布式事务开源项目Fescar,自1月9日发布第一个版本以来,便受到了开发者的极大关注,目前收获的star数已超过4700,本文将详细解读这款分布式事务解决方案,希望对您有所帮助。FESCAR on GitHubhttps://github.com/alibaba/fescar更新:FESCAR 已更新为Seata微服务倡导将复杂的单体应用拆分为若干...转载 2019-09-05 10:01:33 · 768 阅读 · 0 评论 -
Spring Cloud分布式事务终极解决方案探讨
开源项目我们利用消息队列实现了分布式事务的最终一致性解决方案,请大家围观。可以参考GithubCoolMQ源码,项目支持网站:http://rabbitmq.org.cn,最新文章或实现会更新在上面二 前言阿里2017云栖大会《破解世界性技术难题!GTS让分布式事务简单高效》中,阿里声称提出了一种破解世界性难题之分布式事务的终极解决方案,无论是可靠性、还是处理速率都领先于市面上所有...转载 2019-09-05 10:01:48 · 1338 阅读 · 0 评论 -
分布式事务:不过是在一致性、吞吐量和复杂度之间,做一个选择
这是一个开撕的话题,我经历过太多的关于分布式事务的需求:“有没有简单的方案,像使用数据库事务那样,解决分布式数据一致性的问题”。特别是微服务架构流行的今天,一次交易需要跨越多个“服务”、多个数据库来实现,传统的技术手段,已经无法应对和满足微服务情况下这些复杂的场景了。针对微服务下的交易业务如何保障数据一致性,本文尽量做到理论结合实践,将我们在实际产品中用到的分布式事务实现机制,和大家扒一扒,希望能...转载 2019-09-05 10:02:41 · 187 阅读 · 0 评论 -
剖析Disruptor:为什么会这么快?(三)揭秘内存屏障(validate关键词解析)
主题是什么?我写这个系列的博客主要目的是解析Disruptor是如何工作的,并深入了解下为什么这样工作。理论上,我应该从可能准备使用disruptor的开发人员的角度来写,以便在代码和技术论文[Disruptor-1.0.pdf]之间搭建一座桥梁。这篇文章提及到了内存屏障,我想弄清楚它们到底是什么,以及它们是如何应用于实践中的。什么是内存屏障?它是一个CPU指令。没错,又一次,我们在讨...转载 2019-08-28 16:59:53 · 402 阅读 · 0 评论 -
java中关键字volatile的作用
volatile让变量每次在使用的时候,都从主存中取。而不是从各个线程的“工作内存”。volatile具有synchronized关键字的“可见性”,但是没有synchronized关键字的“并发正确性”,也就是说不保证线程执行的有序性。也就是说,volatile变量对于每次使用,线程都能得到当前volatile变量的最新值。但是volatile变量并不保证并发的正确性。=======...转载 2019-08-28 16:41:07 · 202 阅读 · 0 评论 -
从构建分布式秒杀系统聊聊Disruptor高性能队列
Disruptor学习网站:http://ifeve.com/disruptor-getting-started/前言秒杀架构持续优化中,基于自身认知不足之处在所难免,也请大家指正,共同进步。文章标题来自码友<tukangzheng>的建议,希望可以把阻塞队列ArrayBlockingQueue这个队列替换成Disruptor,由于之前曾接触过这个东西,听说很不错,正好借...转载 2019-08-28 16:00:57 · 244 阅读 · 0 评论 -
CAP原理分析[2]维基百科 解释
前言众所周知,CAP理论是架构师在设计分布式系统过程中,处理数据一致性问题时必须考虑的基石级理论(圣经级的,V)。大意是说,在分布式网络分区环境中,数据的一致性、可用性和分区容忍性三者之间,至多只能保证两者,无法三者同时保证。对于CAP理论,个人刚接触时感觉很容易理解,不就是讲的一个在分布式环境下鱼和熊掌不能兼得的问题吗?诚然,如果从直观上泛泛而谈,的确不难,即在多节点的网络环境中,当要求数据强...转载 2019-08-30 10:27:32 · 769 阅读 · 0 评论 -
CAP原理分析[4]ACID和CAP的详尽比较
ACID和CAP的详尽比较 事务机制ACID和CAP理论是数据管理和分布式系统中两个重要的概念,很不巧,这两个概念中都有相同的“C”代表 "Consistency"一致性,但是实际上是完全不同的意义,下面是比较两个概念的不同之处。什么是ACID? 事务的定义和实现一直随着数据管理的发展在演进,当计算机越来越强大,它们就能够被用来管理越来越多数据,最终,多个用户可以在一台计算机上共...转载 2019-08-30 10:37:24 · 264 阅读 · 0 评论 -
分布式锁解决并发的三种实现方式
在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。有的时候,我们需要保证一个方法在同一时间内只能被同一个线程执行。在单机环境中,Java中其实提供了很多并发处理相关的API,但是这些API在分布式场景中就无能为力了。也就是说单纯的Java Api并不能提供分布式锁的能力。所以针对分布式锁的实现目前有多种方案:分布式锁一般有三种实现方式:1. ...转载 2019-09-04 15:21:23 · 313 阅读 · 0 评论 -
分布式锁的三种实现方式及对比分析(代码实现细节)
一、问题介绍日常工作中很多场景下需要用到分布式锁,例如:任务运行(多个节点同一时刻同一个任务只能在一个节点上运行(分片任务除外)),交易请求接收(前端交易请求发送时,可能由于两次提交,后端需要识别出这是一个交易)等,怎么样实现一个分布式锁呢?一般有:zookeeper、redis、database等三种实现方式。二、分布式锁实现2.1、zookeeper2.1.1、原理zook...转载 2019-09-04 15:23:06 · 421 阅读 · 0 评论 -
分布式事务-初步理解及解决方案
0Github1 面试题分布式事务了解吗?你们如何解决分布式事务问题的?2 考点分析只要聊到做了分布式系统,必问分布式事务,若你对分布式事务一无所知的话,确实很坑,起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。现在面试,分布式系统成了标配,而分布式系统带来的分布式事务也成了标配.你做系统肯定要用事务,那你用事务的话,分布式系统之后肯定要用分布式事务.先不...转载 2019-09-04 15:51:12 · 137 阅读 · 0 评论 -
CAP与BASE理论
1.经典的分布式系统理论-CAP 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。Brewer认为在设计一个大规模的分布式系统时会遇到三个特性:一致性(consistency)、可用性(Availability)、分区容错(partition-tolerance),而一个分布式系统最多只能满足其中的2项。2年后,麻省理工学院的Seth...转载 2019-09-04 16:12:31 · 175 阅读 · 0 评论 -
分布式事务[1]分布式事务概述
1.0 分布式事务概述2018-02-05 02:05:2617,34181、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组SQL语句组成。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity):个事务是...转载 2019-09-04 16:14:48 · 177 阅读 · 0 评论 -
分布式事务[2]mysql 对XA事务的支持
2.0 mysql 对XA事务的支持2018-02-05 02:20:504,9941MySQL 从5.0.3开始支持XA分布式事务,且只有InnoDB存储引擎支持。MySQL Connector/J 从5.0.0版本之后开始直接提供对XA的支持。需要注意的是,在DTP模型中,mysql属于资源管理器(RM)。而一个完整的分布式事务中,一般会存在多个RM...转载 2019-09-04 16:17:15 · 361 阅读 · 0 评论 -
分布式事务[3]3.0 JTA规范
3.0 JTA规范2018-02-05 02:31:404,9081JTA规范下载地址:http://download.oracle.com/otn-pub/jcp/jta-1.1-spec-oth-JSpec/jta-1_1-spec.pdfJTA规范事务模型Java事务API(JTA:Java Transaction API)和它的同胞Java事务服务(JTS...转载 2019-09-04 16:19:21 · 191 阅读 · 0 评论 -
分布式事务[4] 柔性事务:最大努力通知
5.0 柔性事务:最大努力通知2018-02-05 02:51:055,9560最大努力通知型( Best-effort delivery)是最简单的一种柔性事务,适用于一些最终一致性时间敏感度低的业务,且被动方处理结果 不影响主动方的处理结果。典型的使用场景:如银行通知、商户通知等。最大努力通知型的实现方案,一般符合以下特点: 1、不可靠消息:业务活动主动方,...转载 2019-09-04 16:21:40 · 511 阅读 · 0 评论 -
分布式事务[6]柔性事务 :TCC两阶段补偿型
6.0 柔性事务 :TCC两阶段补偿型2018-02-05 03:12:0422,77112 TCC方案是可能是目前最火的一种柔性事务方案了。关于TCC(Try-Confirm-Cancel)的概念,最早是由Pat Helland于2007年发表的一篇名为《Life beyond Distributed Transactions:an Apostate’s Opinion》...转载 2019-09-05 10:03:13 · 468 阅读 · 0 评论 -
浅谈,分布式事务与解决方案
分布式事务与主流解决方案之理论篇前言 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。产生原因...转载 2019-09-05 10:02:58 · 218 阅读 · 0 评论 -
AtomicLong与LongAdder对比
前言《阿里巴巴 Java开发手册》读后感—拥抱规范,远离伤害:https://blog.csdn.net/f641385712/article/details/84930279写这篇博文的原因,是因为我今天在看阿里的规范手册的时候(记录在了这里:《阿里巴巴 Java开发手册》读后感—拥抱规范,远离伤害),发现了有一句规范是这么写的:如果是count++操作,使用如下类实现: Atomi...转载 2019-08-28 17:29:40 · 1048 阅读 · 0 评论