关于缓存系统
1 分布式選舉
http://blog.csdn.net/huangwei19892008/article/details/9004970
bully, 每個機器都知道其他所有機器的編號。??? 當發現master不工作, 任意機器可發起election,只向編號比它大的發起election; 沒收到回復就自己是master、并廣播; 有回復的話就自己放棄election、由發回復的繼續election過程。
2 一致性hash
在于取模的不同。? 如果4臺機器, 通常的hash分布, 是將機器順序編號, 然后將key按4取模; 這樣當壞掉或者新增一臺機器后,key的 模數會變化,需要遷移的數據量太大大大了。
改為一致性hash的話, 按固定數取模; 當壞掉或者新增機器時,同一key的取模永遠不會變化; 壞掉時, 需要遷移的數據只有壞掉機器以前負責的數據; 新增時,只是其中某臺機器的一部分數據。
3 一致性hash如何引入權重的概念, 比如某臺服務器性能非常好, 想負責多一些數據?
直觀想法是將該機器作為兩個節點, 參與到一致性hash過程中。
ip1 port1 hashstring1
ip1 port1 hashstring2
ip2 port2 hashstring_ip2
ip3 port3 hashstring_ip3
-----這樣配置, 機器1就可能會多負責一些數據、發揮其性能。【hashstring去計算節點的hash值】
虛擬cache服務器: http://blog.csdn.net/x15594/article/details/6270242
==================================
memchache是集中式緩存; 想實現分布式緩存的話, 需要由客戶端實現一致性hash, 那么客戶端需要知道memcache的機器數??
客戶端可以重新加載或者重啟; memcache通過超時失效機制來實現數據的遷走。。
4 分布式鎖
鎖的創建過程如下描述:
前提:每個鎖都需要一個路徑來指定(如:/jiacheo/lock)
1.根據指定的路徑, 查找zookeeper集群下的這個節點是否存在.(說明已經有鎖了)
2. 如果存在, 根據查詢者的一些特征數據(如ip地址/hostname), 當前的鎖是不是查詢者的
3. 如果不是查詢者的鎖, 則返回null, 說明創建鎖失敗
4. 如果是查詢者的鎖, 則把這個鎖返回給查詢者
5. 如果這個節點不存在, 說明當前沒有鎖, 那么創建一個臨時節點, 并將查詢者的特征信息寫入這個節點的數據中, 然后返回這個鎖.
根據以上5部, 一個分布式的鎖就可以創建了.
from:????? http://www.jiacheo.org/blog/122
需要自己實現集群下文件訪問? 跨主機間的通信, 只能socket了。。?? 那么就需要自定義協議實現這個文件是否存在、創建文件的操作了。
如果master永遠健康的話, 將master作為鎖文件放置的節點即可。
zookeeper。。。???
這類緩存系統都無法支持關系數據庫的 觸發器/存儲過程。
總結
- 上一篇: 整理的几个面试题目
- 下一篇: java信息管理系统总结_java实现科