摘要:的集群設計對等網群集所有點都是對等的,只是在創建群或者加入集群時需要指定一個主節點,一旦結點成功加入集群,所有的結點對等。對等網的優點是,集群中的任何節點失效,集群對外提供服務完全不會中斷,只是集群的容量受影響。
在移動互聯網時代,我們面對的是更多的客戶端,更低的請求延遲,這當然需要對數據做大量的 Cache 以提高讀寫速度。
術語節點:指集群里的一臺服務器。
現有 Cache 系統的特點目前業界使用得最多的 Cache 系統主要是 memcached 和 redis。 這兩個 Cache 系統都有都有很大的用戶群,可以說是比較成熟的解決方案,也是很多系統當然的選擇。 不過,在使用 memcached 和 redis 過程中,還是碰到了不少的問題和局限:
Cluster 支持不夠。在擴容、負載均衡、高可用等方面存在明顯不足。
持久化支持不好,出現問題后恢復的代價大。memcached 完全不支持持久化,redis 的持久化會造成系統間歇性的負載很高。
我期待的理想 Cache 系統良好的 cluster 支持
Key 可以動態分散(Auto Sharding)在不同的服務器上,可以通過動態添加服務器節點增加系統容量。
沒有單點失效,任何一個單點都不會造成數據不可訪問。
讀寫負載可以均勻分布在系統的不同節點上。
支持異步持久化支持
方便快速恢復,甚至可以直接用作 key/value 數據庫。 經常在跟業界朋友交流時,會提到用 key 分段的方法來做容量擴展以及負載均衡。但是用靜態的 key 分段會有不少問題:
Cache 系統本身及使用 cache
的客戶端都需要預設一個分段邏輯,這個邏輯后期如果需要調整將會非常困難。不能解決單點失效的問題,還需要額外的手段。運維需要更多的人為參與,避免 key 超出現有分區,一旦出現 key 找不到對應服務器,訪問直接失敗。
基于這些想法,我花了幾天時間在 google, stack overflow, quora 上看了很多大家關于 cache cluster 的討論,找到一個比較新系統 Couchbase。
mem vs cb memcached VS 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 已經被我們在生產環境中大量采用。
關于作者張虎
weibo: @Tiger_張虎, 云巴 (yunba.io) 創始人,yunba.io 云后端服務。 JPush 創始人,原CTO。 Oracle VM 創始團隊成員。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/61672.html
摘要:此時,可以構建映像,并將其部署為容器。從執行以下操作以上命令將使用文件中定義的端口,構建對應鏡像和部署成為容器。 showImg(https://segmentfault.com/img/remote/1460000010122752); 數人云之前分享了《如何用Docker實現PHP命令行程序的CI/CD》,詳細地介紹了整體過程中的思路以及以及注意事項,今天帶來的文章將闡述怎樣部署一...
摘要:本文將演示如何使用創建集群。本次將使用,和企業版進行測試。默認情況下服務僅在集群內可見,但我們會將該服務作為一個負載均衡器暴露出去。等待分鐘左右讓負載均衡器啟動。 編者按:本文由Couchbase 的VP Arun Gupta 編寫,展示了如何用Kubernetes 設置 Couchbase 集群。 Couchbase Server是一個開源的、分布式的文檔型NoSQL數據庫。它有低...
摘要:下班后閑著無聊看了下中的自動配置,把我的理解跟大家說下。上述的每一個自動配置類都有自動配置功能,也可在配置文件中自定義配置。 微信公眾號:一個優秀的廢人。如有問題,請后臺留言,反正我也不會聽。 前言 這個月過去兩天了,這篇文章才跟大家見面,最近比較累,大家見諒下。下班后閑著無聊看了下 SpringBoot 中的自動配置,把我的理解跟大家說下。 配置文件能寫什么? 相信接觸過 Sprin...
摘要:構建系統強烈建議你選擇一個支持依賴管理的構建系統,并且可以使用發布到中心存儲庫的工件。例如,要升級到另一個,你可以將以下元素添加到你的在前面的示例中,我們指定了一個,但是任何依賴類型都可以以相同的方式被覆蓋。 13. 構建系統 強烈建議你選擇一個支持依賴管理的構建系統,并且可以使用發布到Maven中心存儲庫的工件。我們建議你選擇Maven或Gradle,可以讓Spring Boot與其...
閱讀 2471·2023-04-25 21:41
閱讀 1647·2021-09-22 15:17
閱讀 1921·2021-09-22 10:02
閱讀 2433·2021-09-10 11:21
閱讀 2569·2019-08-30 15:53
閱讀 996·2019-08-30 15:44
閱讀 946·2019-08-30 13:46
閱讀 1125·2019-08-29 18:36