分布式鎖的概念與應用場景

一、分布式鎖的核心概念

分布式鎖是一種在分布式系統環境下,用于保證多個進程/節點對共享資源實現互斥訪問的機制。其本質是通過某種中間件(如Redis、ZooKeeper等)實現跨節點的鎖控制,確保在分布式環境中,同一時刻只有一個客戶端能獲取鎖并執行關鍵操作,避免出現并發沖突。

二、分布式鎖應用場景

場景1:分布式定時任務重復執行
  • 業務背景:多個服務器節點部署相同的定時任務(如每日生成報表),需避免重復執行。
  • 無分布式鎖的問題
    1. 節點A和節點B在同一時間觸發任務;
    2. 兩個節點同時生成報表,導致數據重復寫入或資源浪費。
  • 分布式鎖的作用
    任務執行前先獲取鎖,只有獲取鎖的節點能執行任務,其他節點等待或跳過,避免重復操作。
場景2:微服務接口冪等性保障
  • 業務背景:支付接口可能因網絡重試導致多次調用,需保證同一筆支付只扣款一次。
  • 無分布式鎖的問題
    1. 用戶點擊支付后,因網絡延遲導致客戶端重試;
    2. 多個支付請求同時到達服務器,可能多次扣除余額。
  • 分布式鎖的作用
    以訂單ID為鍵獲取分布式鎖,確保同一訂單的支付請求僅能被處理一次,實現冪等性。

三、分布式鎖核心特性與需求

分布式鎖需滿足以下關鍵特性:

  1. 互斥性:同一時刻僅一個節點持有鎖;
  2. 安全性:鎖只能由持有者釋放,避免誤釋放(如用唯一標識校驗);
  3. 容錯性:節點崩潰時鎖需自動失效(如超時機制);
  4. 可用性:中間件集群故障時,鎖服務仍能正常工作(如ZooKeeper的選舉機制)。

四、分布式鎖常見的實現方式

(一)基于關系型數據庫(如MySQL)的實現
1. 實現原理
  • 唯一索引方案:通過插入唯一索引記錄標識鎖狀態,插入成功即獲取鎖
  • 排他鎖方案:使用SELECT ... FOR UPDATE語句加行鎖
2. 核心問題
問題類型具體表現
性能瓶頸數據庫IO操作耗時高,并發場景下頻繁加鎖導致吞吐量驟降(TPS通常<1000)
鎖失效缺失無自動過期機制,客戶端崩潰會導致鎖永久占用,需額外實現定時任務清理死鎖
可靠性不足主從切換時可能出現鎖丟失(如MySQL半同步復制延遲)
集群復雜需處理數據庫連接池管理、事務一致性等問題,實現復雜度高
3. 適用場景
  • 小規模系統(QPS<100)
  • 對性能要求極低的測試環境
  • 無高可用需求的簡單場景
(二)基于Redis的分布式鎖
1. 實現演進
  • 基礎方案:使用SET NX key value加鎖,DEL key釋放鎖(存在誤刪風險)
  • 安全方案SET key value NX PX 30000(加鎖時設置唯一標識+過期時間)
  • Redlock算法(多實例方案):
    1. 依次向N個Redis實例申請鎖
    2. 超過半數實例成功則認為獲取鎖
    3. 釋放鎖時向所有實例發送釋放請求
2. 核心優缺點
  • 優勢
    • 高性能:單實例TPS可達10萬+,適合高并發場景
    • 輕量級:純內存操作,實現簡單
    • 靈活擴展:支持主從/集群模式
  • 風險點
    • 主從切換時可能丟鎖(異步復制導致)
    • 需嚴格控制過期時間(過短易誤釋放,過長導致死鎖)
3. Redlock算法實戰參數
參數推薦值說明
實例數N5保證半數以上節點可用(3節點需2成功,5節點需3成功)
鎖過期時間5-10s需大于網絡RTT+業務處理時間,建議為業務耗時的1.5倍
重試間隔50-100ms失敗后隨機延遲重試,避免驚群效應
(三)基于ZooKeeper的分布式鎖
1. 實現原理
  • 利用ZooKeeper的臨時順序節點特性:
    1. 客戶端在/locks路徑下創建臨時順序節點
    2. 檢查是否為最小序號節點,是則獲取鎖
    3. 非最小節點監聽前一節點刪除事件
    4. 釋放鎖時刪除臨時節點,觸發后續節點獲取鎖
2. 核心優勢
  • 自動失效機制:客戶端崩潰時臨時節點自動刪除,避免死鎖
  • 強一致性:基于ZAB協議保證分布式事務一致性
  • 高可靠性:節點故障時通過選舉機制快速恢復
  • 可重入性:可通過節點路徑記錄客戶端標識實現重入邏輯
3. 性能表現
  • 單次鎖操作耗時約10-50ms(含網絡往返)
  • 集群模式下吞吐量可達5000-10000TPS
  • 適合對可靠性要求高于性能的場景

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

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

相關文章

js代碼09

題目 好的&#xff0c;我們繼續。 在上一個練習中&#xff0c;我們深入探討了 this 的復雜性。你會發現&#xff0c;ES6 引入的 class 語法在很大程度上就是為了簡化 this 的使用&#xff0c;并為 JavaScript 提供一個更清晰、更熟悉的面向對象編程&#xff08;OOP&#xff0…

基于Airtest的App數據爬取實戰:突破傳統爬蟲的邊界

引言:App數據爬取的技術困境 在當今移動優先的時代,App已成為企業核心數據載體,然而??傳統爬蟲技術??在App數據獲取上面臨三大難題: ??協議層屏障??:加密HTTPS、SSL Pinning等技術阻斷中間人攻擊??渲染層障礙??:React Native、Flutter等跨平臺框架使DOM解析…

【LeetCode 熱題 100】560. 和為 K 的子數組——(解法一)前綴和+暴力

Problem: 560. 和為 K 的子數組 題目&#xff1a;給你一個整數數組 nums 和一個整數 k &#xff0c;請你統計并返回 該數組中和為 k 的子數組的個數 。子數組是數組中元素的連續非空序列。 【LeetCode 熱題 100】560. 和為 K 的子數組——&#xff08;解法二&#xff09;前綴和…

android車載開發之HVAC

目前主要在做車載hvac的開發&#xff0c;主要的一些功能主要是hvac&#xff0c;座椅&#xff0c;香氛&#xff0c;設置等的一些模塊&#xff0c;具體模塊下&#xff0c;比如 1.空調 ac&#xff0c;智能模式&#xff08;極速降溫&#xff0c;極速采暖&#xff0c;智能除味&…

深度學習 Diffusers 庫(自留)

&#xff08;本文將圍繞 安裝Diffusers庫及其依賴、理解Diffusers核心概念&#xff1a;Pipeline, Model, Scheduler 、使用預訓練模型進行推理&#xff08;文生圖、圖生圖等&#xff09; 、 自定義模型和調度器 、訓練自己的擴散模型&#xff08;可選&#xff0c;需要大量資源&…

【VPC技術】基礎理論篇

文章目錄 概述相關基礎核心知識軟件定義網絡SDNOverlay 技術 安全組概述 參考博客 &#x1f60a;點此到文末驚喜?? 概述 相關基礎 基本概念 虛擬私有云VPC&#xff1a;是一個隔離的網絡環境&#xff0c;每個VPC擁有專屬的IP地址范圍&#xff08;CIDR&#xff09;、路由表、…

在 RK3588 Ubuntu 上編譯 eglinfo:全流程實戰 + 常見報錯修復

dv1/eglinfo 是一個開源的 EGL 信息檢測工具&#xff0c;廣泛用于 OpenGL ES 圖形棧調試、驅動驗證和嵌入式平臺圖形支持排查。在 Rockchip RK3588 上編譯該工具可以協助我們確認 EGL DRM 是否配置正確&#xff0c;尤其在無窗口系統&#xff08;如 eglfs、framebuffer&#xf…

開源推薦:基于前后端分離架構的WMS倉儲管理系統

開源推薦&#xff1a;基于前后端分離架構的WMS倉儲管理系統 &#x1f525; 在線演示地址&#xff1a;https://tob.toolxq.com/wms/wms.html 點擊上方鏈接可直接體驗系統功能和界面&#xff0c;無需安裝部署 前言 在企業數字化轉型的浪潮中&#xff0c;倉儲管理系統&#xff08…

Redis中List類型常見的操作命令有哪些?

Redis中List類型是一個字符串列表&#xff0c;這里是一些常見的命令&#xff1a; 1&#xff09;lpush:將一個或多個值插入到列表頭部。列表不存在&#xff0c;一個新的列表會被創建。 2&#xff09;rpush:將一個或多個值插入到列表尾部。 3&#xff09;lpop:移除并返回列表頭…

mac重復文件清理,攝影師同款清理方案

攝影師小林盯著屏幕上的警告&#xff1a;“存儲空間不足”&#xff0c;離截稿只剩3小時。她的MacBook如同塞滿回憶的閣樓&#xff0c;128GB的“其他”空間神秘消失。翻看照片庫時&#xff0c;她驚訝地發現——同一組西藏雪山照片竟有十幾個副本&#xff01;這是mac重復文件問題…

lua腳本為什么能保證原子性

Redis 處理客戶端請求是基于單線程模型的&#xff08; Redis 6.0 開始引入了多線程處理網絡 IO&#xff0c;但命令執行仍然是單線程的&#xff09;。這意味著&#xff0c;在任意時刻 Redis 只會執行一個命令或腳本。這種單線程特性確保了當 Redis 在執行一個 Lua 腳本時&#x…

爬蟲詳解:Aipy打造自動抓取代理工具

一、爬蟲的本質與核心功能 爬蟲是一種通過編寫程序自動抓取互聯網公開數據的技術工具&#xff0c;其核心流程包括&#xff1a; 模擬瀏覽器行為&#xff1a;發送 HTTP 請求訪問目標網頁解析頁面結構&#xff1a;提取 HTML/XML 中的關鍵信息&#xff08;如文本、鏈接、圖片&…

Leetcode百題斬-棧

終于來到了棧專題&#xff0c;想想之前來阿里的時候就是面試了一道棧最終通過了終面&#xff0c;也是十分懷念了。 739. Daily Temperatures[Medium] 思路&#xff1a;這就是最典型的單調棧問題了。從后向前維護下一個更大值或者下一個更大值的位置。 可以看一下當年面阿里時…

PIXHAWK(ardupilot4.52)NMEA的解析bug

最近在測試過程中發現在橢球高為負的地方&#xff0c;地面站讀取GPS_RAW_INT (24)消息中的alt高度竟然是正值。而消息中定義的alt并不是一個unsigned數據&#xff0c;理論上是帶有正負符號的。 查看gga的原始信息&#xff1a; $GPGGA,063718.40,3714.8533856,N,11845.9411766,…

Linux容器講解以及對應軟件使用

一、容器基礎知識講解 1.1 微服務的部署策略 部署單體應用意味著運行大型應用的多個相同副本&#xff0c;通常提供若干臺&#xff08;N&#xff09;服務器&#xff08;物理機或虛擬 機&#xff09;&#xff0c;在每臺服務器上運行若干個&#xff08;M&#xff09;應用實例。部…

企業級應用技術-ELK日志分析系統

目錄 #1.1ELK平臺介紹 1.1.1ELK概述 1.1.2Elasticsearch 1.1.3Logstash 1.1.4Kibana #2.1部署ES群集 2.1.1基本配置 2.1.2安裝Elasticsearch 2.1.3安裝Logstash 2.1.4Filebeat 2.1.5安裝Kibana 1.1ELK平臺介紹 1.1.1ELK概述 ELK 是三個開源工具的縮寫&#xff0c;分別是Elas…

Shiro漏洞復現

Shiro簡介 Apache Shiro是一種功能強大且易于使用的Java安全框架&#xff0c;它執行身份驗證、授權、 加密和會話管理&#xff0c;可用于保護任何應用程序的安全。 Shiro提供了應用程序安全性API來執行以下方面&#xff1a; 1.身份驗證&#xff1a;證明用戶身份&#xff0c;通…

VSCode 中使用 Google Test(GTest)框架測試

VSCode 中使用 Google Test&#xff08;GTest&#xff09;框架在 VSCode 中對 C 代碼進行測試的示例&#xff1a; 一、Unbutu x86使用gtest 環境配置 安裝 GTest &#xff1a;在 Ubuntu 系統中&#xff0c;可以通過命令sudo apt-get install libgtest-dev安裝 GTest 庫。對于…

【1.6 漫畫數據庫設計實戰 - 從零開始設計高性能數據庫】

1.6 漫畫數據庫設計實戰 - 從零開始設計高性能數據庫 &#x1f3af; 學習目標 掌握數據庫表結構設計原則理解字段類型選擇與優化學會雪花算法ID生成策略掌握索引設計與優化技巧了解分庫分表設計方案 &#x1f4d6; 故事開始 小明: “老王&#xff0c;我總是不知道怎么設計數…

OSPF虛擬鏈路術語一覽:快速掌握網絡路由

大家好&#xff0c;這里是G-LAB IT實驗室。今天帶大家了解一下OSPF的相關知識&#xff01; 01 OSPF虛擬鏈路術語大全 網絡架構中&#xff0c;OSPF&#xff08;開放式最短路徑優先&#xff09;是一種重要的路由協議。通過其鏈路狀態路由機制&#xff0c;OSPF能夠有效維護和更新…