`
jianchen
  • 浏览: 342950 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

memcached-分布式缓存服务器

    博客分类:
  • J2EE
阅读更多

Memcached在很多时候都是作为数据库前端cache使用的

因为它比数据库少了很多SQL解析、磁盘操作等开销,而且它是使用内存来管理数据的,所以它可以提供比直接读取数据库更好的性能,在大型系统中,访问同样的数据是很频繁的,memcached可以大大降低数据库压力,使系统执行效率提升。另外,memcached也经常作为服务器之间数据共享的存储媒介,例如在SSO系统中保存系统单点登陆状态的数据就可以保存在memcached中,被多个应用共享。


memcached号称“分布式缓存”,其实他的分布式体现在客户端的实现上。它具有以下的特点:

1,协议简单

2,基于libevent的时间处理

3,内置内存存储方式

4,memcached不互通信的分布式


memcached在服务器上以进程启动,客户端通过网络通信跟其进行交互,java里的memcached实现有用mina来做网络这一块实现的。在客户端只需要调用简单的API,数据就被缓存起来了。当然了memcached由于使用的是内存缓存数据,所以重启机器必然导致数据的丢失,但是有些插件之类的,也支持将数据做一定的持久化。memcached的性能非常优秀,基本上不怎么消耗CPU资源。大部分局限在网络这一块的数据传输。


memcached的内部数据存储

默认情况下采用Slab Allocation的机制分配管理内存。采用的是slab class-chunks-chunk,已解决内存碎片的问题。把分配的空间划分成一块块不同大小的空间块组,将相同大小的快分成组。这些块的大小也是可以配置的。过大过小都不合适,需要根据自己缓存的内容大小进行权衡,通过制定Growth Factor进行控制。如下图为Slab Allocation的构造图:



memcached的数据删除算法

默认采用LRU算法,当空间不足时,会选择最近早少使用的缓存数据进行失效。


memcached的分布式算法


服务器端负责存储数据,给出数据,客户端负责分布式算法。简单的通过对应用传过来的键进行hash后,对服务器的节点数相除后,得到要保存的节点,所以数据其实是分散到很多机器上的。但是这种算法有一定的弊端,当增加缓存服务节点后,会导致缓存效果瞬间降低,导致对数据库的压力骤增,很有可能把数据库高挂掉。



 

所以后来提出了一致性hash的算法,来解决这个问题。

 

一致性哈希(Consistent Hashing)
在此我们采用了一种新的方式来解决问题,处理服务 器的选择不再仅仅依赖key的hash本身而是将服务实例(节点)的配置也进行hash运算。

  1. 首先求出每个服务节点的hash,并将其配置到一个0~2^32的圆环(continuum)区间上。
  2. 其次使 用同样的方法求出你所需要存储的key的hash,也将其配置到这个圆环(continuum)上。
  3. 然后从数据映射到的位置开始顺时针 查找,将数据保存到找到的第一个服务节点上。如果超过2^32仍然找不到服务节点,就会保存到第一个memcached服务节点上。

     



 

因此Consistent Hashing最大限度地抑制了键的重新分布。而且,有的Consistent Hashing的实现方

法还采用了虚拟节点的思想。使用一般的hash函数的话,服务器的映射地点的分布非常不均匀。

因此,使用虚拟节点的思想,为每个物理节点(服务器)在continuum上分配100~200个点。这样

就能抑制分布不均匀,最大限度地减小服务器增减时的缓存重新分布。

通过下文中介绍的使用Consistent Hashing算法的memcached客户端函数库进行测试的结果是,由

服务器台数(n)和增加的服务器台数(m)计算增加服务器后的命中率计算公式如下:

(1 n/(n+m)) * 100

 

阅读了一篇日本人写的剖析文章,见附件。

  • 大小: 62.2 KB
  • 大小: 47.8 KB
  • 大小: 43.5 KB
分享到:
评论

相关推荐

    MemcachedDemo----分布式缓存系统C#应用实例

    本实例主要介绍如何使用C#语言集成和应用Memcached作为分布式缓存解决方案,以实现网站负载量的提升。 Memcached是一款开源、高性能、分布式的内存对象缓存系统,它设计的目标是简化数据存储和检索过程,通过将数据...

    session共享 memcached-session-manager 1.9.6 jar

    Memcached是一款广泛应用的高性能分布式内存对象缓存系统,它能够有效地缓解数据库的压力,提高系统的响应速度。`memcached-session-manager`是Java的一个库,用于在基于Tomcat的Web应用中实现基于Memcached的...

    第九章 企业项目开发--分布式缓存Redis(1)1

    我们将基于上一章(第八章:企业项目开发--分布式缓存memcached)的基础进行深入讲解。 1. 为什么使用Redis 1.1 分布式缓存的重要性(本地缓存的问题) 分布式缓存解决了本地缓存的局限性,如内存限制、单点故障等...

    cpp-分布式缓存服务器memcachedb

    **分布式缓存服务器Memcachedb详解** Memcachedb是一个基于Memcached的开源项目,由新浪公司的开发团队设计并推出。它的主要目标是在原有Memcached的基础上引入了持久化存储功能,同时实现了异步主辅复制机制,以...

    第八章 企业项目开发--分布式缓存memcached1

    【分布式缓存 Memcached】是企业项目开发中解决本地缓存局限性的一种高效方案。本地缓存虽然在初期能够提供快速的数据访问,但随着缓存数据量的增加,内存消耗也随之增长,可能导致系统运行变慢甚至出现性能瓶颈。...

    memcached-1.2.1-win32.zip 和 java_memcached-release_1.6.zip

    Memcached是一款高性能、分布式的内存对象缓存系统,用于减少数据库负载,提高Web应用的响应速度。它通过将数据存储在内存中,以键值对的形式提供快速访问。`memcached-1.2.1-win32.zip` 包含了在Windows操作系统上...

    memcached-win32-1.4.4-14.zip

    描述中提到,Memcached是一个分布式缓存系统,这意味着它可以在网络中的多台服务器之间共享数据,以提高应用程序的性能和响应速度。"32位安装程序,下载安装即可"指示了这个包适用于32位操作系统,并且用户只需下载...

    memcached-win64-1.4.4-14.zip

    Memcached 是一个高性能、分布式内存对象缓存系统,它广泛应用于Web应用中,用来减轻数据库负载,提高数据访问速度。Memcached的设计理念是简单而快速,通过在内存中存储键值对来提供高速的数据访问。这里我们关注的...

    memcached-session-manager

    1. **分布式会话管理**:在高并发的Web环境中,单一服务器的会话管理可能成为瓶颈,memcached-session-manager 提供了解决方案,它将用户的会话数据分布存储在多个 Memcached 服务器上,实现了会话的跨服务器共享,...

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

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

    memcached 分布式缓存服务器

    **memcached 分布式缓存服务器** `memcached` 是一款高效、轻量级的分布式内存对象缓存系统,主要用于缓解数据库的负载压力,通过在内存中存储数据,提高网络应用的数据读取速度。它广泛应用于网站开发、API服务、...

    memcached-1.5.11.tar.gz

    Memcached,一个高性能、分布式的内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库的负载,提高数据访问速度。本文将深入探讨Memcached的1.5.11版本,解析其核心特性与工作原理。 一、Memcached简介 ...

    tomcat-7.0.54配合使用的memcached-session-manager1.6.1的整套jar包

    而Memcached则是一种高性能、分布式内存对象缓存系统,常用于减轻数据库负载,提升应用性能。当面对高并发、大量用户访问的情况时,传统的session管理方式可能会成为性能瓶颈。为了优化这个问题,我们可以使用`...

    memcached-win-1.5.6.rar

    **Memcached** 是一款高性能、分布式内存对象缓存系统,广泛应用于Web应用中,用于减轻数据库负载,提高数据访问速度。它通过将数据和对象存储在内存中,以快速访问的方式提供服务,而不是每次请求都从数据库中读取...

    python-memcached-latest.tar

    **分布式缓存策略** 在分布式环境中,Memcached可以通过一致性哈希算法实现数据在多个节点间的自动分布。这允许在添加或移除服务器时,尽可能少地重新分布数据,保持系统的稳定性和性能。 总的来说,`python-...

    memcached-1.2.6-win32-bin.zip

    1. 分布式缓存:Memcached基于键值对存储,可将数据分散存储在多台服务器上,实现负载均衡。 2. 高性能:通过内存存储数据,避免了磁盘I/O的延迟,极大地提高了读取速度。 3. 简单易用:接口简单,支持多种编程语言...

    java_memcached-release_2.5.1.jar Memcache java jar 包

    Memcached是一种分布式内存对象缓存系统,常用于减轻数据库负载,提高Web应用的性能。在本例中,我们关注的是`java_memcached-release_2.5.1.jar`这个文件,这是一个包含了Java Memcached客户端库的JAR(Java ...

    缓存memcached-1.2.1

    Memcached是一款高效、轻量级的分布式内存对象缓存系统,广泛应用于Web应用程序中,以减轻数据库负载,提高数据访问速度。在这个版本1.2.1中,我们探讨其核心特性、工作原理以及如何在Windows环境下进行安装和配置。...

    memcached(十一)memcached-session-manager

    "工具"标签则表明`memcached-session-manager`是一个实用工具,用于在Java Web应用中处理session的持久化和分布式存储,可能是通过提供API或者配置选项来实现。 **文件名解析:** "tomcat7"可能是教程中涉及的一个...

    Memcached-session-manager所需最新jar包-tomcat7-kryo序列

    1. **Memcached**:Memcached是一种分布式的高性能内存对象缓存系统,用于加速动态Web应用程序,通过在内存中缓存数据和对象来减少数据库访问的次数,从而提高动态、数据库驱动网站的速度。 2. **Session管理**:在...

Global site tag (gtag.js) - Google Analytics