缓存: Memcached和terracotta

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

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

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

要求对象是可序列化

对象标识是不保留

支持高速缓存到期

不处理故障情景

对于一个特定对象选择一个服务器从池缓存服务器基于Hash的关键

容易配置(通过SockIOPool级)

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

保护对象的身份

通过有效地管理虚拟内存堆

声明要求锁定支持

简单的配置文件与Eclipse工具支持

良好的文件,支持和积极发展

不需要类是可序列化

容易配置并开始!

有一个老外网友使用terracotta后(见下面连接),发现CPU高负荷和GC时间暂停导致的应用响应时间延迟是其关键问题。而是要Memcached后,虽然 get/set有些慢(远程),但是相对数据库操作,memcached和ehcache差别可以忽略。

最后,他提出:可以使用ehcache作为本地in-process缓存,而memcached作为远程缓存。(对象状态第一次访问memcached获取后,缓存在本地ehcache中,以后就无需访问远程memcached,这样方案比较优化)。

兵马俑公司首席技术官阿里Zilka 认为:Memcached是因为使用非Java编写,所以没有GC,但他认为Memcached存在下面问题:

1. memcache分区是非常静态的(除非你改变它,或自定义) 。 这可能是一个大问题,因为您的网站成长 、

2. memcache分区会丢失数据。 如果您重新启动memcache服务器,数据丢失 。

http://hankliblog.blogspot.com/2008/01/bye-bye-terracotta-other-java-caches.html

当然,terracotta或ehcache可以通过JVM参数微调来实现响应时间延迟和高吞吐量的平衡。见twitter的JVM性能优化

关于ehcache vs. memcached的2011年9月一文的最新讨论,主要是从memcached分布式缓存与ehcache代表数据网格之间区别方面讨论:

http://www.infoq.com/news/2011/09/java-memcached-rise

[该贴被admin于2011-11-25 07:52修改过]

              

4
banq
2009-06-02 18:01
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

banq
2009-06-19 14:19
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/

banq
2009-07-24 09:35
使用terracott作为Hibernate二级缓存后的测试结果,非常让人惊喜。

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

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

猜你喜欢
4Go 1 2 3 4 下一页