是使用分布式缓存Ehcache或者NoSQL数据库呢?

Ehcache实际是一个Java的开源缓存产品,用来提升性能,降低负载,方便可伸缩性。后面有秦始皇Terracotta兵马俑式的服务器矩阵支持, Ehcache成为一种线性可扩展的分布式缓存。它是一个无关系结构schema-less, key-value, 基于Java的分布式缓存,它提供可靠的一致性控制,可根据主键key 值value或属性索引搜索。

Flexible Consistency可靠的一致性
从Ehcache 和 Terracotta整合性来看, 我们可以激活相关的数据跨集群共享,按照CAP理论来说, 由于避免单机硬编码权衡考虑,我们在一个个缓存中创建了一个丰富的一致性模型;同时为了易于理解,我们采取统一标准客户端一致性模型来描述和配置它。

我们可以实现一个比NoSQL解决方案更加丰富的一致性富模型(模型驱动框架开源jdonframework缺省采取echcahe的原因)。我们可以为每一个缓存提供跨集群的如下特性:

1.通过悲观锁支持强壮的一致性(缺省,一致性也就是事务性,数据事务安全性)
2.未加锁的弱一致性,用来先写后读,或只读,或者只写。
3.乐观锁 Compare and Swap (“CAS”),跨集群服务器的原子操作 。
4.XA分布式事务和本地事务机制transactions
5.一个显式的锁API,可以运行用户优化事务一致性带来的性能问题。

Ehcache架构非常不同于NoSQL(如memorycache ). 每个服务器内存中会驻留使用最频繁(LRU算法)的数据或对象。可以有4-6 GB heap 空间, 如果辅助以BigMemory, 能够扩展至上百 GBs(注意这是每台,如果考虑集群多台,几乎可以把数据库中数据都加载到内存中,相当于一个内存数据库). 这是一种Level 1 (“L1”) 缓存,完全基于内存in-process. 访问L1 速度一般少于1 μs.

整个缓存一般都驻扎Terracotta服务器阵列中. 这是一种Level 2 (“L2”) 缓存. 访问L2少于2 ms.

你从这个架构中得到的依赖于你使用经验,最普通一个情况是:the Pareto distribution, 80% 数据从 L1获得 , 20%时间从L2获得, 这样,普通延迟性一般是少于.401 ms. 通过比较,Yahoo! Cloud Serving Benchmark 基准测试表明 HBase 和 Cassandra延迟性是在 8 to 18 ms.

这使得Ehcache要快于NoSQL一个数量级别.

持久化
缓存能够被设置为持久化,能够提供永久保存和可重启性。一般使用一种写日志。缓存将能够恢复到一种一致性状态. 当ehcache被配置为一种分布式缓存时,Ehcache将使用Terracotta Server Array 作为二级缓存Level 2 cache. Terracotta servers通常是每个区配置两个,有HA. 另外,Terracotta 使用JMX tools实现备份,备份或恢复都能立即进行。 RDBMS关系数据库典型提供一个广泛归档索引 ETL等系列功能, 正因为这些理由,作者认为 Ehcache具有一些持久化小特性. 当然,这和许多NoSQL 产品类似。

大数据量Big Data
大数据量指成打T级别terabytes甚至达到 petabytes.

Ehcache目前 可以达到2 TB. 以后会不断提升(banq注:集群的问题还是一个群的问题,群的规模是有上限天花板的,这和破坏了数据关系的NoSQL分布式是无法比拟的)

ehcache对大数据量的限制主要还是受制于关系数据库RDBMSs.

如果使用BigMemory,Terracotta server可以加载到每台服务器内存中有250GB或更多. NoSQL 解决方案使用内存和磁盘混合,基于Java的Cassandra问题可能是垃圾回收, 受其限制只能有很小的heaps. BigMemory 是脱离heap使用额外内存,使用NIO的 DirectByteBuffer. 最终结果你可以用很小的服务部署付出得到同样的回报。

进入分布式缓存
如果Ehcahce不是NoSQL, 那它是什么? 答案是它是一个分布式缓存distributed cache. 象它的NoSQL表兄弟, 它经常用于传统数据库不能覆盖的领域,缓存一个web page或或者耗费CPU计算是经常碰到的情况.

关键问题是要更快地访问到这些计算好的结果,这时并不是需要持久化. 在Java中最快的访问架构就是in-process caching, 通过网络作为一种in-memory cache.

Gartner 和Forrester已经对分布式缓存Distributed Caching 和弹性缓存Elastic Caching有一个公开定义. Gartner: “分布式缓存Distributed caching平台让用户管理内存中非常大的in-memory data,以便使得关系数据库减轻负载、以及云计算和云事务处理、 以及更杰出性能的事务处理,或复杂的事件处理以及高性能计算”.
他们也将分布式缓存作为一个服务(“aPaaS”) 加入他们应用平台。

当然,我们可以在RDBMSs 和 NoSQL两者之前都使用分布式缓存(因为事务的需要)。

但是,同样缓存作为分布,而需要得到一些搜索之类企业特性时,和NoSQL自己区别就非常明显。

Use Cases场景用例
如果需要一个‘key-value plus search’key-value增强式的搜索,一旦数据量超过2 TB,那么NoSQL合适。

我们看看下面一些常用ehache缓存场景:

Hibernate Caching. JDBC caching. Web caching. Collection caching.使用echcache

快速的分析结果查询

信用卡等与钱有关......见原文


结论
NoSQL是瞄准替代RDBMS, 缓存是瞄准低延迟和速度,可以根据CAP理论来衡量。缓存主要和应用有关,可以帮助应用脱离任何存储技术,无论是RDBMS 和 NoSQL(这点比较认同,jdonframework将缓存作为领域模型的生存空间,后面可以接关系数据库或NoSQL).

原文网址被封,需要翻墙。监管带来信息闭塞以致落后在我们经常看外文资料的人来说来感受非常明显。

Ehcache: Distributed Cache or NoSQL Store? :: myNoSQL
[该贴被banq于2011-03-03 10:33修改过]

ehcache与memcached区别是在一致性,也就是事务性方面,memcached使用HASH算法实现负载平衡,但是集群的另外一个要素:失败恢复,也就是服务器当了,数据还在其他地方存在共享;memcached的一台服务器宕了,上面数据就丢失了,由于采取Hash环,损失有限。

但是也由于没有状态数据在服务器之间共享复制,memcached对于只读性能应该比集群的更好。

上面文章主要是在基于Java的比较。

我现在使用cache,只是用Repository封装后,作为单系统内存接口来使用。分布技术,有待学习呢,真是路漫漫啊。自从认识web的cache之后,就知道了一个web架构,就相当于一个游戏引擎——缓存管理是其一个核心部分。