當前位置:
首頁 > 知識 > zookeeper之acl 張飛的繡花針

zookeeper之acl 張飛的繡花針

眾所周知,內存資源總是有限的;

即便是java程序員,我們依然要考慮在使用低內存的情況下,高效地實現業務目標,構建優秀的軟體,這是成為一個優秀的架構師的必經之路;

今天我們就和大家分享下,zookeeper 的acl的緩存存儲,其主要的類是ReferenceCountedACLCache;

主要成員變數

其中

longKeyMap 和 aclKeyMap 分別是acl集合信息和acl整形值之間建立的hashmap;

referenceCounter: 是一個許可權值引用計數器;

aclIndex: acl許可權編號;

許可權新建

當我們創建節點的時候,可以看到datatree.java中createnode中有一行這樣的代碼

該代碼是將我們會話中的acl集合信息轉換為long,也就是ReferenceCountedACLCache中的convertAcls,首先它會在aclKeyMap中查詢是否有該acl集合信息,如果沒有,就生成acl編號aclIndex,其實就是aclIndex 1;然後將這個值添加到longKeyMap 和aclKeyMap,這裡的目的是為了建立一個aclIndex 和 acl的關係;最後再調用addUsage,而addUsage如下代碼所示;

由addUsage的代碼可以看出其主要就是存儲該acl有多少個節點引用了;

許可權獲取

上面是創建,那麼在我們查詢許可權的時候,就可以先獲得某個節點,然後通過該節點的acl,就可以獲取對應的acl集合信息;即下列代碼

zookeeper這種設計的思想,如下圖所示

設計的好處

各節點上的信息,只保存了acl的整形值,這個整形值就是對acl緩存的引用值,而真正的acl集合信息在緩存ReferenceCountedACLCache,對於datatree整個樹形結構來說節省了大量的內存;

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 千鋒JAVA開發學院 的精彩文章:

深入淺析一致性模型之Linearizability
推進微服務落地的 7 個步驟

TAG:千鋒JAVA開發學院 |