原创 Redis 實現分佈式鎖之Redlock 算法淺析

保證分佈式鎖有效的三個屬性 Safety Properties:安全性,此處也就是互斥性,任意時刻只能有一個客戶端可以持有鎖 Liveness Property A:無死鎖,即使持有鎖的客戶端崩潰或被分區,也可以獲得鎖 Live

原创 【代碼片段】AspectJ切面通過ProceedingJoinPoint想要獲取當前執行的方法

AspectJ切面通過ProceedingJoinPoint想要獲取當前執行的方法: 錯誤方式: Signature s = pjp.getSignature(); MethodSignature ms = (MethodSign

原创 基於Redis的分佈式鎖RedissonLock原理剖析

RedissonLock#subscribe 訂閱鎖釋放事件,並阻塞等待鎖釋放,有效的解決了無效的鎖申請浪費資源的問題: 基於信號量,當鎖被其它資源佔用時,當前線程通過 Redis 的 channel 訂閱鎖的釋放事件,一旦鎖釋放

原创 【代碼片段】Spring工具類獲取方法參數名

Spring工具類獲取方法參數名 private static final ParameterNameDiscoverer discoverer = new LocalVariableTableParameterNameDisco

原创 PollingWatchService原理剖析

PollingWatchService AbstractWatchService watchService = new PollingWatchService(); PollingWatchService() { //

原创 TODO

Guava LoadingCache Optional

原创 代碼片段

一、AspectJ切面通過ProceedingJoinPoint想要獲取當前執行的方法: 錯誤方式: Signature s = pjp.getSignature(); MethodSignature ms = (MethodSi

原创 併發框架Disruptor開篇

Martin Fowler在自己網站上寫了一篇LMAX架構的文章,在文章中他介紹了LMAX是一種新型零售金融交易平臺,它能夠以很低的延遲產生大量交易。這個系統是建立在JVM平臺上,其核心是一個業務邏輯處理器,它能夠在一個線程裏每秒

原创 loopback address 回送地址

一、相關loopback address基本概念 路由器上設備的Loopback地址是什麼意思? 本地環回接口(或地址),亦稱回送地址(loopback address)。 此類接口是應用最爲廣泛的一種虛接口,幾乎在每臺路由器上都會使

原创 select...for update淺析

作用select...forupdate是爲了在查詢時,避免其他用戶以該表進行插入、修改或刪除等操作,造成表的不一致性。舉幾個例子:select*fromtforupdate會等待行鎖釋放之後,返回查詢結

原创 Synchronized偏向鎖和輕量級鎖的升級

Synchronized偏向鎖和輕量級鎖的升級 一、Synchronized實現原理 1、Synchronized鎖的3中形式 利用 synchronized 實現同步的基礎:Java 中的每一個對象都可以作爲鎖。具體表現爲以下3種形

原创 Raft 實現日誌複製同步

本篇文章以 John Ousterhout(斯坦福大學教授) 和 Diego Ongaro(斯坦福大學獲得博士學位,Raft算法發明人) 在 Youtube 上的講解視頻及 PPT 爲藍本,深入分析 Raft 的內部機制,並以日誌複製

原创 Youtube視頻 Raft lecture (Raft user study)

地址:https://www.youtube.com/watch?v=YbZ3zDzDnrw Joint Consensus 多邊(聯合)共識 The solution is to use two phases to chan

原创 Raft算法之成員變更

成員變更是跟leader選舉、日誌同步、安全、日誌壓縮一樣,都是Raft算法的核心概念。但成員變更是最難理解的。所以單列一篇總結。 將成員變更納入到算法中是Raft易於應用到實踐中的關鍵,相對於Paxos,它給出了明確的變更過程(實踐

原创 【開篇】DLedger —— 基於 Raft 的 Commitlog 存儲 Library

DLedger——基於 Raft 的 Commitlog 存儲 Library 故事的起源 自分佈式系統誕生以來,容災和一致性,一直是經常被討論的話題。 Master-Slave 架構是最容易被想到的設計,簡單而易於實現,被早期大部分