坏人

heycache2缓存,不做存储引擎,只是胶水。

设计思想:

 

 * 本质上,这就是一个用于粘合各种缓存引擎的东西,并增加了一些小巧的高级特征,自己不做任何实现,
 * 仅仅对目前的各种缓存结构进行包装处理,并在保证兼容性的情况下尽可能实现一些实用的特性
 *
 * 确定性特征:缓存引用机制、分布的过期通知机制
 *
 * 不确定特征:远程依赖、多级缓冲机制、
 *
 * 已完成特征:基础功能、引用机制、分布过期通知、
 *
 * 未完成特征:多级缓冲机制、不依赖任何缓存引擎的有效性检查
 *
 * -- 特征介绍 --
 *
 * 分布过期通知:很大部分缓存的数据,读的比例远远大于写,也就是所谓的高命中率,这样一来,我们希望将这些数据,直接缓冲在各个本地节点的进程内,降低
 * 读取时候的通信成本,提高响应速度,而在写的时候,由各个本地节点发送一个通知到中央通知服务器,再从这里分发到各个节点去,使之失效,从而导致缓存的
 * 重加载,实现各个节点的缓存版本同步。
 *
 * 多级缓存:一个新设想,当一个key的数据被set到缓存的时候,并不实际缓存,仅仅找个地方存下这个key以及他的set和get次数,第2次再SET的到文件缓存中,
 *           第3次的时候SET到内存或者远程的如memcached当中,这样可以有效的提高缓存命中率,解决因为搜索引擎进行全站扫描等引起的低命中率问题。
 *
 * 不依赖任何缓存引擎的有效性检查:针对文件缓存等,可以将缓存包装后存储,读取后解包,校验过期等有效性,最后逻辑判定是否有效,是删除还是返回。
 *
 * 引用机制:有的缓存,内容是一样的,但需要多个key,主要目标是解决这个问题。
 *
 * 远程依赖:有了分布通知的话,这个功能多少有点鸡肋,当初的目的是在本地建立一个TABLE存储缓存的KEY和依赖条件,当条件触发后,会通知远程服务器,
 *           并可能进一步通知各节点,缓存失效了。
 *

 

大致就是这样,代码开源,BSD,http://code.google.com/p/heycacher2/

 

现在还是一个基础版本,会不断的完善实现,但已经过基本的压力测试了,有兴趣的朋友可以一起来参与,众人拾柴火焰高。

posted on 2008-07-30 22:06 坏人 阅读(1178) 评论(14)  编辑 收藏 网摘

评论

#1楼  2008-07-30 22:40 Jeffrey Zhao      

嗯嗯,cool,支持,和我以前想做的一个东西有点像,支持你。   回复  引用  查看    

#2楼  2008-07-30 23:26 Angel Lucifer      

既然是胶水,俺想知道都粘合了哪几个存储引擎呢?   回复  引用  查看    

#3楼  2008-07-30 23:27 Angel Lucifer      

这个项目做好了,意义还是很重大的说,呵呵。   回复  引用  查看    

#4楼  2008-07-30 23:28 Angel Lucifer      

俺会保持关注。
希望楼主可以及时更新内容和讲述进度。   回复  引用  查看    

#5楼 [楼主] 2008-07-30 23:40 坏人      

内存部分用企业库,TCP部分用memcached,等ms那个v什么出来,文件部分我项目组里一哥们实现,数据库还没定,其实架子搭好了,粘存储引擎进来,很简单。   回复  引用  查看    

#6楼 [楼主] 2008-07-30 23:41 坏人      

老赵同学以前也想做这个?!恩,我也打算了好久了,一直没提得其精神做,最近项目要用,才倒腾了两天。。。   回复  引用  查看    

#7楼 [楼主] 2008-07-30 23:47 坏人      

接下来要实现的主要是过期通知的挂接,其实我记得都做了,和企业库的做法是做了个事件桥,memcached无此功能。。。之后就是自动分级缓存的实现,整理下思路再做,顺便代码比较乱,也需要整理,还有其他事。。。呵呵,会尽快完善的。目前主要特征在于分布通知,WCF确实好啊,异步通信一行代码不写就O了,傻瓜化了都,不过大家不用担心走WCF的效率问题,毕竟写的比率很小,相对使用memcached之类的方式,每次读逗走TCP和反序列化,开销不是一个数量级的,而且由于仅仅是通知,不设计到缓存数据本身,完全可以吧通知发了就撒手不管了,如果需要确保可靠性,可以单独搞个池来保障,这样可以确保极快的响应时间。   回复  引用  查看    

#8楼  2008-07-30 23:57 venjiang      

特地跑来支持下!   回复  引用  查看    

#9楼 [楼主] 2008-07-31 00:04 坏人      

v大爷,不容易啊,您老人家来了,哈哈   回复  引用  查看    

#10楼  2008-07-31 00:31 Jeffrey Zhao      

--引用--------------------------------------------------
坏人: 内存部分用企业库,TCP部分用memcached,等ms那个v什么出来,文件部分我项目组里一哥们实现,数据库还没定,其实架子搭好了,粘存储引擎进来,很简单。
--------------------------------------------------------
Cache其实就是几个基本操作——最简单的实现个CacheProvider应该还是不错的。   回复  引用  查看    

#11楼 [楼主] 2008-07-31 00:34 坏人      

恩,其实存储部分已经又很多实现了,provider是很基本的,不然每次换缓存引擎也老麻烦,一个还是节点同步的事,不太喜欢TCP的缓存,每次读还得反序列化,响应性能大受影响,再就是自动的命中率管理,这几个我觉得比较实在。   回复  引用  查看    

#12楼  2008-09-13 11:07 NeverLand [未注册用户]

确实比较担心 memcache 中复杂对象的反序列化性能问题,不过有点疑惑,WCF 中也有序列化和反序列化的问题吧?难道WCF序列化的性能要好一些?

希望楼主可以简单的解释一下~   回复  引用    

#13楼 [楼主] 2008-09-14 11:01 坏人      

@NeverLand
因为走的是过期通知,而非远程存取,所以不存在把缓存数据整个进行序列化的问题。   回复  引用  查看    

#14楼  2008-10-27 20:26 BFcat [未注册用户]

关注楼主的工作, 我也在思考这方面的东西。。。有机会一起学习。   回复  引用    


标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-30 22:08 编辑过
Google站内搜索

相关文章:

相关链接:


 
<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

与我联系

搜索

 

常用链接

留言簿(3)

我参与的团队

随笔分类

随笔档案

相册

朋友

最新评论

阅读排行榜

评论排行榜