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。

图片 1memcached VS couchbase

Couchbase 的集群规划针对顶网

Couchbase
群集所有点都是指向顶之,只是当创建群或者投入集群时用指定一个主节点,一旦结点成功进入集群,所有的结点对顶。

图片 2

图片来自: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 失效。
  • 要是服务器容量不同,管理特别累。
  • 前方提到了,运维、配置非常不便宜。

为拿 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]]

图片 3

图表源于:http://dustin.sallings.org/2010/06/29/memcached-vbuckets.html

由于 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 已经为我们当生养条件中大量行使。

 

有关作者

Tiger

weibo: @Tiger_张虎, 云巴 (yunba.io) 创始人,yunba.io 云后端服务。
JPush 创始人,原CTO。 Oracle VM 创始团队成员。

相关文章