在移動互聯網時代,咱們面對的是更多的客戶端,更低的請求延遲,這固然須要對數據作大量的 Cache 以提升讀寫速度。html
目前業界使用得最多的 Cache 系統主要是 memcached 和 redis。 這兩個 Cache 系統都有都有很大的用戶羣,能夠說是比較成熟的解決方案,也是不少系統固然的選擇。 不過,在使用 memcached 和 redis 過程當中,仍是碰到了很多的問題和侷限:web
良好的 cluster 支持redis
支持異步持久化支持算法
基於這些想法,我花了幾天時間在 google, stack overflow, quora 上看了不少你們關於 cache cluster 的討論,找到一個比較新系統 Couchbase。數據庫
memcached VS couchbase服務器
Couchbase日前宣佈推出其新版的NoSQL數據服務器——Couchbase Server。該產品基於Apache CouchDB,並整合了GeoCouch(一個基於Erlang、緊密集成的地理空間索引系統,可支持LBS應用)。負載均衡
Couchbase公司是由CouchOne與Membase合併組成,但合併後推出的第一款產品Couchbase Server並無包含Membase的任何技術。Couchbase Server分爲企業版和社區版兩個版本,其中企業版通過了嚴格的QA過程,並有技術支持和維護保障,但二者的API徹底兼容。Couchbase Server企業版本每節點訂價範圍從999美圓(10×5技術支持,5次),到4499美圓(24×7技術支持,無限次)。運維
據悉,全部企業版和社區版都提供包括Red Hat,Ubuntu Linux和Windows在內的各操做系統版本。Mac OS X有社區版。異步
此外,Couchbase還宣佈成立顧問委員會爲其提供戰略和技術上的指導,委員會成員包括PostgreSQL開發核心團隊成員Josh Berkus,SQLite的創始人Richard Hipp,HTTP與REST創始人Roy Fielding,Zynga CTO Cadir Lee,《軟件人才管理的藝術》做者Michael Loop,Cloudera CEO Michael Olson,YSlow的做者、Google性能專家Steve Souders等。memcached
Couchbase 羣集全部點都是對等的,只是在建立羣或者加入集羣時須要指定一個主節點,一旦結點成功加入集羣,全部的結點對等。
圖片來源:couchbase.com
對等網的優勢是,集羣中的任何節點失效,集羣對外提供服務徹底不會中斷,只是集羣的容量受影響。 Smart Client
因爲 couchbase 是對等網集羣,全部的節點均可以同時對客戶端提供服務,這就須要有方法把集羣的節點信息暴露給客戶端,couchbase 提供了一套機制,客戶端能夠獲取全部節點的狀態以及節點的變更,由客戶端根據集羣的當前狀態計算 key 所在的位置。 vBucket
vBucket 概念的引入,是 couchbase 實現 auto sharding,在線動態增減節點的重要基礎。
簡單的解釋 vBucket 能夠從靜態分片開始提及,靜態分片的作法通常是用 key 算出一個 hash,獲得對應的服務器,這個算法很簡單,也容易理解。如如下代碼所示:
servers = ['server1:11211', 'server2:11211', 'server3:11211'] server_for_key(key) = servers[hash(key) % servers.length]
但也有幾個問題:
爲了把 key 跟服務器解耦合,couchbase 引入了 vBucket。能夠說 vBucket 表明一個 cache 子集,主要特色:
如如下代碼所示:
servers = ['server1:11211', 'server2:11211', 'server3:11211'] vbuckets = [0, 0, 1, 1, 2, 2] server_for_key(key) = servers[vbuckets[hash(key) % vbuckets.length]]
圖片來源:http://dustin.sallings.org/2010/06/29/memcached-vbuckets.html
因爲 vBucket 把 key 跟服務器的靜態對應關係解耦合,基於 vBucket 能夠實現一些很是強大有趣的功能,例如:
vBucket 很是重要,之後能夠單獨寫一篇文章分享。