Couchbase 介紹 - 更好的 Cache 系統
在移動網際網路時代,我們面對的是更多的客戶端,更低的請求延遲,這當然需要對資料做大量的 Cache 以提高讀寫速度。
術語
節點:指叢集裡的一臺伺服器。
現有 Cache 系統的特點
目前業界使用得最多的 Cache 系統主要是 memcached 和 redis。 這兩個 Cache 系統都有都有很大的使用者群,可以說是比較成熟的解決方案,也是很多系統當然的選擇。 不過,在使用 memcached 和 redis 過程中,還是碰到了不少的問題和侷限:
- Cluster 支援不夠。在擴容、負載均衡、高可用等方面存在明顯不足。
- 持久化支援不好,出現問題後恢復的代價大。memcached 完全不支援持久化,redis 的持久化會造成系統間歇性的負載很高。
我期待的理想 Cache 系統
良好的 cluster 支援
- Key 可以動態分散(Auto Sharding)在不同的伺服器上,可以通過動態新增伺服器節點增加系統容量。
- 沒有單點失效,任何一個單點都不會造成資料不可訪問。
- 讀寫負載可以均勻分佈在系統的不同節點上。
支援非同步持久化支援
- 方便快速恢復,甚至可以直接用作 key/value 資料庫。 經常在跟業界朋友交流時,會提到用 key 分段的方法來做容量擴充套件以及負載均衡。但是用靜態的 key 分段會有不少問題:
-
Cache 系統本身及使用 cache
的客戶端都需要預設一個分段邏輯,這個邏輯後期如果需要調整將會非常困難。不能解決單點失效的問題,還需要額外的手段。運維需要更多的人為參與,避免 key 超出現有分割槽,一旦出現 key 找不到對應伺服器,訪問直接失敗。
最接近需求的系統:Couchbase
基於這些想法,我花了幾天時間在 google, stack overflow, quora 上看了很多大家關於 cache cluster 的討論,找到一個比較新系統 Couchbase。
mem vs cb memcached VS couchbase
Couchbase 的叢集設計對等網
Couchbase 群集所有點都是對等的,只是在建立群或者加入叢集時需要指定一個主節點,一旦結點成功加入叢集,所有的結點對等。
對等網的優點是,叢集中的任何節點失效,叢集對外提供服務完全不會中斷,只是叢集的容量受影響。 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 失效。
- 如果伺服器容量不同,管理非常麻煩。
- 前面提到過,運維、配置非常不方便。
為了把 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 可以實現一些非常強大有趣的功能,例如:
- Replica,以 vBucket 為單位的主從備份。如果某個節點失效,只需要更新 vBucket 對映表,馬上啟用備份資料。
- 動態擴容。新增加一個節點後,可以把部分 vBucket 轉移到新節點上,並更新 vBucket 對映表。
vBucket 非常重要,以後可以單獨寫一篇文章分享。
總結
-
Couchbase 的對等網設計,smart client
直接獲取整的叢集的資訊,在客戶端實現負載均衡,整個叢集沒有單點失效,並且完全支援平行擴充套件。 - vBucket 的引入,完全實現了 auto sharding,可以方便靈活的把資料的子集在不同節點上移動,以實現叢集動態管理。
-
Couchbase 有一個非常專業的 web 管理介面,並且支援通過 RESTful API 管理,這也是 memcached,
redis 不能企及的。 - 如果只是做 key/value 的 cache,Couchbase 可以完全取代 memcached。
- Couchbase 已經被我們在生產環境中大量採用。
相關文章
- Spring Cache 介紹Spring
- LSF系統介紹
- 快取融合(Cache Fusion)介紹快取
- 【轉載】Spring Cache介紹Spring
- 系統SDK介紹-02
- 系統SDK介紹-01
- 常用系統命令介紹
- DAPP系統的原理與介紹APP
- 分散式系統CAP的原理介紹分散式
- 開源CMS系統介紹
- 元宇宙系統介紹元宇宙
- 友點CMS系統介紹
- Pixhawk系統架構介紹架構
- Java聲音系統介紹Java
- RAG系統架構介紹架構
- Cache中的MESI協議基本知識介紹協議
- 基於資源的HTTP Cache的實現介紹HTTP
- linux常用的幾個系統介紹Linux
- Linux系統的病毒歷史介紹Linux
- APM系統SkyWalking介紹
- 區塊鏈商城系統介紹區塊鏈
- windows10系統版本介紹Windows
- Android系統介紹與框架Android框架
- Hyperledger Fabric系統鏈碼介紹
- Android 輸入系統介紹Android
- Linux系統調優介紹Linux
- AsyncDisplayKit介紹(二)佈局系統
- 軟體系統介紹文件模板
- 通用許可權系統介紹
- Hadoop生態系統介紹Hadoop
- linux作業系統介紹Linux作業系統
- Android新元件RecyclerView介紹,其效率更好Android元件View
- 註釋驅動的 Spring cache 快取介紹Spring快取
- Asp.net中cache管理機制介紹ASP.NET
- NLPIR系統的中文語義分析模式介紹模式
- Linux 主要的發行系統版本介紹Linux
- Linux 系統上交換空間的介紹Linux
- iOS 常見的系統檔案目錄介紹iOS