- 博客(12)
- 资源 (13)
- 收藏
- 关注
转载 Redis 实现分布式锁之Redlock 算法浅析
保证分布式锁有效的三个属性Safety Properties:安全性,此处也就是互斥性,任意时刻只能有一个客户端可以持有锁Liveness Property A:无死锁,即使持有锁的客户端崩溃或被分区,也可以获得锁Liveness Property B:容错性,只要大多数 Redis 节点正常,客户端就能获取和释放锁为什么基于故障转移(failover-based)的实现还不够我们先来看看现有大多数 Redis 分布式锁的实现。最简单的方案是在一个实例中创建一个 key,并给这个 key 设
2020-06-22 18:58:42
266
原创 基于Redis的分布式锁RedissonLock原理剖析
RedissonLock#subscribe订阅锁释放事件,并阻塞等待锁释放,有效的解决了无效的锁申请浪费资源的问题:基于信号量,当锁被其它资源占用时,当前线程通过 Redis 的 channel 订阅锁的释放事件,一旦锁释放会发消息通知待等待的线程进行竞争.1、当 this.await 返回 false,说明等待时间已经超出获取锁最大等待时间,取消订阅并返回获取锁失败.2、当 this.await 返回 true,进入循环尝试获取锁.protected final LockPubSub pubS
2020-06-21 13:17:33
799
原创 PollingWatchService原理剖析
PollingWatchServiceAbstractWatchService watchService = new PollingWatchService();PollingWatchService() { // TBD: Make the number of threads configurable scheduledExecutor = Executors.newSingleThreadScheduledExecutor();}初始化时会初始化一个单线程池。接下来,向该w
2020-06-19 16:23:54
545
1
原创 【代码片段】Spring工具类获取方法参数名
Spring工具类获取方法参数名private static final ParameterNameDiscoverer discoverer = new LocalVariableTableParameterNameDiscoverer();String[] paramNames = discoverer.getParameterNames(s);
2020-06-18 13:13:57
220
原创 【代码片段】AspectJ切面通过ProceedingJoinPoint想要获取当前执行的方法
AspectJ切面通过ProceedingJoinPoint想要获取当前执行的方法:错误方式:Signature s = pjp.getSignature();MethodSignature ms = (MethodSignature)s;Method m = ms.getMethod();这种方式获取到的方法是接口的方法而不是具体的实现类的方法,因此是错误的。正确方式:Signa...
2019-06-27 15:35:01
326
原创 Synchronized偏向锁和轻量级锁的升级
Synchronized偏向锁和轻量级锁的升级一、Synchronized实现原理1、Synchronized锁的3中形式利用 synchronized 实现同步的基础:Java 中的每一个对象都可以作为锁。具体表现为以下3种形式。对于普通同步方法,锁是当前实例对象。对于静态同步方法,锁是当前类的 Class 对象。对于同步方法块,锁是 Synchonized 括号里配置的对象。...
2019-02-27 12:13:08
268
原创 Youtube视频 Raft lecture (Raft user study)
地址:https://www.youtube.com/watch?v=YbZ3zDzDnrwJoint Consensus多边(联合)共识The solution is to use two phases to change the configuration. Raft switches first to an intermediate phase called joint con...
2019-02-01 17:35:49
376
原创 Raft算法之成员变更
成员变更是跟leader选举、日志同步、安全、日志压缩一样,都是Raft算法的核心概念。但成员变更是最难理解的。所以单列一篇总结。将成员变更纳入到算法中是Raft易于应用到实践中的关键,相对于Paxos,它给出了明确的变更过程(实践的基础,任何现实的系统中都会遇到因为硬件故障等原因引起的节点变更的操作)。显然,我们可以通过shutdown集群,然后变更配置后重启集群的方式达到成员变更的目的。但...
2019-02-01 17:34:16
419
原创 Raft 实现日志复制同步
本篇文章以 John Ousterhout(斯坦福大学教授) 和 Diego Ongaro(斯坦福大学获得博士学位,Raft算法发明人) 在 Youtube 上的讲解视频及 PPT 为蓝本,深入分析 Raft 的内部机制,并以日志复制同步(Replicated Logs)为背景,详细介绍使用 Raft 协议实现日志复制的共识性问题。目标:日志复制同步Raft 的目标是将日志完整地复制到集群内...
2019-02-01 17:33:02
567
转载 RPC框架几行代码就够了
作者:梁飞链接:http://javatar.iteye.com/blog/1123915來源:iteyeiteye著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。转于自己在公司的Blog: http://pt.alibaba-inc.com/wp/experience_1330/simple-rpc-framework.html因为要给百技上实训课,让新同学们...
2018-10-22 11:21:06
180
原创 详解 Paxos 分布式一致性协议,从零实现分布式日志同步复制(Replicated Logs)
写在前面在团队担任消息队列服务相关开发中,考虑到RocketMQ broker没有实现自动选主和消息同步机制,于是本着兴趣想着尝试实现一下(这简直是给自己挖了一个大坑呀!~),这必然要用到分布式一致性协议。谈到分布式一致性协议,自然会想到Paxos、Raft、Zab等。我大概前后研究了大半个月的paxos。撸了两篇lamport大大的论文(整理了两篇译文,想要看的可以关注公众号《架构随笔》...
2018-10-16 17:37:47
553
《Paxos Made Simple》分布式一致性协议Paxos论文翻译
2018-09-25
《The Part-Time Parliament》分布式一致性协议Paxos论文翻译
2018-09-25
The-Part-Time-Parliament(Paxos算法中文翻译)
2018-06-27
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人