Couchbase学习笔记(1)——概述

在移动互联网时代,咱们面对的是更多的客户端,更低的请求延迟,这固然须要对数据作大量的 Cache 以提升读写速度。html

术语

  • 节点:指集群里的一台服务器。

现有 Cache 系统的特色

目前业界使用得最多的 Cache 系统主要是 memcached 和 redis。 这两个 Cache 系统都有都有很大的用户群,能够说是比较成熟的解决方案,也是不少系统固然的选择。 不过,在使用 memcached 和 redis 过程当中,仍是碰到了很多的问题和局限:web

  • Cluster 支持不够。在扩容、负载均衡、高可用等方面存在明显不足。
  • 持久化支持很差,出现问题后恢复的代价大。memcached 彻底不支持持久化,redis 的持久化会形成系统间歇性的负载很高。

理想的 Cache 系统

良好的 cluster 支持redis

  • 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日前宣布推出其新版的NoSQL数据服务器——Couchbase Server。该产品基于Apache CouchDB,并整合了GeoCouch(一个基于Erlang、紧密集成的地理空间索引系统,可支持LBS应用)。负载均衡

Couchbase公司是由CouchOne与Membase合并组成,但合并后推出的第一款产品Couchbase Server并无包含Membase的任何技术。Couchbase Server分为企业版和社区版两个版本,其中企业版通过了严格的QA过程,并有技术支持和维护保障,但二者的API彻底兼容。Couchbase Server企业版本每节点订价范围从999美圆(10×5技术支持,5次),到4499美圆(24×7技术支持,无限次)。运维

据悉,全部企业版和社区版都提供包括Red Hat,Ubuntu Linux和Windows在内的各操做系统版本。Mac OS X有社区版。异步

此外,Couchbase还宣布成立顾问委员会为其提供战略和技术上的指导,委员会成员包括PostgreSQL开发核心团队成员Josh Berkus,SQLite的创始人Richard Hipp,HTTP与REST创始人Roy Fielding,Zynga CTO Cadir Lee,《软件人才管理的艺术》做者Michael Loop,Cloudera CEO Michael Olson,YSlow的做者、Google性能专家Steve Souders等。memcached


Couchbase 的集群设计对等网

Couchbase 群集全部点都是对等的,只是在建立群或者加入集群时须要指定一个主节点,一旦结点成功加入集群,全部的结点对等。

high_level_architecture

图片来源: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]]

vBucket

图片来源: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 已经被咱们在生产环境中大量采用。
相关文章
相关标签/搜索