`
gaoyuntao2005
  • 浏览: 312387 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

缓存的目的就是为了提高响应速度,尤其是并发访问的速度,降低数据库服务器的压力,在同等硬件配置的情况下,提供更高的系统性能。

总的来说,请指导原则就是:尽量用低开销的计算代替高开销的计算。比如直接从数据库查询的开销要远高于内存中的计算返回,网络请求要远高于本地(同一VM中)请求。

如果单从这一点上来分析的话,现在很多关于Ehcache(local)与memcached(client/server)性能PK的讨论是可以比较简单的得出一个结论的。

(老实说,我对memcached的了解只是一知半解。不过国内比较知名的阿里巴巴的系统就是用的memcached,AliSoft有个哥们也在这方面有比较深的研究。详细请参见:http://blog.csdn.net/cenwenchu79)
 

下面图是国外一个哥们做的对比,按照Greg的测试,Ehcache的性能不memcached真的高很多,不过其试验的详细过程并没有资料,所以公证性也受到很多人的怀疑。

ehcache对比memcached

因为在Liferay框架中使用了Ehcache, 对这个缓存框架,我倒是做了一些research, 下面简单的罗列一下Ehcache在分布式缓存方面的知识点。

 

Ehcache的分布式缓存

——在分布式情况下,一个节点的缓存发生变动,需要通过广播通知其他节点。Ehcache有两种通知策略:copy和invalidate。一个是没有就拷贝过来,比较自然;另外一个是如果没有,那就反过来连自己也取消,这样就必须重新到数据库中查询,网络负载低。

——发现机制。也就是发现其他节点的机制,有两种,一种是利用RFC1112进行广播,好处是可以动态增减节点,另外一种是维护一个静态列表(IP)。

——传递机制。(Delivery Mechanism) 支持JMS, RMI, TCP, UDP, 广播,JXTA, JGroups。 缺省是RMI。

——复制的缺陷和Ehcache的解决办法

☆ 碎嘴的通讯协议(Chatty Protocal)

因为是一个网状拓扑,一个节点的每个变化需要通知其他N-1个其他节点,造成网络较大的负载。
可以通过批量异步操作来降低负载。加快对客户端的响应。
 

☆ 冗余的通知
发起通知的不应该收到并处理通知。(因为是广播,所以会收到)
可以通过为每个Cache创建一个GUID来标明身份,这样如果发起的Cache GUID与自身相同,则不用处理。
 

☆ 潜在的数据不一致
这是一个比较大的问题。只要是分布式存储,就一定会遇到这个问题。造成这个问题的原因有很多,比如对同一Cache的同一数据进行并行更新等;
解决的办法是通过:同步传递。客户端请求先处于挂起状态,在同步传递并在所有缓存中数据都同步之后再返回。
 

☆ 使缓存数据失效以实现更新(Update via Invalidate)
默认的方式是一个缓存的数据被更新之后,就将新数据复制给其他所有缓存。
另外的方式是,如果缓存数据被更新,则清除所有节点缓存中对应的数据,重新到数据库中查询。并重新加载到所有的节点缓存中。(Liferay就是采用了这种方式)
另外的一种保证数据一致的方式就是:设置TTL值(time to live), 到期之后重新从数据库中更新;

 

自己的一些设想

在研究关于分布式缓存的时候,我不由得想起来分布式数据库存储来。这两者有很多相似的地方,最核心的问题就是保持数据的一致性问题。

当前,在数据的分布式存储方面的解决方案已经有很多,很多产品、技术都很成熟,是否有一些东西可以借鉴在这里呢?比如说,内存数据库,数据库锁,消息中间件等等。

巧的是,上面那个做对比的哥们Greg就这个问题有不同的看法。

 

My point is that caches are not meant to have full database-like semantics. It is usually acceptable for the data to be dirty or stale to some extent. That extent depends on the app.

 

确实,确保每个缓存中的数据完全的一致是不可能的,总会存在这样那样的问题,即使像memcached,也因为没有commit机制,可能出现一个node上先放入cache,而最后transaction回滚,但其他的cache node已经为其他用户提供了这个数据。

所以,分布式缓存还只能是具体问题具体分析了。

另外,简单地总结一下memcached的features如下:

1、请求由client端进行处理,client端维护着一个memcached服务器列表,根据用户的请求将响应指向不同的memcached服务器;(也就是说,每个缓冲值,在所有服务器中只保持着一份copy,不像ehcache每个服务器中都有)

2、memcached对CPU的要求不高,但对内存要求较高,因此可以与webapp server安装在一起,互补(web app server是CPU要求高,内存要求低)

3、可以动态地,甚至无限地增加memcached服务器的数量;

分享到:
评论

相关推荐

    hadoop 分布式缓存源码

    1. **配置参数**:在`conf.Configuration`类中,可以找到关于分布式缓存的配置选项,如`mapreduce.job.cache.files`和`mapreduce.job.cache.local.files`等,用于指定要缓存的文件和JARs。 2. **JobTracker/...

    分布式缓存服务器memcacaed的源代码

    分布式缓存服务器Memcached是互联网应用中广泛使用的内存对象缓存系统,用于减轻数据库的负载,提高应用程序的性能。Memcached的设计目标是简单且高效,它通过在内存中存储数据来提供快速的数据访问。让我们深入了解...

    分布式缓存实现(附源码)

    分布式缓存是现代大型互联网应用中不可或缺的一部分,它能够有效地解决单机缓存容量有限以及高并发场景下的数据访问性能问题。本项目基于C#语言实现了分布式缓存系统,提供了详细的类库使用说明,旨在帮助开发者更好...

    使用Go语言实现的分布式缓存

    `shopee.md`可能是一个关于Shopee(一家电子商务公司)的案例研究,解释了如何在实际生产环境中使用此分布式缓存。 最后,`README.md`文件包含了项目的介绍、安装指南、使用示例和贡献说明,是理解项目用途和结构的...

    分布式缓存的通用方法—《可伸缩服务架构》1

    本文将围绕《可伸缩服务架构:框架与中间件》一书中关于分布式缓存的通用方法进行深入探讨。 首先,分布式缓存的编程方法主要有三种:编程法、Spring注入法和注解法。编程法是最基础的方式,通过直接调用缓存服务的...

    19_先平易近人的随口问你一句分布式缓存的第一个问题.zip

    "PPT.pptx"可能包含了关于分布式缓存设计模式和最佳实践的讲解,例如CAP理论(一致性、可用性和分区容错性)、Redis的数据持久化策略(RDB和AOF)以及主从复制、Sentinel哨兵系统和Cluster集群的使用。 总的来说,...

    分布式缓存系统数据迁移关键技术探究.pdf

    最后,本文提到的参考文献包括《深入分布式缓存从原理到实践》、维基百科中关于云计算的解释、以及相关作者的其他作品,这些资料为本文提供了理论和实践的基础。 综上所述,分布式缓存系统数据迁移的关键技术研究与...

    Memcached分布式缓存

    ### Memcached分布式缓存 #### 一、Memcached的基础 **1.1 Memcached是什么?** Memcached是一款高性能、分布式内存对象缓存系统,旨在通过减轻数据库负担来加速动态网络应用的速度。它通过在内存中缓存数据和...

    Ehcache分布式缓存入门案例demo_文件转树结构_

    Ehcache是一个高性能、轻量级的Java分布式缓存库,它被广泛应用于提升应用程序的性能,通过存储经常访问的数据来减少对数据库的依赖,从而加快系统的响应速度。本入门案例将带你了解如何使用Ehcache实现分布式缓存,...

    分布式缓存Memcached实例

    分布式缓存Memcached实例详解 Memcached是一款由Danga Interactive公司设计并开发的高效、分布式内存对象缓存系统。它的主要目标是减轻数据库的负担,提高动态应用程序的响应速度,通过将数据存储在内存中,使得...

    20120102 net下memcached 分布式缓存系统应用

    "20120102 net下memcached 分布式缓存系统应用" 这个标题表明这是一个关于在.NET环境中使用Memcached作为分布式缓存系统的实践教程或参考资料。时间戳“20120102”可能指的是资料的创建日期,暗示了这是较早时期的...

    分布式缓存 Redis + Memcached 经典面试题!.pdf

    【分布式缓存Redis + Memcached】是现代互联网应用中常用的技术组合,用于高效地存储和检索数据,以提高系统的响应速度和并发处理能力。这里我们将深入探讨这两个分布式缓存系统的特点,以及它们在面试中经常遇到的...

    分布式缓存Redis使用方法[定义].pdf

    分布式缓存Redis是一种高效的数据存储和访问解决方案,尤其适合处理大量数据并提供高速读写访问。Redis由张小博这样的技术专家所推崇,通常应用于软件开发领域,特别是需要分布式系统支持和数据一致性保证的场景。 ...

    分布式缓存 Redis + Memcached 经典面试题!.zip

    以上就是关于 Redis 和 Memcached 的一些经典面试问题及其解析,了解这些知识点有助于理解分布式缓存的工作原理和优化策略。在实际开发中,结合具体业务场景选择合适的缓存系统,并进行有效的优化,可以显著提升系统...

    Redis Essentials - Maxwell

    读者可以期望从这本书中了解到关于分布式缓存的原理、优势、应用场景,以及如何在分布式架构中整合和使用Redis。 部分内容提到的***可能是这本书的电子版或资源下载链接,但是由于OCR扫描技术的原因,部分内容可能...

    21-08-17_Nop_4.40.3(015_Redis分布式缓存数据库的配置实现).rar

    标题中的“21-08-17_Nop_4.40.3(015_Redis分布式缓存数据库的配置实现)”指的是一个关于nopCommerce 4.40.3版本的教程或示例,其中特别关注的是如何配置Redis作为分布式缓存数据库。这个主题涉及到电子商务平台开发...

    ehcache文档(英文版)

    - **关于分布式缓存**:深入探讨了分布式缓存的架构、逻辑视图、网络视图及内存层次结构,揭示了其在大规模分布式系统中的高效运作机制。 #### 性能提升与故障排查 文档中还详细介绍了如何通过调整配置参数来优化...

    关于分布式技术在专利审查领域应用的思考.pdf

    通过引入分布式缓存机制,可以有效地减轻单一缓存服务器的压力,提升系统的整体性能。分布式缓存可以将数据分布在多个缓存节点上,从而实现更高的读写性能和更好的容错能力。这不仅能提升专利审查的效率,还能确保...

    ASPNETCoreCache:有关如何在ASP.NET Core上使用分布式缓存的视频演示的源代码(葡萄牙语)-How to use the source code

    在这个项目中,"ASPNETCoreCache" 提供了关于如何在ASP.NET Core中实施分布式缓存的源代码,这通常是为了提高应用程序性能和减少数据库负载。分布式缓存是将数据存储在分布式系统中的缓存策略,它可以在多台服务器...

    电子科技大学分布式系统研究生期末考试

    - **假设表达**:明确模型中关于系统的假设条件。 - **可行性分析**:基于假设分析系统的可行性和不可行性。 **2.4 交互模型** - **通信性能**:分布式系统中通信的性能指标,如消息传输延迟等。 - **同步与异步**...

Global site tag (gtag.js) - Google Analytics