摘要:的集群設(shè)計對等網(wǎng)群集所有點都是對等的,只是在創(chuàng)建群或者加入集群時需要指定一個主節(jié)點,一旦結(jié)點成功加入集群,所有的結(jié)點對等。對等網(wǎng)的優(yōu)點是,集群中的任何節(jié)點失效,集群對外提供服務(wù)完全不會中斷,只是集群的容量受影響。
在移動互聯(lián)網(wǎng)時代,我們面對的是更多的客戶端,更低的請求延遲,這當然需要對數(shù)據(jù)做大量的 Cache 以提高讀寫速度。
術(shù)語節(jié)點:指集群里的一臺服務(wù)器。
現(xiàn)有 Cache 系統(tǒng)的特點目前業(yè)界使用得最多的 Cache 系統(tǒng)主要是 memcached 和 redis。 這兩個 Cache 系統(tǒng)都有都有很大的用戶群,可以說是比較成熟的解決方案,也是很多系統(tǒng)當然的選擇。 不過,在使用 memcached 和 redis 過程中,還是碰到了不少的問題和局限:
Cluster 支持不夠。在擴容、負載均衡、高可用等方面存在明顯不足。
持久化支持不好,出現(xiàn)問題后恢復(fù)的代價大。memcached 完全不支持持久化,redis 的持久化會造成系統(tǒng)間歇性的負載很高。
我期待的理想 Cache 系統(tǒng)良好的 cluster 支持
Key 可以動態(tài)分散(Auto Sharding)在不同的服務(wù)器上,可以通過動態(tài)添加服務(wù)器節(jié)點增加系統(tǒng)容量。
沒有單點失效,任何一個單點都不會造成數(shù)據(jù)不可訪問。
讀寫負載可以均勻分布在系統(tǒng)的不同節(jié)點上。
支持異步持久化支持
方便快速恢復(fù),甚至可以直接用作 key/value 數(shù)據(jù)庫。 經(jīng)常在跟業(yè)界朋友交流時,會提到用 key 分段的方法來做容量擴展以及負載均衡。但是用靜態(tài)的 key 分段會有不少問題:
Cache 系統(tǒng)本身及使用 cache
的客戶端都需要預(yù)設(shè)一個分段邏輯,這個邏輯后期如果需要調(diào)整將會非常困難。不能解決單點失效的問題,還需要額外的手段。運維需要更多的人為參與,避免 key 超出現(xiàn)有分區(qū),一旦出現(xiàn) key 找不到對應(yīng)服務(wù)器,訪問直接失敗。
基于這些想法,我花了幾天時間在 google, stack overflow, quora 上看了很多大家關(guān)于 cache cluster 的討論,找到一個比較新系統(tǒng) Couchbase。
mem vs cb memcached VS couchbase
Couchbase 群集所有點都是對等的,只是在創(chuàng)建群或者加入集群時需要指定一個主節(jié)點,一旦結(jié)點成功加入集群,所有的結(jié)點對等。
對等網(wǎng)的優(yōu)點是,集群中的任何節(jié)點失效,集群對外提供服務(wù)完全不會中斷,只是集群的容量受影響。 Smart Client
由于 couchbase 是對等網(wǎng)集群,所有的節(jié)點都可以同時對客戶端提供服務(wù),這就需要有方法把集群的節(jié)點信息暴露給客戶端,couchbase 提供了一套機制,客戶端可以獲取所有節(jié)點的狀態(tài)以及節(jié)點的變動,由客戶端根據(jù)集群的當前狀態(tài)計算 key 所在的位置。 vBucket
vBucket 概念的引入,是 couchbase 實現(xiàn) auto sharding,在線動態(tài)增減節(jié)點的重要基礎(chǔ)。
簡單的解釋 vBucket 可以從靜態(tài)分片開始說起,靜態(tài)分片的做法一般是用 key 算出一個 hash,得到對應(yīng)的服務(wù)器,這個算法很簡單,也容易理解。如以下代碼所示:
servers = ["server1:11211", "server2:11211", "server3:11211"] server_for_key(key) = servers[hash(key) % servers.length]
但也有幾個問題:
如果一臺服務(wù)器失效,會造成該分片的所有 key 失效。
如果服務(wù)器容量不同,管理非常麻煩。
前面提到過,運維、配置非常不方便。
為了把 key 跟服務(wù)器解耦合,couchbase 引入了 vBucket。可以說 vBucket 代表一個 cache 子集,主要特點:
key hash 對應(yīng)一個 vBucket,不再直接對應(yīng)服務(wù)器。
集群維護一個全局的 vBucket 與服務(wù)器對應(yīng)表。
前面提到的 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 跟服務(wù)器的靜態(tài)對應(yīng)關(guān)系解耦合,基于 vBucket 可以實現(xiàn)一些非常強大有趣的功能,例如:
Replica,以 vBucket 為單位的主從備份。如果某個節(jié)點失效,只需要更新 vBucket 映射表,馬上啟用備份數(shù)據(jù)。
動態(tài)擴容。新增加一個節(jié)點后,可以把部分 vBucket 轉(zhuǎn)移到新節(jié)點上,并更新 vBucket 映射表。
vBucket 非常重要,以后可以多帶帶寫一篇文章分享。
總結(jié)Couchbase 的對等網(wǎng)設(shè)計,smart client
直接獲取整的集群的信息,在客戶端實現(xiàn)負載均衡,整個集群沒有單點失效,并且完全支持平行擴展。
vBucket 的引入,完全實現(xiàn)了 auto sharding,可以方便靈活的把數(shù)據(jù)的子集在不同節(jié)點上移動,以實現(xiàn)集群動態(tài)管理。
Couchbase 有一個非常專業(yè)的 web 管理界面,并且支持通過 RESTful API 管理,這也是 memcached,
redis 不能企及的。
如果只是做 key/value 的 cache,Couchbase 可以完全取代 memcached。
Couchbase 已經(jīng)被我們在生產(chǎn)環(huán)境中大量采用。
關(guān)于作者張虎
weibo: @Tiger_張虎, 云巴 (yunba.io) 創(chuàng)始人,yunba.io 云后端服務(wù)。 JPush 創(chuàng)始人,原CTO。 Oracle VM 創(chuàng)始團隊成員。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/61672.html
摘要:此時,可以構(gòu)建映像,并將其部署為容器。從執(zhí)行以下操作以上命令將使用文件中定義的端口,構(gòu)建對應(yīng)鏡像和部署成為容器。 showImg(https://segmentfault.com/img/remote/1460000010122752); 數(shù)人云之前分享了《如何用Docker實現(xiàn)PHP命令行程序的CI/CD》,詳細地介紹了整體過程中的思路以及以及注意事項,今天帶來的文章將闡述怎樣部署一...
摘要:本文將演示如何使用創(chuàng)建集群。本次將使用,和企業(yè)版進行測試。默認情況下服務(wù)僅在集群內(nèi)可見,但我們會將該服務(wù)作為一個負載均衡器暴露出去。等待分鐘左右讓負載均衡器啟動。 編者按:本文由Couchbase 的VP Arun Gupta 編寫,展示了如何用Kubernetes 設(shè)置 Couchbase 集群。 Couchbase Server是一個開源的、分布式的文檔型NoSQL數(shù)據(jù)庫。它有低...
摘要:下班后閑著無聊看了下中的自動配置,把我的理解跟大家說下。上述的每一個自動配置類都有自動配置功能,也可在配置文件中自定義配置。 微信公眾號:一個優(yōu)秀的廢人。如有問題,請后臺留言,反正我也不會聽。 前言 這個月過去兩天了,這篇文章才跟大家見面,最近比較累,大家見諒下。下班后閑著無聊看了下 SpringBoot 中的自動配置,把我的理解跟大家說下。 配置文件能寫什么? 相信接觸過 Sprin...
摘要:構(gòu)建系統(tǒng)強烈建議你選擇一個支持依賴管理的構(gòu)建系統(tǒng),并且可以使用發(fā)布到中心存儲庫的工件。例如,要升級到另一個,你可以將以下元素添加到你的在前面的示例中,我們指定了一個,但是任何依賴類型都可以以相同的方式被覆蓋。 13. 構(gòu)建系統(tǒng) 強烈建議你選擇一個支持依賴管理的構(gòu)建系統(tǒng),并且可以使用發(fā)布到Maven中心存儲庫的工件。我們建議你選擇Maven或Gradle,可以讓Spring Boot與其...
閱讀 2493·2023-04-25 21:41
閱讀 1665·2021-09-22 15:17
閱讀 1934·2021-09-22 10:02
閱讀 2452·2021-09-10 11:21
閱讀 2589·2019-08-30 15:53
閱讀 1007·2019-08-30 15:44
閱讀 960·2019-08-30 13:46
閱讀 1158·2019-08-29 18:36