转:Sina的开源项目:Memcachedb与NCache

http://hi.baidu.com/zeorliu/blog/item/4ba513f4a3b7fbe77609d74e.html

http://www.dbanotes.net/opensource/sina_memcachedb_ncache.html Sina 开发团队的开源项目: Memcachedb 与 NCache
作者: Fenng | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
一直以为新浪是国内几家门户网站中技术比较糙的一家(也可能是太低调了),这应该是我比较无知的偏见,无意冒犯。看到这位新浪技术人员介绍的开源软件项目: NCache 与 Memcachedb 。挺欣赏他们这种国内环境下比较少见的分享精神。为他们喝彩!
NCache = Nginx Cache
Memcachedb = Memcached + Berkeley DB
这两个软件,应该都是从实际应用需求上得来的,可以说是"设计以致用",不是纯用于研究的,而设计思路很有些 "Mashup"。我没有实际使用经验,不知 Memcachedb 和 Tugela Cache 二者有何差别。我对 Memcachedb 这个项目倒是比较感兴趣的,把 Cache 和 DB 有效结合起来,消除 DB 单点 I/O 承受的应用压力...而且,实现方便且廉价...十分美好的前景。期待能有更多类似的项目涌现出来。国内的 Web 2.0 站点软件设计人员也可以借鉴一下。
--EOF--
更新:【很多人估计从来不仔细看文章的具体内容。我这篇文章里可看不出来 "对Memcachedb的思想比较推崇"的, TBStore 也未必就有多超前,内存 + DB 八百年前就有人想到了。只是赞扬一下 Sina 团队的精神而已,如果只是攀比牛B,去和Google 、eBay 比比好了】
更新2: Memcachedb 现在在有了官方站点:http://memcachedb.org/
http://www.javaeye.com/topic/157688 Memcachedb & Ncache 讨论
看了邮件列表:http://groups.google.com/group/python-cn/browse_thread/thread/dd297b13ad14d8dc
比较感兴趣的是:这个结合是用了memcached的内存cache机制和bdb的持久化机制;但是为什么不直接使用bdb呢?bdb应该也支持内存cache的呀。看文中也说到memcachedb是使用到了memcached的socket部分,哈bdb的内存管理,硬盘存储。这样的话,其实是改了bdb的socket部分,应该叫做enhancebdb
还有,看文中说到,会先把数据存到memcachedb中,然后异步更新到db中。读也直接从memcachdb读。那db变成备份了。是否有喧宾夺主之嫌?那么它的稳定性足可和db抗衡么?
如果结合Berkeley,cache性能不如memcached,稳定性不如db。由于不能在python-cn 邮件列表发文,故发于此。有熟悉者,能否就memcachedb得使用加以说明。大家也可以就此进行讨论。。。
又看了这篇blog:http://www.dbanotes.net/opensource/sina_memcachedb_ncache.html
文中最后提到是在bdb之前用memcached作了一个缓冲。那么,如果cache中数据在写入bdb之前down掉了,数据岂不是丢失了?还是有什么机制?如果直接存的话,根直接存数据库,或者直接存bdb有什么区别呢?那还不是相当于做了一个memcached+db.只是这个db换成了bdb,还有就是可能结合的更紧密了点
dogstar
刚看了一下ncache,基本上就是增强了nginx 的静态文件缓存能力。号称“a web cache system base on nginx web server. faster and more efficient than squid.”。
nginx+ncache做http服务器;memcachedb+mysqlProxy+mysql 组成db数据中心。这样的组合会不会很爽呀
dogstar
memcachedb牺牲了memcached的高性能换来了持久存储,为了防止cache挂掉,激增的数据库访问对db的压力,基本上,在大型web应用中,严重依赖cache机制,如果一但大部分cache down掉,瞬时db访问压力,绝对会把db压垮。这样的应用场景下,cache的自我恢复,变得首当其冲,牺牲点性能,来换回自我存储还是很值得的。但是不知道这个性能的损失由多大?
ncache只是看了一下项目主页介绍,没有评测过。应该算是nginx的缓存增强吧。不知道稳定性,性能如何。整体来说,两者都是在实际的应用场景中对开源项目的二次开发,且不论有多大的惊奇之处,单凭开源出来,也是值得赞赏的。中国开源界需要这样的力量。
robbin
第一眼看到memcachedb,我就知道它是我寻觅良久的“梦中情人”,呵呵。memcachedb的主要用途并不是让cache能够持久化,也许这种用法的确有点意思,但是cache持久化本身没有什么特别用处,既然是cache就没有持久化的必要。还是引用开发者自己的话来说明memcachedb的真正用途吧:
参考:http://blog.csdn.net/simonlsy/   引用:需要频繁读写的小数据。例如数字类服务就像点击数,需要频繁写入小数据的例如评论系统,需要记录用户状态的例如在线人数以及在线用户等等。当然,如果您想用来存储单笔超过10K以上的数据,例如新闻或者文章或者论坛帖子也可以.
JavaEye网站现在能够实时跟踪在线用户状态,能够记录用户读过什么帖子,这个功能的实现不能直接读写数据库表,否则性能要吃不消的,但也不能直接使用cache server,否则cache server重起清理缓存的时候,用户状态都丢失了。我们目前是用MySQL的内存表来实现的,性能还可以,但是内存表有很大的限制,妨碍了我们基于用户在线状态开发更多更有意思的功能。所以我一直在寻找一个能够实现高性能读写,不需要太严格的事务保护,但是带有存储机制的服务,并且这个服务必须能够支持分布式访问的,因此Berkeley DB就不适用了。而memcachedb正是我所想要的东西,可以给我们帮上大忙了,以后JavaEye网站会在很多场合用得上memcachedb,很 cool的小东西!是新浪的开发人员搞出来的,国内的互联网公司也可以在技术上向开源社区做出贡献了,很好!
http://blog.csdn.net/simonlsy/archive/2008/01/07/2027933.aspx memcachedb应用指南一:为什么选择memcachedb收藏
为什么要选择memcachedb:没有什么特殊的原因,我们有最好的理由就是,在做到最大不牺牲数据读、写性能的前提下,我们能够让您原来存储在memcache里的数据不再遭受系统宕机或者系统掉电而丢失,即使服务器电源爆炸了,只要硬盘还能够正常工作,换到另外一台服务器上,您的数据依然安然无恙地在硬盘上
性能的担忧:我们做过小数据测试,小数据(几十个字节)数据的读写,每秒钟并发能够维持在5000+(单块146Scis硬盘,CPU和内存配置几乎可以忽略因为这不是性能瓶颈)。基本上满足所有互联网高效存储的应用。
应用场合需要频繁读写的小数据。例如数字类服务就像点击数,需要频繁写入小数据的例如评论系统,需要记录用户状态的例如在线人数以及在线用户等等。当然,如果您想用来存储单笔超过10K以上的数据,例如新闻或者文章或者论坛帖子也可以,但是我们没有尝试过,如果您真的用来这样子玩了,可以反馈给我们。
数据备份&&读写分离:memcachedb支持主辅实时无差异同步,配置主服务和辅服务仅仅需要很短的一条启动命令。当然,您也可以利用这一便利特性来实现读写分离,那样子会让您的系统更加的高效。
稳定性:memcachedb目前被应用于新浪互动社区多个产品线中,具有钢铁般的品质,Sina出品,品质毋庸置疑。
http://www.ncache.org/ 已经加入 GOOGLE CODE 开源项目
http://code.google.com/p/ncache/ ncache = nginx cache
-What is ncache?
a web cache system base on nginx web server. faster and more efficient than squid.
we have published a release version 2.3 on 32-bit linux and a release version 3.1_64 on 64-bit linux now, you can see the change log here
if you want to improve your ncache performance (32-bit) please see this wiki paper: AdviceIOPerfomance
and we will maintain it be fresh.
you can also visit here by http://www.ncache.org/ or http://ncache.googlecode.com/
and left your message here
there is also have some BUGS, so if you find it please tell us, thanks alot.
shinepf@gmail.com shineyear@msn.com shuiyang@gmail.com shuiyang@live.cn fgxlzh@gmail.com
-Features
The large storage can save over 30,000,000 caches
The self sort share memory hash index
Base on the fastest web server framework : nginx
The high throughput and high concurrent volume of the cache request
Without http headers cache
Low cpu cost and low iowait
Memory cache the hottest data by MMAP like "varnish"
Texturixer storage system
Auto delete cache file when it is cold
-How to use?
You can see it on the wiki paper HowToNcacheV2 and HowToNcacheV3.
-Problem yet~
only support on linux 2.6 up (64-bit can support freebsd).
do not have enough information about the Run-time statistics
-The ncache Subversion repository is available http://ncache.googlecode.com/svn/
http://hi.baidu.com/jabber/blog/item/f556c7fc2959df86b901a0a7.html memcachedb的性能测试 2008-01-24 16:51
这几天听说了memcachedb。
memcachedb故名思义就是 memcached + bdb,是基于memcached Socket层和berkeley-db存储层结构的实现,是新浪互动社区技术团队2007年的一项重大的技术成果,现在应用于新浪互动社区多个产品线中,其中包括新浪博客等重头产品。能够实现任意 memcache api的调用、数据实时落地以及主辅实时备份。
初步感觉用处不大,无非就是利用memcache协议的一个db,性能应该不会很高。如果有分布式需要用手工分数据库的方法也可以实现。但看了介绍http://blog.csdn.net/simonlsy/archive/2008/01/07/2027933.aspx说性能可以达到读写5000次/秒,觉得还是有它的价值。所以简单测试了一下
1. 环境
OS: Linux, Ubuntu 7.04 64-bit
Memory: 4G
CPU: Intel(R) Pentium(R) D CPU 2.66GHz
SCSI DISK, ext3 file system
libevent 1.3e
Memcached 1.2.4
Berkeley DB 4.6.21
Java 1.6.0
memcachedb 0.1.1 安装方法 http://blog.csdn.net/simonlsy/
2. 测试方法
client/server在同一机上,使用ethernet interface连接, 不是localhost
本Linux同时在作 ADSL route gateway,可能会对测试造成小量影响。
JAVA CLIENT, 使用3线程
Key: 数字,1~100万
数据:100字节字符串
3. 测试结果
Memcached 写速度 平均速度: 16222 次/秒 最大速度 18799 次/秒
Memcached 读速度 平均速度: 20971 次/秒 最大速度 22497 次/秒
Memcachedb 写速度 平均速度: 8958 次/秒 最大速度 10480 次/秒
Memcachedb 读速度 平均速度: 6871 次/秒 最大速度 12542 次/秒
由于硬件环境,网络环境,线程数,编程语言不同,可能测试结果差别也很大,本测试结果只起相对参考作用。即比较memcached/memcachedb在相同环境下的性能区别。

原文地址:https://www.cnblogs.com/onlytiancai/p/1430134.html