1、 以前在研究DB扩展方案的时候也有接触过一些大型Cache系统,但是也都没有非常深入;
2、 对于我们一直在使用的Tbstore了解并不多,仅仅知道这是一个集中式cache系统,由多隆编写,只允许单台,不能分布式;我相信很多人都和我持有相同的观点,但其实这些都是误解!
3、 受叶博邮件的提醒,看了下CSDN WEB 2.0大会的各个主题,对大型网店架构这个主题我很感兴趣,于是search了一把,发现大型应用中cache系统实在是太重要了,于是决定深入研究下相关的cache系统;
首先让我想到的是memcached,因为这个cache系统有很多大公司都在用,比如ebay、amazon……
介绍下这个系统的一些key point:
1、Memcached是高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
2、Memcached由Danga Interactive开发,用于提升LiveJournal.com访问速度的,后来将其开源。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。
3、Memcached存储和访问速度非常快,它使用libevent,可以应付任意数量打开的连接(使用epoll,而非poll),使用非阻塞网络IO,分布式散列对象到不同的服务器,查询复杂度是O(1)。
4、Memcached客户端支持几乎所有主流开发语言,包括 Perl/PHP/Python/Ruby/Java/C#/C 等等。
5、Memcached支持对cache内对象生命周期进行灵活设置……;
6、分布式算法采用CRC32;
7、不提供cache内容的复制和持久化;
这个咚咚我自己也下载下来亲自使用过,使用非常简单,Java的client api也有很好的支持,有很多公司还专门开发了improved版本,对于单台和分布式环境下的api调用都封装的很好,对调用者来说完全是透明的;
压力我倒是没有测,但是我想我完全能够信任ebay、amazon……
再说下我们使用的tbstore;
在我深入了解并自己使用过memcached之后,我觉得这个东西真的是太爽了,为什么我们还要用tbstore呢,而且还不支持分布式,扩展性有限?
其实这些都是我的误解,在向多隆了解之后感触很多,tbstore其实也是支持分布式的,来看一下他有哪些特点吧
1、 tbstore是由淘宝的多隆实现的高性能、分布式的基于Berkeley DB的cache系统,目前在aliababa集团内部使用非常广泛,特别是对于淘宝,tbstore可是应用非常广泛,比如ESI、checkcode、description、story……;
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上面;
我想,我经历了一次很好的回归,感觉很不错,呵呵,有些东西当你再次回过头来看的时候,你会觉得非常有意思,而且他会让你的思维和见识达到一个新的高度,以前你没有想通的东西会变得豁然开朗,呵呵
也希望大家有机会可以回过头去看一些自己曾经看过的、学过的咚咚,会有另外一番感受的噢