亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

分布式鎖為什么要選擇Zookeeper而不是Redis?看完這篇你就明白了

 更新時間:2021年05月21日 15:07:22   作者:宇的季節(jié)  
Zookeeper的機制可以保證分布式鎖實現(xiàn)業(yè)務(wù)代碼簡單,成本低,Redis如果要解決分布式鎖的問題,對于一些復雜的情況,很難解決,成本較高,這篇文章重點給大家介紹分布式鎖選擇Zookeeper 而不是Redis的理由,一起看看吧

在分布式的應用中,為了防止單點故障,保障高可用,通常會采用主從結(jié)構(gòu),當主節(jié)點掛掉后,從節(jié)點可以代替主節(jié)點提供服務(wù)。

Redis通過復制 + sentinel哨兵來實現(xiàn)主從模式。

Zookeeper通過replicated mode復制模式來實現(xiàn)主從模式。

單從結(jié)構(gòu)上看,Redis和Zookeeper都是主從架構(gòu),那Zookeeper的優(yōu)勢是什么?為什么要選擇Zookeeper?難道只是因為Zookeeper是目錄結(jié)構(gòu),Redis是K-V結(jié)構(gòu)嗎?

同步機制的不同

Redis

Redis在給從節(jié)點同步數(shù)據(jù)時,正常情況是增量同步,也就是主節(jié)點的數(shù)據(jù)修改語句(DML)會異步的同步給從節(jié)點。Redis的數(shù)據(jù)同步?jīng)]有保障數(shù)據(jù)一致性的機制,也就是說,一條DML在主節(jié)點執(zhí)行成功時,不能保障其他從節(jié)點成功執(zhí)行了這條數(shù)據(jù),這就會造成一個問題,如果在數(shù)據(jù)沒有同步到從節(jié)點時,主節(jié)點掛掉,就會產(chǎn)生數(shù)據(jù)丟失的情況。

Zookeeper

Zookeeper使用類paxos算法來保障數(shù)據(jù)的一致性。簡單的講,當一個DML語句發(fā)送給主節(jié)點時,Zookeeper需要保證一半以上的節(jié)點接收到數(shù)據(jù),才會返回成功。并且當主節(jié)點掛掉,從節(jié)點重新選舉時,同步到最新的數(shù)據(jù)的節(jié)點會有優(yōu)先選舉權(quán)。

舉個例子:

一個4節(jié)點Zookeeper(A、B、C、D),A是主節(jié)點,當執(zhí)行一個create語句成功時,至少有3臺節(jié)點執(zhí)行成功(一半以上),例如A、C、D成功。此時如果A節(jié)點掛了,B、C、D進行選舉,由于C、D都執(zhí)行成功了create語句,B沒有執(zhí)行,C、D的數(shù)據(jù)更加新,具有優(yōu)先選舉權(quán),再根據(jù)名稱排序,選擇C做為主節(jié)點。在整個選舉過程中,服務(wù)不可用,選舉完成后,C節(jié)點和A節(jié)點數(shù)據(jù)一致,不會出現(xiàn)丟失的情況。

分布式鎖

要實現(xiàn)分布式鎖,需要滿足一些要求:

  • 只能有一個服務(wù)的一個線程能獲取鎖
  • 一個持有鎖的線程掛掉后,鎖應該被釋放,用來給其他線程用
  • 一個持有鎖的線程沒執(zhí)行完,鎖不能釋放
  • 鎖釋放后,其他等待者可以繼續(xù)爭搶
  • 管理鎖的主節(jié)點(Redis或Zookeeper)掛了,重新選舉后,不影響鎖的持有情況

Redis解決方案

問題1、問題2:使用“SET key value EX seconds NX”語句獲取鎖并設(shè)置過期時間

問題3:另開一個監(jiān)控線程,監(jiān)控主線程執(zhí)行情況,用來延長過期時間

問題4:等待線程定時檢查鎖的持有情況

問題5:暫無或者解決成本很高,需要自己實現(xiàn)類paxos的算法

Zookeeper解決方案

通過創(chuàng)建臨時節(jié)點可以解決問題1,2,3

watch機制可以解決問題4,并且相比定時檢查,watch可以做到更高實時性

zookeeper的paxos同步機制保障了節(jié)點間數(shù)據(jù)一致性,即使主節(jié)點掛掉,也可以保障數(shù)據(jù)不丟,可以解決問題5

對比可以發(fā)現(xiàn):

Zookeeper的機制可以保證分布式鎖實現(xiàn)業(yè)務(wù)代碼簡單,成本低。

Redis如果要解決分布式鎖的問題,對于一些復雜的情況,很難解決,成本較高。

以上就是分布式鎖為什么要選擇Zookeeper而不是Redis?看完這篇你就明白了的詳細內(nèi)容,更多關(guān)于分布式鎖Zookeeper Redis的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring Boot整合Redis實現(xiàn)訂單超時處理問題

    Spring Boot整合Redis實現(xiàn)訂單超時處理問題

    這篇文章主要介紹了Spring Boot整合Redis實現(xiàn)訂單超時處理,通過這個基本的示例,你可以了解如何使用Spring Boot和Redis來處理訂單超時問題,并根據(jù)需要進行擴展和定制,需要的朋友可以參考下
    2023-11-11
  • 如何使用Redis實現(xiàn)電商系統(tǒng)的庫存扣減

    如何使用Redis實現(xiàn)電商系統(tǒng)的庫存扣減

    在日常開發(fā)中有很多地方都有類似扣減庫存的操作,本文主要介紹了如何使用Redis實現(xiàn)電商系統(tǒng)的庫存扣減,具有一定的參考價值,感興趣的可以了解一下
    2022-01-01
  • odoo中使用redis實現(xiàn)緩存的步驟

    odoo中使用redis實現(xiàn)緩存的步驟

    這篇文章主要介紹了odoo中使用redis實現(xiàn)緩存的步驟,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 解決redis服務(wù)啟動失敗的問題

    解決redis服務(wù)啟動失敗的問題

    今天小編就為大家分享一篇解決redis服務(wù)啟動失敗的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 玩轉(zhuǎn)Redis搭建集群之Sentinel詳解

    玩轉(zhuǎn)Redis搭建集群之Sentinel詳解

    這篇文章主要給大家介紹了關(guān)于Redis搭建集群之Sentinel的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • redistemplate下opsForHash操作示例

    redistemplate下opsForHash操作示例

    這篇文章主要為大家介紹了redistemplate下opsForHash操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 為什么RedisCluster設(shè)計成16384個槽

    為什么RedisCluster設(shè)計成16384個槽

    本文主要介紹了為什么RedisCluster設(shè)計成16384個槽,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Redis全量復制與部分復制示例詳解

    Redis全量復制與部分復制示例詳解

    這篇文章主要給大家介紹了關(guān)于Redis全量復制與部分復制的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis爬蟲具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-08-08
  • Redis數(shù)據(jù)結(jié)構(gòu)之跳躍表使用學習

    Redis數(shù)據(jù)結(jié)構(gòu)之跳躍表使用學習

    這篇文章主要為大家介紹了Redis數(shù)據(jù)結(jié)構(gòu)之跳躍表使用學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • 詳解Redis如何保證接口的冪等性

    詳解Redis如何保證接口的冪等性

    如何防止接口中同樣的數(shù)據(jù)提交,以及如何保證消息不被重復消費,這些都是shigen在學習的過程中遇到的問題,今天,趁著在學習redis的間隙,我寫了一篇文章進行簡單的實現(xiàn),需要的朋友可以參考下
    2023-11-11

最新評論