HazelCast分散式Map介紹和分析
HazelCast是一個高度可擴充套件的資料分發和叢集平臺,可以幫助架構師和開發者更容易設計和快速開發出高可擴充套件性的的實時應用,它提供的功能之一就是分散式實現java.util.{Queue,Set,List,Map}。
分散式Map使用方法如下:
根據官方介紹,資料是分散式分散式的儲存在叢集中某臺機器上,而且會有備份,這樣即使某臺機器突然down掉,資料也不會丟失,那麼它是如何實現的呢,現在將原始碼分析如下:
首先檢視IMap的類結構如下:
可以看出IMap其實是繼承了JDK的ConcurrentMap,因此它是一種執行緒安全的Map.繼承LegacyAsyncMap說明此Map是可以進行非同步獲取返回結果的,而且它繼承自DistributedObject介面,DistributedObject是分散式Map,分散式Set,分散式Queue等的超類,它具有PartitionKey,HazelCast使用它來進行分割槽。
其次debug原始碼,來分析下Map資料的儲存和獲取原理。
a)HazelCast每一個應用節點啟動都是一個Node,node裡面包含了本節點對應的所有資訊和Service,例如下圖包含的這些service
我們getMap的過程其實就是從叢集內各個Node搜尋其儲存在哪裡的過程,由於IMap其實是一個DistributeObject,因此本質上就是一個getDistributedObject的過程,如下圖所示:
b)使用代理ProxyService找到 繼承了DistributedObject的IMap.
ProxyService是通過註冊在記憶體的ProxyRegistry來進行處理的,如下圖所示
ProxyRegistry來進行尋找或者生成一個DistributedObject.
c)ProxyRegistry內部包含了一個RemoteService,由remoteService來進行遠端或者本地的呼叫來獲取DistributedObject,如下圖所示,
由於我們尋找的是一個Map,所以就會進入MapRemoteService的邏輯
createDistributedObject本質上返回的是一個Map的代理類MapProxyImpl,如下圖所示
d)MapProxyImpl是個什麼呢,且看類圖如下:
看到沒,本質上還是一個DistributedObject,只不過相關的獲取資料,put資料都是在MapProxySupport內部做的。以get資料為例,
需要先將key序列化byte陣列,然後使用getInternal方法獲取到key對應的value,然後使用toObject將byte陣列反序列化為記憶體物件。後續的細節後面在分析!
@程式設計師 @IT網際網路
歡迎關注我的微信公眾號:
相關文章
- hazelcast的基本介紹AST
- JAVA 分散式 - 分散式介紹Java分散式
- Hazelcast簡單的分散式快取AST分散式快取
- 分散式事務介紹分散式
- 結合Hazelcast和Spring的分散式快取 - reflectoringASTSpring分散式快取
- 分散式賬本基本介紹分散式
- KAFKA介紹(分散式架構)Kafka分散式架構
- map、unordered_map、set 和 unordered_set的小介紹
- seata分散式事務AT模式介紹(二)分散式模式
- zipkin分散式鏈路追蹤介紹分散式
- 【分散式跟蹤系統Zipkin 介紹】分散式
- 分散式系統CAP的原理介紹分散式
- 分散式快取GemFire架構介紹分散式快取架構
- javascript陣列的map()函式用法簡單介紹JavaScript陣列函式
- Tkprof工具介紹和分析
- 崑崙分散式資料庫架構介紹分散式資料庫架構
- 分散式事務解決方案(一)【介紹】分散式
- 達夢透明分散式資料庫介紹分散式資料庫
- 分散式快取伺服器Memcached介紹分散式快取伺服器
- Oracle 分析函式使用介紹(轉)Oracle函式
- mitmproxy 代理工具介紹:rewrite和map local實現MIT
- 分散式計算與Map Reduce分散式
- Tkprof工具介紹和分析[轉]]
- FASTDFS開源分散式檔案系統介紹AST分散式
- 分散式配置管理平臺 - Disconf介紹分散式
- ZooKeeper分散式專題(一) -- zookeeper安裝以及介紹分散式
- Redis應用(二) --分散式鎖以及壓測介紹Redis分散式
- 阿里分散式資料庫服務相關介紹阿里分散式資料庫
- Ceph分散式儲存-原理介紹及簡單部署分散式
- java分散式服務框架Dubbo的介紹與使用Java分散式框架
- R資料分析:資料清洗的思路和核心函式介紹函式
- 函式表示式和函式宣告簡單介紹函式
- 分散式系統1:什麼是分散式系統——簡要的介紹與定義分散式
- Python爬蟲教程-34-分散式爬蟲介紹Python爬蟲分散式
- 分散式後臺作業排程器JobRunr介紹 - JAXenter分散式
- DCS分散式快取服務例項型別介紹分散式快取型別
- GIT 分散式版本控制系統的簡單使用介紹Git分散式
- map 和 lambda 函式函式