4、微服務架構下的服務治理
1、Spring Boot集成Apache Dubbo
dubbo:protocol:配置服務提供者的協議資訊,Dubbo支持多種協議來發布服務,默認采用Dubbo協議,可選的協議有很多,比如Hessian、Webservice、Thrift等,
dubbo:service:描述需要發布的服務介面,也就是這個介面可供本網路上的其他行程訪問,
dubbo:consumer:check:false:關閉所有服務的啟動時檢查(沒有提供者時報錯)
dubbo中提供的@Service注解來發布服務,@Reference注解來獲得一個遠程代理物件,
2、快速上手ZooKeeper
1、ZooKeeper是一個高性能的分布式協調中間件,主要解決分布式環境中各個服務行程的訪問控制問題,比如訪問順序控制,所以,這里強調的是,ZooKeeper并不是注冊中心,只是基于ZooKeeper本身的特性可以實作注冊中心這個場景而已,
2、ZooKeeper樹中的每個節點被稱為Znode,Znode維護了一個stat狀態資訊,其中包含資料變化的時間和版本等,并且每個Znode可以設定一個value值,ZooKeeper并不用于通用的資料庫或者大容量的物件存盤,它只是管理和協調有關的資料,所以value的資料大小不建議設定得非常大,較大的資料會帶來更大的網路開銷,
3、ZooKeeper的特性:
ZooKeeper中的Znode在被創建的時候,需要指定節點的型別,節點型別分為:
- 持久化節點,節點的資料會持久化到磁盤
- 臨時節點,節點的生命周期和創建該節點的客戶端的生命周期保持一致,一旦該客戶端的會話結束,則該客戶端所創建的臨時節點會被自動洗掉,
- 有序節點:在創建的節點后面會增加一個遞增的序列,該序列在同一級父節點之下是唯一的,需要注意的是,持久化節點或者臨時節點也是可以設定為有序節點的,也就是持久化有序節點或者臨時有序節點,
- 容器節點:當容器節點下的最后一個子節點被洗掉時,容器節點就會被自動洗掉,
- TTL節點,針對持久化節點或者持久化有序節點,我們可以設定一個存活時間,如果在存活時間之內該節點沒有任何修改并且沒有任何子節點,它就會被自動洗掉,
- 同級節點的唯一性,
4、Watcher機制:
針對Znode的訂閱/通知機制,也就是當Znode節點狀態發生變化時或者ZooKeeper客戶端連接狀態發生變化時,會觸發事件通知,注意:Watcher事件的觸發都是一次性的,
5、分布式鎖:
使用ZooKeeper實作分布式鎖達到排他的目的,只需要用到節點的特性:臨時節點,以及同級節點的唯一性,
獲得鎖的程序:在獲得排他鎖時,所有客戶端可以去ZooKeeper服務器上/Exclusive_Locks節點下創建一個臨時節點/lock,ZooKeeper基于同級節點的唯一性,會保證所有客戶端中只有一個客戶端能創建成功,創建成功的客戶端獲得了排他鎖,沒有獲得鎖的用戶端就需要通過Watcher機制監聽/Exclusive_Locks節點下子節點的變更事件,用于實時監聽/lock節點的變化情況以做出反應,
釋放鎖的程序:
在獲得鎖的程序中,我們定義的鎖節點/lock為臨時節點,那么在以下兩種情況下會觸發鎖的釋放,
1、獲得鎖的客戶端因為例外斷開了和服務端的連接,基于臨時節點的特性,/lock節點會被自動洗掉,
2、獲得鎖的客戶端執行完業務邏輯之后,主動洗掉了創建的/lock節點,
當/lock節點被洗掉之后,ZooKeeper服務器會通知所有監聽了/Exclusive_Locks子節點變化的客戶端,這些客戶端收到通知后,再次發起創建/lock節點的操作來獲得排他鎖,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289520.html
標籤:其他
