精华帖 (5) :: 良好帖 (9) :: 新手帖 (0) :: 隐藏帖 (13)
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-07
最后修改:2011-12-11
Xixibase 主要特点:1. 实现'Local Cache'功能, 当客户端打开'Local Cache'选项, 客户端可以将数据同时存储在Server 端和本地,并且保证本地数据和Server 端的数据的一致性。当Server 端的数据被更新、删除或者过期,本地的数据会立即被删除,下次再对该数据的访问,请求会直接到达Server 。 'Local Cache'的优点: a. 极大地提高了性能:特别是对那些读操作远远大于写操作的数据,可以提供1000万以上的TPS.参考:http://xixibase.googlecode.com/svn/tags/xixibase-0.2/benchmark/java/benchmark2.html b. 提高了应用的服务质量和用户体验:在'Local Cache'命中的情况下,请求不需要通过网络到远程Cache Server上查询,减少了总体的处理的时间,提高用户体验。 c. 降低了Cache Server 的压力,原先需要10台Cache Server ,现在可能只要5台就够了。可降低成本,保护环境。 d. 降低网络流量,减少网络设备的成本。 e. 提高整个Cache 系统的总体吞吐量。综合a, c, d三点,系统的总体吞吐量会得到极大的提升。 2. 支持虚拟化, 采用分Group的方法,不同的应用可以使用不同的GroupID,这样当不同的应用在访问同一个Cache Server时,不会相互干扰。 a. GroupID类似与命名空间,每个应用不需要考虑:某个Key 是否会和其它应用的Key 冲突。 b. 当某个应用要清空自己相关的Cache,不需要一个Key 一个Key 的去Delete ,可以直接调用Flush ,不用担心Flush 会影响其它应用的数据。 c. 可以对每个Group 单独统计读写、存储的信息。 3. 支持'MultiAPI', 如multiGet, multeUpdate, multiDelete。测试表明'MultiAPI'在提升性能方面,非常明显。参考:http://xixibase.googlecode.com/svn/tags/xixibase-0.2/benchmark/java/benchmark.html 4. 超高性能. 无论'Local Cache'还是'MultiAPI'都在不同方面,极大地提升了性能。 5. 跨平台, Xixibase server由C++实现,底层网络库采用的是Boost Asio。理论上,只要Boost Asio支持的平台,Xixibase server都可以支持。目前,已经测试了Linux, Windows, Mac。 6. 支持HTTP协议,可以直接在浏览器上访问Xixibase Server。我们可以使用JavaScript 非常方便地访问Xixibase Server。再加上Xixibase 的Local Cache 功能,将极大地减少Server 的压力,提升用户的体验。 性能: 读写TPS :150,000以上 启动Local Cache高命中情况下,读TPS:10,000,000以上。 MultiAPI, TPS: 不同条件下,差异较大,详情参考一下链接: Performance Benchmark: http://xixibase.googlecode.com/svn/tags/xixibase-0.2/benchmark/java/benchmark2.html 和Memcached的几个Client 比较: http://xixibase.googlecode.com/svn/tags/xixibase-0.2/benchmark/java/benchmark.html 项目: http://code.google.com/p/xixibase/ 包含:Xixibase Server 和Xixibase Java Client 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-11-07
几个问题:
1. 我很想听听使用了local cache后如何保证本地数据和Server 端的数据的一致性? 是最终一致性还是强一致性这个得明确? 2. local cache是嵌入式产品?还是本地应用? 3. 看你的performance有拿memcached的客户端做比较,是不是意味着兼容memcached的协议? 4. 你这个100倍跟人家memcached比,完全不是在同一条水平线上啊,不地道。第一眼感觉噱头会比较大 5. 代码感觉不规范,测试代码和正式代码混杂在一起,build工具推荐用下maven吧,现在用ant的比较少了 |
|
返回顶楼 | |
发表时间:2011-11-08
agapple 写道 几个问题:
1. 我很想听听使用了local cache后如何保证本地数据和Server 端的数据的一致性? 是最终一致性还是强一致性这个得明确? 2. local cache是嵌入式产品?还是本地应用? 3. 看你的performance有拿memcached的客户端做比较,是不是意味着兼容memcached的协议? 4. 你这个100倍跟人家memcached比,完全不是在同一条水平线上啊,不地道。第一眼感觉噱头会比较大 5. 代码感觉不规范,测试代码和正式代码混杂在一起,build工具推荐用下maven吧,现在用ant的比较少了 1. local cache是保存客户端本地内存map中。举个例子,比如get操作,我们可以使用local cahce系列的getLW。 getLW的‘L’即local cahce,意味着:先会在客户端本地map中查找,如果找到了则直接返回。 getLW的‘W’即watch,意味着:如果本地map找不到该对象,则到远程的cache server查找。找到的话,会把客户端的watchID注册到这个对象上,并把该对象存储在本地的map中。当远程cache server中某一个对象被修改或过期,cache server会通知watchID对应的client删除本地map中的对象。这个时间非常快,局域网内小于1毫秒。 2. 参考1,local cache是客户端本地内存中的cache. 3. 不兼容memcached的协议。 4. 性能和具体应用很有关系,一般情况总是会有热点数据存在,即少部分的数据访问的非常频繁,这样的数据就非常适合存在local cache中。在local cache高命中的情况下100的性能,并不是空话。 5. 测试代码和正式代码在不同目录里啊^_^maven可以考虑。 |
|
返回顶楼 | |
发表时间:2011-11-08
local cache的实现有点类似于zookeeper的watcher,即使1ms的延迟,对于一些并发高或者读写分离的应用来说可能也会是一个致命的问题。
LZ可以考虑一下支持paxos一致性算法,让客户自己选用。强一致性选择有成本,选用需谨慎,呵呵 不过LZ的方案不失为一个cache的好方案,像以前使用kv/cache缺少一个主动推送的功能,所以经常自己做一层内存cache,设置过期时间,两者不一致性问题比较麻烦 |
|
返回顶楼 | |
发表时间:2011-11-08
期望应用案例并借鉴
|
|
返回顶楼 | |
发表时间:2011-11-08
期待Memcached高手过来切磋。。。。。围观心得。。。
|
|
返回顶楼 | |
发表时间:2011-11-08
能听出屁味来。。。
|
|
返回顶楼 | |
发表时间:2011-11-08
这个相当于CPU的一级缓存和二级缓存吧,速度提升取决于命中率
|
|
返回顶楼 | |
发表时间:2011-11-08
现在难道都在一味比快么?
|
|
返回顶楼 | |
发表时间:2011-11-08
这个local cache想法不错,但是有大小限制么?难不成要跟我的应用抢内存?
如果设置太小,基本不命中,太大,用不起。 |
|
返回顶楼 | |