几个Cache方案的比较

这两天 try了一些 cache solution,基本都是 memcached一派出来的,但功能和适应的需求还是有很大不一样的,我主要从 replication这个角度来看,因为我们项目中需要用到 replication~~~

Memcachedb

http://memcachedb.org/memcachedb-guide-1.0.pdf

很好的一个介绍,对于功能和使用已经很详细了(一个不大不小的问题,文档更新有点问题哦,竟然自己的私有协议改了 README都不及时更新一下,我是看代码才知道 rep_ismaster/rep_whoismaster都不能用了,可以用stats repms来代替)

问题:

  • 不支持 cache超时,得 application自己来判定处理

特性:

  • 支持单 master多 slave(我试验了 1master+2slave的环境)
    • 只有 master可写,所有 node都可以读(写会报错)
    • 支持 fail over,通过 priority可以定义 fail over的策略
  • 部分支持 transaction
  • 可以查询 master( stats repms)
  • 数据库采用 Berkeley DB
  • 支持 memcached协议

Tokyo Tyrant

http://blog.s135.com/post/362/

特性:

  • 支持双 master备份(仅支持双 master,不支持更多 master)
    • 两个 master都可读写,自动双机同步
    • 不需要 fail over(都是 master,任何 node坏了都可以继续 work)
  • 支持单 master多 slave
    • 这种情况下,只有对 master的写会被同步,对 slave的写会是 local write
    • Master会单点故障,并且无法 fail over?
  • 支持双 master备份,同时多 slave从 master同步
    • 就是上面两种的组合,对 slave写是 local write
    • Master可以解决单点故障,但还不是多 master方案(比如有 Master A/B, slave C从 A上同步,如果 A坏了, C还是无法自动从 B同步的,所以这个方案不解决什么问题)
  • 数据库采用 Tokyo Cabinet(据说性能更好?)
  • 支持 memcached协议和 http协议

说明:

它的参数 mhost和 mport是指定了 master的 ip/hostname和 port,也就是 replicate的 source,所以:

  • 双 master就是两个 node相互指定 mhost和 mport
  • 单 master多 slave就是 master不指定 mhost和 mport, slave指定 mhost和 mport到 master

Repcached

http://repcached.lab.klab.org/

http://dsas.blog.klab.org/archives/51136918.html

http://www.fcicq.net/wp/?p=555

又是一个日本人的 memcached的扩充(通过 patch),发现日本人在 memcached上做的工作真不少啊 ~~~

它给 memcached加上了 replication的支持,应该说它是一个单 master单 slave的同步方案,本来我想试一下它是否支持更多 node的,结果发现奇怪的事情在于:编译时如果 —enable-replication就不能 —enable-threads,master在启动后会 listen replication端口,但一旦有人 connect上来,该端口就不再 listen,这样就只能一个client connect上来,所以也就只能一个 master+一个 slave了,不知道是不是我用得有问题?

repcached的资料相比于前两个比较少,这里多说两句,由于它是 memcached的 patch,所以使用方法和memcached基本相似,只是多了两个参数:

-x <ip_addr>  hostname or IP address of peer repcached

-X       TCP port number for replication (default: 11212)

在 master上可以通过 -X指定 replication port,在 slave上通过 -x/-X找到 master并 connect上去,事实上,如果同时指定了 -x/-X, repcached一定会尝试连接,但如果连接失败,它就会用 -X参数来自己 listen(成为master);如果 master坏掉, slave侦测到连接断了,它会自动 listen而成为 master;而如果 slave坏掉,master也会侦测到连接断,它就会重新 listen等待新的 slave加入。

从这方案的技术实现来看,其实它是一个单 master单 slave的方案,但它的 master/slave都是可读写的,而且可以相互同步,所以从功能上看,也可以认为它是双机 master-master方案。

特性:

  • 支持单 master单 slave
    • Master-slave间相互同步,二者都可读写
    • Master支持 fail over
  • 不支持 persistent
  • 支持 memcached协议
  • 资料较少

总结:

Tokyo Tyrant适合双机 master-master方案, memcachedb适合单 master多 slave方案,如果很在意性能,并且不需要持久化, repcached也是一个不错的选择。

从可靠性上看,双机互备已经是足够了,但只支持双机客观上还是限制了 load-balance对 scalability的贡献(特别是如果读多写少的时候)

从性能上看,读多写少的场景, memcachedb是个不错的选择,当然如果不要持久化可能会更好点( sina能不能把 persistent作为一个 option阿?)写操作多的时候, repcached应该是最高效的了,其次 Tokyo Tyrant。(此处的性能说明我还没有真实地测过,只是从它们的实现和 benchmark数据推断) ~~~~当然当然,如果不要replication, memcached一定是最优选择了 ~~~

为什么要 replication呢?如果你不单单把它当 cache用,希望及时有机器挂掉,数据都不会丢失 ~~~当然这个问题也有其他解决方案,比如 GFS,扯远了 ~~~

原文发布时间为:2012-06-26

时间: 2024-09-18 00:37:51

几个Cache方案的比较的相关文章

我该选择哪一种 Azure 的分布式快取 (Cache) 方案?

在 2014年5月12日,微软宣布 Azure Redis Cache (技术预览) 开始提供用户测试使用.微软公司建议 Azure 用户所 有的新开发的应用系统,未来皆采用 Azure Redis Cache.Azure Redis Cache 提供用户一个由微软管理,安全,专用的 Redis 快取服务. Microsoft Azure 提供了这项服务之后,用户开始可以充分利用 Redis 目前在业界既有的生态系统与 丰富的功能,并 透过微软 稳定地营运与监管.   不同于只能使用 Key-V

C#, 程序员的新工具

程序|程序员 这世界上没有什么比编程工具更加牵动程序员的心.VC.VB.DELPHI.JAVA--这些耀眼的名字不仅占据了程序员的生活,而且似乎已经成为了某种信仰.可是,伴随着新世纪的脚步,这些信仰又一次遭遇了重大的挑战.微软,这头被法官和黑客们折腾得既疲惫又恼怒的狮子,发誓要保住它头上的王冠,拼尽全力,拿出了看家的本事--.NET战略.作为 .NET的核心开发语言,C# 顺理成章地浮出了水面.程序员们也就不得不做出一个痛苦的选择,跟在谁的后面?要找出答案就不得不作一番比较和预测.笔者作为一个资

微博CacheService架构浅析

微博作为国内最大的社交媒体网站之一,每天承载着亿万用户的服务请求,这些请求的背后,需要消耗着巨大的计算.内存.网络.I/O等资源.而且因为微博的产品特性,节假日.热门事件等可能带来突发数倍甚至十几倍的访问峰值,这些都对于支撑微博的底层基础架构提出了比较严苛的要求,需要满足: 每秒数十万的用户请求 数据更新的实时性 服务请求的低响应时间 99.99%以上的服务可用性 为了满足业务的发展需要,微博平台开发了一套高性能高可用的CacheService架构用于支撑现有线上的业务系统的运转.但"冰动三尺非

HBase BlockCache系列 – 走进BlockCache

和其他数据库一样,优化IO也是HBase提升性能的不二法宝,而提供缓存更是优化的重中之重.最理想的情况是,所有数据都能够缓存到内存,这样就不会有任何文件IO请求,读写性能必然会提升到极致.然而现实是残酷的,随着请求数据的不断增多,将数据全部缓存到内存显得不合实际.幸运的是,我们并不需要将所有数据都缓存起来,根据二八法则,80%的业务请求都集中在20%的热点数据上,因此将这部分数据缓存起就可以极大地提升系统性能. HBase在实现中提供了两种缓存结构:MemStore和BlockCache.其中M

Phpwind发布windframework开源开发框架

中介交易 SEO诊断 淘宝客 云主机 技术大厅 今日,知名互联网产品与服务提供商phpwind正式推出通用的php开源技术框架'windframework'.基于phpwind多年专注php开发积累沉淀下来的技术和解决方案,windframework将为未来推出的phpwind下一代社区产品提供统一的应用开发架构服务.而作为一款通用型的框架,windframework也将为开发者提供更为简单.安全.扩展性良好的应用开发支持. phpwind旗下社区建站通用型程序phpwind,作为一款广受站长欢

hbase 学习(十五)缓存机制以及可以利用SSD作为存储的BucketCache

下面介绍Hbase的缓存机制: a.HBase在读取时,会以Block为单位进行cache,用来提升读的性能 b.Block可以分类为DataBlock(默认大小64K,存储KV).BloomBlock(默认大小128K,存储BloomFilter数据).IndexBlock(默认大小128K,索引数据,用来加快Rowkey所在DataBlock的定位) c.对于一次随机读,Block的访问顺序为BloomBlock.IndexBlock.DataBlock,如果Region下面的StoreFi

双11万亿流量下的分布式缓存

分享嘉宾: 宗岱:阿里巴巴资深技术专家,2008年加入淘宝,阿里分布式缓存.NoSQL数据库Tair和Tengine负责人.   Tair概览 Tair发展历程 Tair在阿里巴巴被广泛使用,无论是淘宝天猫浏览下单,还是打开优酷浏览播放时,背后都有Tair的身影默默支撑巨大的流量.Tair的发展历程如下: 2010.04 Tair v1.0正式推出@淘宝核心系统: 2012.06 Tair v2.0推出LDB持久化产品,满足持久化存储需求: 2012.10 推出RDB缓存产品,引入类Redis接

Nginx缓存Cache的配置方案以及相关内存占用问题解决_nginx

nginx缓存cache的5种方案 1.传统缓存之一(404) 这个办法是把nginx的404错误定向到后端,然后用proxy_store把后端返回的页面保存. 配置: location / { root /home/html/;#主目录 expires 1d;#网页的过期时间 error_page 404 =200 /fetch$request_uri;#404定向到/fetch目录下 } location /fetch/ {#404定向到这里 internal;#指明这个目录不能在外部直接访

nginx cache静态化+tmpfs 高性能cdn方案

匹配不同URL访问不同后端 如果想通过访问不同类别URL分配到不同的后端通过nginx实现,首先举个例子,将需求场景进行描述: 域名为:www.xxx.com  (本机IP为192.168.12.63) 域名下有3个目录product.cart.goods,这3个目录分别为不同业务,那么我们打算访问3个不同目录下的内容时分别分配到不同的后端进行处理,如访问www.xxx.com/product/xxx.html,那么我们预设是下面3类情况: 访问product下的资源时分配到127.0.0.1: