`

Memcached和terracotta

阅读更多

 

缓存是最重要的一个方面,以提高应用程序性能的存储对象的缓存 (内存)减少数据库负载。

缓存在群集环境中,需要分布式缓存 解决方案,可以支持故障切换情景和数据的可靠性。 在这个后我想探索的能力, Memcached和terracotta兵马俑的分布式缓存 解决方案。

Memcached是一个高性能的分布式对象缓存 系统, 客户端的API为的Perl , PHP中,巨蟒, Ruby和Java语言。 以下是一些其能力和局限性(使用Java客户端API ) :

要求对象是可序列化
对象标识是不保留
支持高速缓存 到期
不处理故障情景
对于一个特定对象选择一个服务器从池缓存 服务器基于Hash的关键
容易配置(通过SockIOPool级)

terracotta秦始皇是一个开源基于Java的JVM集群解决方案。 分布式缓存 可以实现使用兵马俑terracotta使用java.util.HashMap或开放源码的缓存 解决方案,如EHCache , OSCache和JBoss TreeCache 。

保护对象的身份
通过有效地管理虚拟内存堆
声明要求锁定支持
简单的配置文件与Eclipse工具支持
良好的文件,支持和积极发展
由于性质及其执行某些类别不是便携式,因此无法使用
很难确定第三方班便携式
不需要类是可序列化
容易配置并开始!


有 一个老外网友使用terracotta后,发现CPU是相当高负荷下和GC时间以来被杀的应用响应时间是关键的Web应用程序。于是认为使用 Memcached好,而兵马俑公司首席技术官阿里Zilka 认为:Memcached是因为使用非Java编写,所以没有GC,但他认为Memcached存在下面问题:
1 。 memcache分区是非常静态的(除非你改变它,或自定义) 。 这可能是一个大问题,因为您的网站成长 、
2 。 memcache分区会丢失数据。 如果您重新启动memcache服务器,数据丢失 。

有人说:如果你想使用mamcache有一个以上的服务器,你是到一些重型编码和算法思想。 有些人已经做了一些,但就我可以告诉不是类型的精度要求或映射。


http://translate.google.cn/translate?prev=hp&hl=zh-CN&js=n&u=http://hankliblog.blogspot.com/2008/01/bye-bye-terracotta-other-java-caches.html&sl=en&tl=zh-CN&history_state0=

 

memcached是一个非常简单的解决方案,分布式数据缓存 。它提供了一个地图一样的API ,而不是基于Java (尽管它有一个的Java API ) 。 因此,它会永远需要您的Java代码能够与一个单独的进程( memcached守护程序) 。

GigaSpaces和兵马俑都是纯Java的解决方案,提供的,远远不止缓存 ,虽然采取了不同的办法了。

Terracotta 是在JVM级别集群 你的应用,可以只花一点点代码变化就能将应用运行在多个JVM上。这样你能得到分布式缓存 (Terracotta guys call it Network Attached Memory) 和分布式进程. 这种方式很干净。

GigaSpaces产品为您提供全面的运行平台,实施高度可扩展的分布式应用。这样的做法是制定您的应用程序上的一个可扩展的平台从第1天,而不是集群 它特设更多的可扩展性。
该产品集成了非常丰富的分布式缓存 执行,信息功能和独特的SLA驱动,自我愈合的部署平台,让您的企业应用都需要加以电网启用。
http://www.gigaspaces.com/os_downloads.html.

有人做过测试,如果目标是20K tps, TC兵马俑之需要32 服务器而竞争对手的缓存 需要160台服务器. (This is my recollection, at least)
http://forum.springsource.org/showpost.php?s=4473cedb3ff6bb0ac39b624b04ac5922&p=168447&postcount=10

 

Voldemort is a distributed key-value storage system,开源的。

已 经在著名网站LinkedIn中使用,他们几位工程师写的构建 TB 级的 key-value 系统的经验:Building a terabyte-scale data cycle at LinkedIn with Hadoop and Project Voldemort:
http://project-voldemort.com/blog/2009/06/building-a-1-tb-data-cycle-at-linkedin-with-hadoop-and-project-voldemort/

Voldemort开源:
http://project-voldemort.com/

 

使用terracott作为Hibernate二级缓存 后的测试结果,非常让人惊喜。

http://tech.puredanger.com/2009/07/22/terracotta-hibernate-cache-tooling/

 

 

Memcached属于一种集中式的分布式结构,当某一台服务器宕掉以后,宕掉的这台服务器缓存 内容就丢失。Terractto不知道是怎么做的?缓存内容在多个JVM中重复保存?还是配对复制,还是其它的?

 

terracotta采取的是内存矩阵,通过对JVM的Heap进行复制实现共享,可以认为是一种分布式JVM,不存在单点风险,是真正的集群 式的分布式缓存 ,常用于云计算 之中。

唯一所谓缺点就是用Java编制,但这也不是缺点,你做一个Java接口就可以,因为memcached面向应用也是一个接口。

昨天一篇文章:FACEBOOK'S MEMCACHED MULTIGET HOLE: MORE MACHINES != MORE CAPACITY
提出:Facebook在2008年已经有超过800台memcached服务器,他们已经发现了memcached存在的一些问题,他们称为Multiget Hole。

出乎意料之外的是,增加memcached服务器并不能增加处理容量。这就象在一个洞里,通过简单增加服务器并不能把你挖出来。

解决multiget hole一个方式就是复制,因为本质是缺少CPU处理能力,需要更多CPU来处理,创造两组服务器,每组有两个memcached,前面再加一个负载平衡器,每个服务器只能得到一半的请求,这样就只做一半工作。

 

CTO Ari Zilka Says Terracotta is Fast

Ari Zilka, the CTO of Terracotta, 自己宣布在和市场上 Memcache, JBoss cache, 和来自大型公司比如 Oracle 和 IBM比较和,Terracotta的性能是最好的。他说:比他们每一个都提高3到10倍速度,如果使用3.2版本则大概比当前Terracotta要快 4倍。

这个测试是基于Spring PetClinic 应用做出的,但是好像没有看到准确测试报告,Java领域最好单机缓存 EHCache被Terracotta收购后,将于1.7版本推出整合了Terracotta的分布式缓存

 

象Memcached和terracotta这种大型的缓存 服务器 我们在开发程序的时候对缓存 的更新的策略应该是怎么样的啊



采取CQRS命令和查询分离策略 ,Memcached和terracotta在读query架构中,当有命令command进来改变模型状态时,发出事件通过事件总线更新读架构中缓存

如果你无法进行清晰的读写分离,直接使用Key-value存储,因为象Tokyo Cabinet 和Tyrant 这些产品,内部已经考虑了如何进行分布式环境一致性更新的问题,不用应用者考虑,很方便。

 

缓存 服务器里是不是主要存着聚合根,而我们查询的时候就根据Id去找那个聚合根



是的,保存的是聚合根,根据ID找那个聚合根实体对象即可。

因 为是聚合根,必然聚合了很多其他子对象,不能将整个聚合对象群都在分布式服务器之间拷贝,这和关系数据库带有关系数据复制就类似了,效率 差,terracotta的更新策略就比较智能,而memcache则没有提供智能更新策略,它的使用策略是,将数据库数据都装进来,反正没有资源限制。

 

Memcached使用上主要考虑如下问题:
1、脏数据更新,几乎所有应用了缓存 的场合都需要考虑这个问题
2、down掉一台机后,命中率问题

1的话各有各的解决办法,2尽量采用圆周算法

 

最近总结:
比较这两个缓存 ,还是要从CAP定律 角度来考虑。

MC就只是一个缓存 ,可以把MC和Java中的Ehcache比较,MC之间没有数据复制替换,对付负载平衡的方式就是用HASH圆圈,减少影响面,粗一看,似乎很粗糙,但是有大道至朴的因素在里面,这样我们可以基于CAP定律来自己设计适合我们应用的缓存 架构。比如你可以实现BASE架构。降低一致性要求,提高性能可用性。

而兵马俑设计则比MC要进一步,它是由兵马俑自己来实现CAP定律,比如实现状态在所有机器中复制,一致性很好,低延迟,这个方向其实是数据库或内存数据库的方向,但是如果你需要复制的状态数据很多,可用性就不是很好。这是一种非透明化的方案。

这两个方案可以综合使用在CQRD架构 中,使用MC或Ehcache来实现分布式查询;而使用兵马俑来实现状态分布式,但是机器不宜多。

最新消息,Terracotta和Eucalyptus整合,提供基于兵马俑的应用程序可以无缝运行在云环境中:
Terracotta and Eucalyptus Integration Provides Data Management and Elastic Provisioning in the Cloud


最新消息:Ehcache和MemCache性能比较测试 :memcache在存取数据上慢于ehcache一点,而查询获取上快了那么一点点。无论如何Memcache是C语言,而Ehcache是Java。

Memcache and SpyMemcache Client

10000 sets: 3396ms

10000 gets: 3551ms

10000 getMulti: 2132ms

10000 deletes: 2065ms

Ehcache 0.9 with Ehcache 2.0.0

10000 puts: 2961ms

10000 gets: 3841ms

10000 deletes: 2685ms

 

 

 

 


分享到:
评论

相关推荐

    一种基于文件预测的分布式缓存模型.pdf

    分布式缓存系统如Oracle Coherence、Memcached和Terracotta等,已在资源供给、数据管理、安全性和自适应性等方面取得了显著进展。然而,这些系统在处理热点数据分布不均衡和数据迁移策略等方面仍有待改进。例如,...

    memcached完全剖析ehcache memcached redis 缓存技术总结

    Ehcache提供磁盘持久化和 Terracotta 分布式缓存解决方案,使得缓存可以在服务器集群之间共享。 3. **Redis** - 是一个开源的、支持网络的、高性能的键值对数据存储系统,也常被用作数据库、缓存和消息代理。Redis...

    http://www.terracotta.org/

    结合标题和描述,我们可以猜测这个压缩包可能包含了与Memcached相关的源代码、配置示例、或者是与Terracotta产品(例如Ehcache)集成的工具或文档。 基于这些信息,我们可以讨论以下知识点: 1. **分布式数据存储*...

    ehcache和memcache性能比较

    本文将详细探讨两种广泛使用的缓存解决方案——Ehcache和Memcached,它们都是为了减少对数据库的直接访问,从而提升系统的响应速度。我们将从性能、特性、适用场景等方面进行比较。 首先,Ehcache是一款基于Java的...

    分布式session方案

    多个 Memcached 之间信息是同步的,能主从备份和高可用。 ② 非粘性 Session 处理方式原理:Memcached 做主从复制,写入 Session 都往从 Memcached 服务上写,读取都从主 Memcached 读取,Tomcat 本身不存储 Session...

    集群中几种session同步解决方案的比较

    在分布式系统和集群环境中,session管理是一项关键技术,它确保了用户在不同服务器之间的交互能够保持一致性。本文将深入探讨六种常用的session共享方法,包括它们的工作原理、优缺点以及适用场景。 #### 1. 客户端...

    EHCACHE简介

    EhCache最初由Terracotta公司开发,现在是Hibernate项目的一部分,支持广泛的缓存场景,包括本地缓存、分布式缓存和内存数据网格。 **一、EhCache的核心概念** 1. **缓存**:缓存是存储临时数据的区域,以加快数据...

    缓存页面ehcache

    Ehcache支持内存和磁盘存储,具有二级缓存机制,并且可以与其他缓存系统集成,如Redis或Memcached。其核心特性包括: 1. **内存管理**:Ehcache可以配置不同的缓存区域,每个区域有不同的大小限制,确保内存使用...

    JAVA缓存概念体系及应用

    该压缩包中有一个WORD和一个PPT,WORD中介绍了通过单实例和简单LRU算法实现缓存。PPT中介绍了缓存体系,JVM内存模型,JCONSOLE监控工具的使用,Oscache缓存架构 Ehcache缓存架构 Memcached缓存架构 JiveCache缓存架构...

    ehcache 缓存技术

    2. **缓存层次:**EHCache有三个主要的缓存层次,分别是`MemoryStore`(内存缓存)、`DiskStore`(磁盘缓存)和`Terracotta Distributed Cache`(分布式缓存)。 3. **元素(Element):**缓存中的最小单位,包含一...

    简单介绍Ehcache的优缺点

    4. **分布式缓存支持**:通过集成Terracotta或Hazelcast等分布式缓存解决方案,Ehcache能够实现跨服务器的数据共享,这对于构建高可用、可扩展的系统架构至关重要。 5. **易于集成与使用**:Ehcache的API简洁明了,...

    分布式服务集群下实现session共享解决方案.docx

    6. Memcached:使用内存缓存系统存储session,性能优于数据库,但数据序列化影响效率,且服务器故障会导致session丢失。 7. Redis:内存数据库,适用于session存储,配置简单,性能高,不易丢失数据,是目前广泛...

Global site tag (gtag.js) - Google Analytics