分布式系統面試總結:3、分布式鎖(和本地鎖的區別、特點、常見實現方案)

僅供自學回顧使用,請支持javaGuide原版書籍。

本篇文章涉及到的分布式鎖,在本人其他文章中也有涉及。

《JUC:三、兩階段終止模式、死鎖的jconsole檢測、樂觀鎖(版本號機制+CAS實現)+悲觀鎖》:https://blog.csdn.net/zhiaidaidai/article/details/142862002

《redis:四、雙寫一致性的原理和解決方案(延時雙刪、分布式鎖)》:https://blog.csdn.net/zhiaidaidai/article/details/135030539

必看???:《redis:六、setnx獲取鎖、Lua腳本釋放鎖、基于redisson的分布式鎖(看門狗機制、主從一致性、紅鎖)》:https://blog.csdn.net/zhiaidaidai/article/details/135064906

1.本地鎖和分布式鎖

對于單機多線程來說,在 Java 中,我們通常使用 synchronized 關鍵字這類 JDK 自帶的 本地鎖 來控制一個 JVM 進程內的多個線程對本地共享資源的訪問,如下:

在這里插入圖片描述
分布式系統下,不同的服務/客戶端通常運行在獨立的 JVM 進程上。如果多個 JVM 進程共享同一份資源的話,使用本地鎖就沒辦法實現資源的互斥訪問了。于是,分布式鎖 就誕生了。
在這里插入圖片描述

2.分布式鎖的特點

一個最基本的分布式鎖需要滿足:

  • 互斥:任意一個時刻,鎖只能被一個線程持有。
  • 高可用:鎖服務是高可用的,當一個鎖服務出現問題,能夠自動切換到另外一個鎖服務。并且,即使客戶端的釋放鎖的代碼邏輯出現問題,鎖最終一定還是會被釋放,不會影響其他線程對共享資源的訪問。這一般是通過超時機制實現的。
  • 可重入:一個節點獲取了鎖之后,還可以再次獲取鎖

除了上面這三個基本條件之外,一個好的分布式鎖還需要滿足下面這些條件:

  • 高性能:獲取和釋放鎖的操作應該快速完成,并且不應該對整個系統的性能造成過大影響。
  • 非阻塞:如果獲取不到鎖,不能無限期等待,避免對系統正常運行造成影響。

3.常見分布式鎖實現方案

常見分布式鎖實現方案如下:

  • 基于關系型數據庫比如 MySQL 實現分布式鎖。
    • 一般是通過唯一索引或者排他鎖實現。
    • 一般不會使用這種方式,問題太多比如性能太差、不具備鎖失效機制。
  • 基于分布式協調服務 ZooKeeper 實現分布式鎖。
  • 基于分布式鍵值存儲系統比如 Redis 、Etcd 實現分布式鎖。

關系型數據庫的方式基于 ZooKeeper 或者 Redis 實現分布式鎖這兩種實現方式要用的更多一些。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/74793.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74793.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/74793.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu 系統上完全卸載 Docker

以下是在 Ubuntu 系統上完全卸載 Docker 的分步指南 一.卸載驗證 二.卸載步驟 1.停止 Docker 服務 sudo systemctl stop docker.socket sudo systemctl stop docker.service2.卸載 Docker 軟件包 # 移除 Docker 核心組件 sudo apt-get purge -y \docker-ce \docker-ce-cli …

Postman 版本信息速查:快速定位版本號

保持 Postman 更新至最新版本是非常重要的,因為這能讓我們享受到最新的功能,同時也保證了軟件的安全性。所以,如何快速查看你的 Postman 版本信息呢? 如何查看 Postman 的版本信息教程

EF Core 異步方法

文章目錄 前言一、為什么使用異步方法二、核心異步方法1)查詢數據2)保存數據3)事務處理 三、異步查詢最佳實踐1)始終使用 await2)組合異步操作3)并行查詢(謹慎使用) 四、異常處理五、…

裝飾器模式介紹和典型實現

裝飾器模式(Decorator Pattern)是一種結構型設計模式,它允許你通過將對象放入包含行為的特殊封裝對象中來為原對象添加新的功能。裝飾器模式的主要優點是可以在運行時動態地添加功能,而不需要修改原對象的代碼。這使得代碼更加靈活…

【 <二> 丹方改良:Spring 時代的 JavaWeb】之 Spring Boot 中的日志管理:Logback 的集成

<前文回顧> 點擊此處查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、開篇整…

神經網絡知識點整理

目錄 ?一、深度學習基礎與流程 二、神經網絡基礎組件 三、卷積神經網絡&#xff08;CNN&#xff09;?編輯 四、循環神經網絡&#xff08;RNN&#xff09;與LSTM 五、優化技巧與調參 六、應用場景與前沿?編輯 七、總結與展望?編輯 一、深度學習基礎與流程 機器學習流…

【sql優化】where 1=1

文章目錄 where 11問題描述錯誤實現正確實現性能對比測試 where 11 問題描述 在動態 SQL 拼接場景中&#xff0c;開發者常使用 WHERE 11 簡化條件拼接邏輯&#xff08;避免處理首個條件的 AND&#xff09;。理論上&#xff0c;數據庫優化器會忽略 11&#xff0c;但字符串拼接…

車載以太網網絡測試 -24【SOME/IP概述】

目錄 1 摘要2 車載SOME/IP 概述2.1發展背景以及應用2.1.1車載 SOME/IP 背景2.1.2 車載 SOME/IP 應用場景 2.3 什么是SOME/IP2.3.1 SOME/IP定義2.3.2 SOME/IP在協議棧中的位置 3 SOA是什么4 SOME/IP主要功能5 SOME/IP標準 1 摘要 本文主要介紹SOME/IP的背景以及在車載行業的發展…

vue3中,route4,獲取當前頁面路由的問題

首先應用場景如下&#xff1a; 在main.js里面&#xff0c;引入的是路由的配置文件&#xff0c;如下&#xff1a; import {router} from /router; app.use(router); 路由配置文件router.js如下&#xff1a; import { createRouter, createWebHistory } from vue-router; imp…

ip改變導致的數據庫連接不上

前言 需要用到路由器&#xff0c;所以先把家里的路由器給拆了先用著。新的路由器到了之后&#xff0c;更換上新的路由器之后&#xff0c;調用到服務會有報錯&#xff0c;記錄一下更換路由器之后ip重新分配服務可能會報的錯. 進一步可以看到有關網路在服務當中的影響。 正文 …

Chrome 開發環境快速屏蔽 CORS 跨域限制!

Chrome 開發環境快速屏蔽 CORS 跨域限制【詳細教程】 ? 為什么需要臨時屏蔽 CORS&#xff1f; 在前后端開發過程中&#xff0c;我們經常會遇到 跨域請求被瀏覽器攔截 的問題。例如&#xff0c;你在 http://localhost:3000 調用 https://api.example.com 時&#xff0c;可能會…

【力扣hot100題】(009)和為K的子數組

還是太菜了&#xff08;我&#xff09;&#xff0c;寫了半天滑動窗口&#xff0c;然后看了答案又寫了半天時間超限…… 總之就是記錄每前n個子串的和&#xff0c;然后使用hash存儲和為某個值出現的次數&#xff0c;每次求得新和就看看是否存在前面新和-k的字符&#xff0c;有的…

使用 rsync 進行服務器文件同步與優化

使用 Rsync 工具在兩臺 Linux 服務器之間同步文件 Rsync 是一種高效的文件同步工具&#xff0c;它可以在本地或遠程服務器之間同步文件和目錄。Rsync 通過僅傳輸文件的變化部分來減少數據傳輸量&#xff0c;因此特別適合用于定期備份或同步大量數據。本文將詳細介紹如何將 A 服…

卷積神經網絡 - 微步卷積、空洞卷積

一、微步卷積 微步卷積&#xff08;Fractionally Strided Convolution&#xff09;&#xff0c;通常也稱為轉置卷積&#xff08;Transposed Convolution&#xff09;或反卷積&#xff08;Deconvolution&#xff09;&#xff0c;是深度學習&#xff08;尤其是卷積神經網絡&…

詳解java體系實用知識總結

0.java技術能力框架 基礎模塊應用模塊綜合模塊技術崗位與面試流程常用工具集系統架構設計計算機基礎常用框架微服務架構jvm原理緩存容器化多線程隊列云計算&#xff08;阿里云/aws&#xff09;設計模式數據庫數據結構與算法 1.常用設計模式與應用場景 工廠模式&#xff1a;s…

設計模式之創建型5種

設計模式 為什么設計模式是23種創建型 對象創建為什么設計模式是23種 設計模式之所以被歸納為23種,而非其他數量,源于GoF(Gang of Four)在1994年的系統性總結和分類。這一數量的確定并非偶然,而是基于以下核心原因: 他們遵循“大三律”(Rule of Three),即只有經過三個…

Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange)

文章目錄 Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange)ONNX基本概念ONNX(Open Neural Network Exchange)ONNX Runtime ONNX Runtime 在Oracle數據庫中的集成參考 Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange) 我們在看【…

統一語言學習范式

摘要 現有的預訓練模型通常針對特定類別的問題。迄今為止&#xff0c;關于何種架構和預訓練設置應為最佳似乎仍未達成共識。本文提出了一個統一的框架&#xff0c;用于預訓練在多種數據集和設置中普遍有效的模型。我們首先將架構原型與預訓練目標這兩個常被混為一談的概念進行…

Flutter項目升級到指定版本的詳細步驟指南

一、升級前的準備工作 備份項目 使用Git提交當前所有修改&#xff1a;git commit -am "Pre-upgrade backup"或直接復制項目文件夾 查看當前環境信息 flutter --version flutter doctor二、升級Flutter SDK到指定版本 方法1&#xff1a;通過版本管理工具升級&#x…

22、web前端開發之html5(三)

六. 離線存儲與緩存 在網絡環境不穩定或需要優化資源加載速度的場景下&#xff0c;離線存儲與緩存技術顯得尤為重要。HTML5引入了多種離線存儲和緩存機制&#xff0c;幫助開發者提升用戶體驗。本節將詳細介紹Application Cache、localStorage、sessionStorage以及IndexedDB等技…