在移動網際網路時代,我們面對的是更多的客戶端,更低的請求延遲,這當然需要對資料做大量的 cache 以提高讀寫速度。
現有 cache 系統的特點
目前業界使用得最多的 cache 系統主要是 memcached 和 redis。 這兩個 cache 系統都有都有很大的使用者群,可以說是比較成熟的解決方案,也是很多系統當然的選擇。 不過,在使用 memcached 和 redis 過程中,還是碰到了不少的問題和侷限:
我期待的理想 cache 系統
支援非同步持久化支援
經常在跟業界朋友交流時,會提到用 key 分段的方法來做容量擴充套件以及負載均衡。但是用靜態的 key 分段會有不少問題:
最接近需求的系統:couchbase
基於這些想法,我花了幾天時間在 google, stack overflow, quora 上看了很多大家關於 cache cluster 的討論,找到乙個比較新系統 couchbase。
couchbase 的集群設計
對等網
couchbase 群集所有點都是對等的,只是在建立群或者加入集群時需要指定乙個主節點,一旦結點成功加入集群,所有的結點對等。
對等網的優點是,集群中的任何節點失效,集群對外提供服務完全不會中斷,只是集群的容量受影響。
smart client
由於 couchbase 是對等網集群,所有的節點都可以同時對客戶端提供服務,這就需要有方法把集群的節點資訊暴露給客戶端,couchbase 提供了一套機制,客戶端可以獲取所有節點的狀態以及節點的變動,由客戶端根據集群的當前狀態計算 key 所在的位置。
vbucket
簡單的解釋 vbucket 可以從靜態分片開始說起,靜態分片的做法一般是用 key 算出乙個 hash,得到對應的伺服器,這個演算法很簡單,也容易理解。如以下**所示:
servers = ['server1:11211', 'server2:11211', 'server3:11211']
server_for_key(key) = servers[hash(key) % servers.length]
但也有幾個問題:
為了把 key 跟伺服器解耦合,couchbase 引入了 vbucket。可以說 vbucket 代表乙個 cache 子集,主要特點:
key hash 對應乙個 vbucket,不再直接對應伺服器。
集群維護乙個全域性的 vbucket 與伺服器對應表。
前面提到的 smart client 重要的功能就是同步 vbucket 表。
如以下**所示:
servers = ['server1:11211', 'server2:11211', 'server3:11211']
vbuckets = [0, 0, 1, 1, 2, 2]
server_for_key(key) = servers[vbuckets[hash(key) % vbuckets.length]]
由於 vbucket 把 key 跟伺服器的靜態對應關係解耦合,基於 vbucket 可以實現一些非常強大有趣的功能,例如:
總結
python MongoDB 文件型資料庫
import pymongo client pymongo.mongoclient host localhost port 27017 client mongoclient mongodb localhost 27017 指定資料庫 db client.test db client test 指定集...
文件型資料庫mongodb筆記
二 安裝mongodb 安裝比較簡單,類似於普通qq軟體,中間主要是選擇 custom 自定義 安裝路徑修改下 d software mongodb 然後不斷 下一步 安裝至結束。安裝比較容易。難點在啟動mongodb的服務以及將mongodb設定成windows服務,加配置檔案在windows的 ...
超級坑人的Couchbase資料庫問題
官網 版本 1.8版 問題描述 某次伺服器因意外斷電重啟後,就進入不了couchbase控制台,顯示 無法顯示該頁 的錯誤,開啟 cmd 輸入netstat an 也找不到8091埠。於是乎baidu了又google,google了又baidu,依然沒解決。解決方案 然後我把iis服務給禁止了之後再...