架構爬坑記——從0開始學習分散式鎖
鎖的概述
1、為什麼要用鎖
- 多工環境中才需要
- 任務都需要對同一共享資源進行寫操作;
- 對資源的訪問是互斥的
Tips:
任務通過競爭獲取鎖才能對該資源進行操作(①競爭鎖);
當有一個任務在對資源進行更新時(②佔有鎖),
其他任務都不可以對這個資源進行操作(③任務阻塞),
直到該任務完成更新(④釋放鎖);
2、鎖是什麼

3、JDK鎖的那些事

JVM鎖解決不了分散式環境多工對共享資源競爭的協同操作問題!


4、分散式鎖方案比較
- 利用mysql的實現
- 利用redis的實現
- 利用zookeeper的實現

5、模板方法模式
——在父類中編排主流程,將步驟實現延遲到子類去實現。


1、定義鎖的介面Lock
2、在AbstractLock模板鎖裡面實現getLock方法,實現通用的邏輯。
3、不能確實的步驟,作為虛擬方法,甩鍋給子類實現。
4、子類只需要聚焦自己的小步驟邏輯,實現tryLock,waitLock,unLock方法。
Zookeeper
1、zookeeper簡介
Zookeeper是一個分散式 協調服務 ;就是為使用者的分散式應用程式提供協調服務

2、Zookeeper 資料結構
- ZooKeeper資料結構類似Linux
- 每一個節點都有值
- 管理(儲存,讀取)使用者程式提交的資料;
- 併為使用者程式提供資料節點監聽服務;
3、zookeeper 節點型別
有四種類型的znode:
- PERSISTENT-持久化目錄節點
客戶端與zookeeper斷開連線後,該節點依舊存在 - PERSISTENT_SEQUENTIAL-持久化順序編號目錄節點
客戶端與zookeeper斷開連線後,該節點依舊存在,只是 Zookeeper給該節點名稱 進行順序編號 - EPHEMERAL-臨時目錄節點
客戶端與zookeeper斷開連線後,該節點被刪除 - EPHEMERAL_SEQUENTIAL-臨時順序編號目錄節點
客戶端與zookeeper斷開連線後,該節點被刪除,只是Zookeeper給該節點名稱進行順序編號
watcher(觀察者模式)

觀察者模式要素:
- 目標 — 店鋪老闆(事件源 )
- 觀察者 — 客戶(事件消費者 )
- 事件 — 電話響了

watcher機制圖示
基於Zookpper分散式鎖
1、zookeeper 基於同名節點的分散式鎖

2、zookeeper相互監聽的分散式鎖


總結
這篇關於Zookpper分散式鎖視訊的簡述就到這裡結束了,當然僅僅看這裡的圖文,有些人可能摸不著頭腦,我這邊為大家準備了完整的視訊。有需要的朋友可以需要的都可以加入合作Q群Java進階之路:908676731,免費獲取。
還有一些Java架構視訊講解,需要獲取Dubbo、Redis、設計模式、Netty、zookeeper、Spring cloud、分散式、高併發等架構技術視訊教程資料,架構思維導圖,和BATJ面試題及答案的,都是免費分享的。
另外,如果想提升自己的技術,這一點是遠遠不夠的。我這裡還是把之前那位大佬分享給我的Java架構思維路線知識點分享給大家。
一、閱讀原始碼
閱讀、分析原始碼是程式設計師最基本的碼程式碼能力也是碼農的根本所在,學習經典原始碼中所用到的經典設計思想及常用設計模式,能夠幫你瞭解大牛是如何寫程式碼的,從而吸收大牛的程式碼功力。在阿里面試中,MyBatis,Spring等框架的底層原理是經常會被問到的

開源框架解析.png
二、分散式架構
阿里巴巴有很多大團隊,這種大團隊裡有很多小團隊,到小團隊之後,做的業務都不相同,如果想立足成為一線網際網路公司中的萬能選手,最主流的分散式架構中有很多知識都是必須要去了解與學習的。並且在阿里面試過程中,面試官會問到實際應用場景的問題:比如微服務化、使用者量、併發量、業務複雜度以及可擴充套件程度等,這裡不多贅述。本屌提供一個分散式架構的學習思路也是自己目前還在學習中的體系:

高效能架構專題.png
三、微服務架構
微服務是現在網際網路架構技術中最火熱的話題之一,也是本屌目前正在學習研究的方向。在阿里面試過程中,面試官很少會問到關於微服務相關的問題。但作為一名開發者,一名有技術夢想的程式設計師微服務架構是現在必須要去了解的主流技術,小編給自己制定了一個微服務技術的學習計劃:

微服務架構專題.png
四、併發程式設計
併發程式設計幾乎是所有網際網路公司面試必問問題,併發程式設計是Java程式設計師最重要的技能之一,也是最難掌握的一種技能。它要求程式設計者對計算機最底層的運作原理有深刻的理解,同時要求程式設計者邏輯清晰、思維縝密,這樣才能寫出高效、安全、可靠的多執行緒併發程式。目前網上沒有系統的全面的併發程式設計學習大綱,我搜集了很多資料總結出來一個最全面的學習大綱:

併發程式設計.png
五、效能優化
效能一直是讓程式設計師比較頭疼的問題。當系統架構變得複雜而龐大之後,效能方面就會下降,特別是阿里巴巴這樣的一線網際網路公司最為注重,因此想進入阿里,效能優化一定是要去深入學習與理解的一環,本屌在效能優化這一塊雖然不能算專家,也可以自信的說是精通了(注意:自己的簡歷上一定不要寫精通xxxx,要不然面試官會懟死你。好在本屌這一塊還算自信)

效能優化.jpg
六.設計模式
設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、程式碼設計經驗的總結。使用設計模式是為了可重用程式碼、讓程式碼更容易被他人理解、保證程式碼可靠性。 毫無疑問,設計模式於己於他人於系統都是多贏的,設計模式使程式碼編制真正工程化,設計模式是軟體工程的基石,如同大廈的一塊塊磚石一樣。專案中合理的運用設計模式可以完美的解決很多問題,每種模式在現在中都有相應的原理來與之對應,每一個模式描述了一個在我們周圍不斷重複發生的問題,以及該問題的核心解決方案,這也是它能被廣泛應用的原因。

設計模式.png
一名開發人員必須有適合自己的兵器,也就是工欲善其事必先利其器,不管是小白,還是資深開發,都需要先選擇好的工具。下列是我自己常用的開發工具:
- Maven的,專案管理
- Jenkins,持續整合
- sonar,程式碼質量管理
- Git的,版本管理
以上是大佬收集總結的Java架構技術圖譜,自己因為比較喜歡技術,所以收集了一些Java高併發、分散式、JVM、spring、原始碼分析和kafka等架構技術資料,如果你也對技術感興趣可以來關注我,到裙裡來下載這些資料,歡迎大家進裙討論與學習。
資料領取方式: 這只是一部分,我就不全發上去了,這些資料給了我很大的幫助,現在免費分享給大家!大家可以關注我後加java進階之路:908676731免費獲取
喜歡的朋友可以關注下專欄:Java架構技術進階。裡面有大量batj面試題集錦,還有各種技術分享,如有好文章也歡迎投稿哦。



免費獲取 架構群:908676731 ,
(備註:簡書慕容千語即可通過)通過後直接找群主或管理員免費獲取。