再次和Memcached、Tbstore亲密接触

  相关背景:

1、   以前在研究DB扩展方案的时候也有接触过一些大型Cache系统,但是也都没有非常深入;

2、   对于我们一直在使用的Tbstore了解并不多,仅仅知道这是一个集中式cache系统,由多隆编写,只允许单台,不能分布式;我相信很多人都和我持有相同的观点,但其实这些都是误解!

3、   受叶博邮件的提醒,看了下CSDN WEB 2.0大会的各个主题,对大型网店架构这个主题我很感兴趣,于是search了一把,发现大型应用中cache系统实在是太重要了,于是决定深入研究下相关的cache系统;

 

首先让我想到的是memcached,因为这个cache系统有很多大公司都在用,比如ebayamazon……

介绍下这个系统的一些key point

1Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
2
MemcachedDanga Interactive开发,用于提升LiveJournal.com访问速度的,后来将其开源。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。

3Memcached存储和访问速度非常快,它使用libevent,可以应付任意数量打开的连接(使用epoll,而非poll),使用非阻塞网络IO,分布式散列对象到不同的服务器,查询复杂度是O(1)

4Memcached客户端支持几乎所有主流开发语言,包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。

5Memcached支持对cache内对象生命周期进行灵活设置……;

6、分布式算法采用CRC32;

7、不提供cache内容的复制和持久化;

这个咚咚我自己也下载下来亲自使用过,使用非常简单,Javaclient api也有很好的支持,有很多公司还专门开发了improved版本,对于单台和分布式环境下的api调用都封装的很好,对调用者来说完全是透明的;

压力我倒是没有测,但是我想我完全能够信任ebayamazon……

再说下我们使用的tbstore

在我深入了解并自己使用过memcached之后,我觉得这个东西真的是太爽了,为什么我们还要用tbstore呢,而且还不支持分布式,扩展性有限?

其实这些都是我的误解,在向多隆了解之后感触很多,tbstore其实也是支持分布式的,来看一下他有哪些特点吧

1、   tbstore是由淘宝的多隆实现的高性能、分布式的基于Berkeley DBcache系统,目前在aliababa集团内部使用非常广泛,特别是对于淘宝,tbstore可是应用非常广泛,比如ESIcheckcodedescriptionstory……;

2、   客户端支持不是很丰富,但我们现在只需要java即可;

3、   分布式算法实现:根据保存的key,对key进行hash算法,取得hash值,再对hash值与总Cache服务器数据取模。然后根据取模后的值,找到服务器列表中下标为此值Cache服务器。由java client api封装实现,应用无需关心;这点和memecached的实现方案完全一致;

4、   也支持对cache内对象生命周期设置;

 

其实比较下两个cache系统,你会发现两者的实现非常类似,包括分布式实现的算法;两者最大的区别是memcached完全基于内存,而tbstore基于Berkeley DB

其共同的缺点也很明显,当系统需要新增server的时候以前的绝大部分cache内容都会失效,因为根据相同的key会被定位到新的server上面

  我想,我经历了一次很好的回归,感觉很不错,呵呵,有些东西当你再次回过头来看的时候,你会觉得非常有意思,而且他会让你的思维和见识达到一个新的高度,以前你没有想通的东西会变得豁然开朗,呵呵

也希望大家有机会可以回过头去看一些自己曾经看过的、学过的咚咚,会有另外一番感受的噢

你可能感兴趣的:(java,算法,cache,memcached,服务器,缓存系统)