这两天 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

本文来自云栖社区合作伙伴“Linux中国”

几个Cache方案的比较相关推荐

  1. 爱奇艺本地实时Cache方案

    高并发系统离不开Cache,通过采用更多的本地Cache来提升系统吞吐量和稳定性是必然的,这其中的最大难点就是解决分布式本地Cache数据的实时性和一致性问题,否则本地Cache就无法更普遍应用于频繁 ...

  2. HBase上关于CMS、GC碎片、大缓存的一种解决方案:Bucket Cache

    介绍BucketCache前,先对HBase的Cache做个介绍:  一.HBase在读取时,会以Block为单位进行cache,用来提升读的性能: 二.Block可以分类为DataBlock(默认大 ...

  3. OS实战笔记(5)-- Cache和内存

    最近工作忙,业余时间也基本投入到了Unity中,OS实战笔记看着要烂尾了,提醒自己要抽时间把这个专题补上,今天先更一篇关于Cache和内存的. 本篇笔记主要复习几个点: 1. 程序局部性原理 2. C ...

  4. 看完JDK并发包源码的这个性能问题,我惊了!

    国庆的时候闲来无事,就随手写了一点之前说的比赛的代码,目标就是保住前 100 混个大赛的文化衫就行了. 现在还混在前 50 的队伍里面,稳的一比. 其实我觉得大家做柔性负载均衡那题的思路其实都不会差太 ...

  5. 全民K歌推荐后台架构

    分享嘉宾:davidwwang 腾讯音乐 | 基础开发组副组长 编辑整理:梁尔舒 出品平台:DataFunTalk 导读:首先介绍一下我们业务背景,腾讯音乐集团,于2018年是从腾讯拆分独立上市,目前 ...

  6. 关于架构的一点思考(一)

    上几天,以前公司一个同事在Q群上发了一个<高性能存储平台设计文档>,说请大家帮忙看下,指点一下. 下图是这个设计里的[系统主体架构图]: 看了当即觉得有点蛋疼. 首先是网关那里,使用的是P ...

  7. hbase中为何不能向表中插入数据_Hbase快速入门(超精炼总结)

    基本概念: HBase是列簇式Key-Value存储系统,构建在HDFS之上的.支持随机插入和删除. 总结Hbase的架构核心,就两个字"有序" . 磁盘的读写,随机与顺序,相差3 ...

  8. 揭秘!双11万亿流量下的分布式缓存系统 Tair

    阿里妹导读:本文以双11面临的挑战为背景,从Tair(阿里自研高速缓存系统)发展和应用开始谈起,重点分享了性能优化方面的实践,最后对缓存热点难题给出了解决方案,希望能对大家的工作有所启发. 本文作者为 ...

  9. Hibernate之必须导入jar包

    Hibernate必须导入的包 hibernate是ORM的解决方案,其底层对数据库的操作依赖于JDBC,所以必须先取得JDBC驱动程序,在这使用的是MySQL,所以必须至先取得MySQL的JDBC驱 ...

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

    摘要: 12月13-14日,由云栖社区与阿里巴巴技术协会共同主办的<2017阿里巴巴双11技术十二讲>顺利结束,集中为大家分享了2017双11背后的黑科技.本文是<双11万亿流量下的 ...

最新文章

  1. 全员远程办公,半年入 1 亿美元:GitHub 的最大竞争对手上市了!
  2. 移动互联网漫谈(4)-移动通信网络
  3. Linux电源管理(10)_autosleep
  4. java守护线程和用户线程
  5. oracle unpivot 索引_oracle 11g 行列转换之unpivot、pivot
  6. 《Python Cookbook 3rd》笔记(3.8):分数运算
  7. php 二维数组排序函数,php自定义函数实现二维数组排序功能
  8. mysql数据库(1):连接与断开服务器
  9. android settings 源码,菜鸟学Android源码-Settings(2)
  10. python表格处理_python如何处理表格?
  11. 网易游戏开发工程师笔试题
  12. vue-router传递参数的两种方式
  13. C语言函数指针和指针函数的定义和调用
  14. java 4.0 下载_poi.jar包下载 Apache POI 4.0.0 正式版 Office文档jar包 官方免费版 支持Java8+ 下载-脚本之家...
  15. java二路归并排序算法_二路归并排序的java实现
  16. soul软件的简单分析
  17. 比亚迪秦后排座椅拆卸
  18. 【组合优化】旅行商问题Traveling Salesman Problem(TSP)-约束定义
  19. 图片加文字用什么软件?推荐这三款软件给你
  20. Oracle 参数文件(spfile和pfile)

热门文章

  1. 日常运维管理 常用命令(3)
  2. 压力大根源不在教育本身
  3. CICS的临时存储队列操作
  4. 小游戏大天地 ——开发者的梦想
  5. 六、面向对象,会了面向对象妈妈再也不用担心我找不到对象了!
  6. router单页面多个标签tags的用法router-view/router-view
  7. logging日志模块 , 序列化json pickle , 随机数random
  8. Gym 101915A(模拟)
  9. C# 的基本数据类型
  10. toStringequals方法