成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Couchbase 介紹 - 更好的 Cache 系統(tǒng)

Amio / 1875人閱讀

摘要:的集群設(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ù)器,訪問直接失敗。

最接近需求的系統(tǒng):Couchbase

基于這些想法,我花了幾天時間在 google, stack overflow, quora 上看了很多大家關(guān)于 cache cluster 的討論,找到一個比較新系統(tǒng) Couchbase。


mem vs cb memcached VS couchbase

Couchbase 的集群設(shè)計對等網(wǎng)

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

相關(guān)文章

  • 輕松搞定|將PHP和Couchbase應(yīng)用部署為Docker

    摘要:此時,可以構(gòu)建映像,并將其部署為容器。從執(zhí)行以下操作以上命令將使用文件中定義的端口,構(gòu)建對應(yīng)鏡像和部署成為容器。 showImg(https://segmentfault.com/img/remote/1460000010122752); 數(shù)人云之前分享了《如何用Docker實現(xiàn)PHP命令行程序的CI/CD》,詳細地介紹了整體過程中的思路以及以及注意事項,今天帶來的文章將闡述怎樣部署一...

    X1nFLY 評論0 收藏0
  • 使用Kubernetes創(chuàng)建 Couchbase 集群

    摘要:本文將演示如何使用創(chuàng)建集群。本次將使用,和企業(yè)版進行測試。默認情況下服務(wù)僅在集群內(nèi)可見,但我們會將該服務(wù)作為一個負載均衡器暴露出去。等待分鐘左右讓負載均衡器啟動。 編者按:本文由Couchbase 的VP Arun Gupta 編寫,展示了如何用Kubernetes 設(shè)置 Couchbase 集群。 Couchbase Server是一個開源的、分布式的文檔型NoSQL數(shù)據(jù)庫。它有低...

    xumenger 評論0 收藏0
  • SpringBoot | 自動配置原理

    摘要:下班后閑著無聊看了下中的自動配置,把我的理解跟大家說下。上述的每一個自動配置類都有自動配置功能,也可在配置文件中自定義配置。 微信公眾號:一個優(yōu)秀的廢人。如有問題,請后臺留言,反正我也不會聽。 前言 這個月過去兩天了,這篇文章才跟大家見面,最近比較累,大家見諒下。下班后閑著無聊看了下 SpringBoot 中的自動配置,把我的理解跟大家說下。 配置文件能寫什么? 相信接觸過 Sprin...

    KitorinZero 評論0 收藏0
  • Spring Boot 參考指南(構(gòu)建系統(tǒng)

    摘要:構(gòu)建系統(tǒng)強烈建議你選擇一個支持依賴管理的構(gòu)建系統(tǒng),并且可以使用發(fā)布到中心存儲庫的工件。例如,要升級到另一個,你可以將以下元素添加到你的在前面的示例中,我們指定了一個,但是任何依賴類型都可以以相同的方式被覆蓋。 13. 構(gòu)建系統(tǒng) 強烈建議你選擇一個支持依賴管理的構(gòu)建系統(tǒng),并且可以使用發(fā)布到Maven中心存儲庫的工件。我們建議你選擇Maven或Gradle,可以讓Spring Boot與其...

    thursday 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<