`

memcache 分布式,算法实现

 
阅读更多

memcached 虽然称为 分布式 缓存服务器,但服务器端并没有 分布式 功能。每个服务器都是完全独立和隔离的服务。 memcached 的分布式,则是完全由客户端程序库实现的。 这种分布式是 memcached 的最大特点。

 

分布式原理

这里多次使用了 分布式 这个词,但并未做详细解释。 现在开始简单地介绍一下其原理,各个客户端的实现基本相同。

 

下面假设 memcached 服务器有 node1 node3 三台, 应用程序要保存键名为 “tokyo”“kanagawa”“chiba”“saitama”“gunma” 的数据。

 

 

 

1 分布式简介:准备

 

首先向 memcached 中添加 “tokyo” 。将 “tokyo” 传给客户端程序库后, 客户端实现的算法就会根据 来决定保存数据的 memcached 服务器。 服务器选定后,即命令它保存 “tokyo” 及其值。

 

 

 

2 分布式简介:添加时

 

同样, “kanagawa”“chiba”“saitama”“gunma” 都是先选择服务器再保存。

接下来获取保存的数据。获取时也要将要获取的键 “tokyo” 传递给函数库。 函数库通过与数据保存时相同的算法,根据 选择服务器。 使用的算法相同,就能选中与保存时相同的服务器,然后发送 get 命令。 只要数据没有因为某些原因被删除,就能获得保存的值。

 

 

 

3 分布式简介:获取时

 

这样,将不同的键保存到不同的服务器上,就实现了 memcached 的分布式。 memcached 服务器增多后,键就会分散,即使一台 memcached 服务器发生故障 无法连接,也不会影响其他的缓存,系统依然能继续运行。

 

分布式算法

缓存系统中应用比较多的是余数计算分散和一致性 HASH 计算分散。

余数计算分散

原理

余数计算分散法简单来说,就是 根据服务器台数的余数进行分散

1.       求得传入键的整数哈希值( int hashCode )。

2.       使用计算出的 hashCode 除以服务器台数 (N) 取余数( C=hashCode % N

3.       N 台服务器中选择序号为 C 的服务器。

特点

余数计算的方法简单,数据的分散性也相当优秀,但也有其缺点。 那就是当添加或移除服务器时,缓存重组的代价相当巨大。 添加服务器后,余数就会产生巨变,这样就无法获取与保存时相同的服务器, 从而影响缓存的命中率。

Consistent Hashing

算法

一致性 HASH 算法我的理解,简单来说就是 , 在一个大的数据范围内的构建一个虚拟的环,首( 0 )尾( Integer.MAXVALUE )相接的圆环,然后通过 某种 HASH 算法 增加虚拟节点的方式( 1 个实体节点可以虚拟 N 个虚拟阶段,如 160 200 1000 等)让节点更为均匀的分别在环上。 KEY 请求的时候,也通过相同的某种 HASH 算法 计算出 HASH 值,然后在在到环上定位同向最接近的虚拟节点,最后通过虚拟节点与实体节点的对应关系找到服务的实体节点。


 

网上介绍很多,图也多,不想在截取了。那就给个连接:

http://blog.csdn.net/sparkliang/article/details/5279393

另外公司现有的项目中也使用 Consistent Hashing 用于分表定位,缓存定位等。工程项目中也有先关算法的实现。

 

特点

1. 算法实现比较麻烦,需要构建虚拟环。

2. 解决了余数算法增加节点命中大幅额度降低的问题,理论上,插入一个实体节点,平均会影响到:虚拟节点数 /2 的节点数据的命中

 

参考:http://acooly.iteye.com/blog/1120819

 

分享到:
评论

相关推荐

    memcache分布式缓存的使用

    通过一致性哈希算法,可以将数据均匀地分配到多个Memcache节点上,当有新的节点加入或离开时,尽可能少地改变数据分布,保持系统的稳定性。 **性能优化** 1. **缓存策略**:选择合适的缓存策略,如LRU(Least ...

    基于MemCache的分布式扩展算法.pdf

    2. 使用分布式算法确定数据存储的服务器节点。 3. 如果数据存在于选定的服务器,直接返回;否则,查询数据库并返回结果,同时将数据存入缓存。 4. 下次相同请求时,数据可以直接从缓存中获取,无需再次查询数据库,...

    memcache缓存分布式集群

    Memcache分布式集群就是通过将数据分散到多个节点来实现这一目标。 2. **Memcache的数据一致性**:在分布式环境中,数据的一致性是个挑战。Memcache通常采用“主键-值”的方式存储数据,集群中每个节点独立处理请求...

    memcache分布式一致性hash

    分布式一致性哈希是一种解决在分布式缓存系统中如何高效、稳定地分配数据的算法,尤其在Memcache等缓存服务中广泛应用。...在Memcache等分布式缓存服务中,一致性哈希是实现高效、可扩展性和稳定性的关键算法。

    memcache分布式的对象缓存系统

    在分布式环境中,Memcache可以部署在多台服务器上,通过一致性哈希算法实现数据的分布式存储和负载均衡,进一步提升系统的可扩展性和容错性。此外,Memcache还支持LRU(Least Recently Used)策略,当内存不足时,会...

    Java开发中的Memcache原理及实现

    Java开发中的Memcached原理及实现主要涉及分布式缓存系统、内存管理和网络通信等多个技术领域。Memcached是一款高性能、分布式内存对象缓存系统,用于减轻数据库负载,提高网站或应用程序的响应速度。在Java环境中,...

    memcache 缓存 分布式

    3. **分布式支持**:Memcache支持多服务器集群,可以将数据分散存储在不同的服务器上,实现负载均衡和数据冗余,增强了系统的可扩展性和容错性。 **二、Memcache的安装与配置** 安装Memcache相对简单,通常可以...

    Memcache的使用和协议分析详解

    Memcache的分布式特性体现在它可以跨多台服务器部署,通过一致性哈希算法将数据分散到不同的节点上,实现负载均衡和数据冗余。这样,即使某一台服务器故障,数据仍可以从其他服务器中获取,保证了系统的可用性。 **...

    Memcache完全剖析 最实用的Memcache文档

    Memcached的分布式算法是其核心特性之一,主要通过一种称为Consistent Hashing的算法来实现。这种算法可以有效地解决分布式环境中缓存数据位置更新的问题,确保当某一个节点增加或删除时,只有少数数据需要迁移。 ...

    【汇总】Memcache

    3. **分布式架构**:多个Memcache服务器可以组成集群,通过一致性哈希算法分散数据存储,实现负载均衡。 ### 三、主要特性 1. **高性能**:基于非阻塞I/O模型,采用多线程处理,可以高效地处理大量并发请求。 2. ...

    Fourinone分布式计算框架

    FourInOne整体代码仅仅为70k,跟Hadoop, Zookeeper, Memcache, ActiveMq等开源产品代码上没有任何相似性,不需要任何依赖,引用一个jar包就可以嵌入式使用,良好支持window环境,可以在一台机器上模拟分布式环境,更...

    分布式架构理解总结

    分布式文件系统能够实现跨地域、跨设备的大规模文件存储与访问。例如: - **HDFS**: Hadoop Distributed File System,专门为Hadoop 设计的分布式文件系统,支持海量数据的高效存储和处理。 #### 九、日志收集系统...

    memcache_php使用测试

    - **memcache.hash_strategy** 和 **memcache.hash_function**: 控制key到服务器的映射策略及哈希函数,通过设置不同的策略和函数,可以优化数据分布和负载均衡,比如标准哈希策略和CRC32算法通常用于提高一致性。...

    MemCache对象缓存应用

    1. **分布式**:MemCache可以运行在多台服务器上,通过哈希算法自动分配数据到不同的服务器,实现数据的分布式存储。 2. **内存存储**:所有数据都存储在内存中,读写速度极快。 3. **无持久化**:默认情况下,...

    php7.2 memcache.dll

    Memcache则是一个高性能的分布式内存对象缓存系统,它能够存储数据以减少数据库访问,提高网站性能。 描述中提到,这些DLL文件是使用Visual C++ 15(VC15,对应于Visual Studio 2017)编译的,这意味着它们与该版本...

    memcache 5.3.3

    Memcache 支持多服务器集群,通过一致性哈希算法将数据分布到不同的服务器上,实现负载均衡和高可用性。即使单个 Memcache 服务器宕机,其他服务器仍能继续提供服务。 6. **内存管理** 由于 Memcache 数据完全...

    memcache1.2.8源码分析(源码有注释+ppt说明)

    源码分析有助于理解如何通过一致性哈希等算法实现数据的分布式存储和查找。 8. **性能优化** 为了提高性能,memcache在设计上做了很多优化,比如预分配内存、内存复用、零拷贝等。源码中可以看到这些优化的具体...

    memcache-2.2.6.tgz

    1. **分布式存储**:通过哈希算法,Memcache能够将数据分散到多个服务器上,实现负载均衡和高可用性。 2. **Key-Value 存储**:它以键值对的形式存储数据,键是唯一的标识符,值可以是任意类型的数据,如字符串、...

    服务器缓存服务memcache

    - **分布式**:Memcache支持多客户端并发访问,可以部署在多台服务器上,实现分布式缓存,有效缓解单个服务器的压力。 - **简单易用**:Memcache使用TCP协议,API简洁,支持多种编程语言,如PHP、Python、Java、...

    MemCache详细解读1

    MemCache集群的“分布式”特性完全依赖于客户端程序的实现,客户端负责根据路由算法选择正确的服务器进行数据存取。 MemCache的工作流程通常如下: 1. 应用程序需要缓存数据时,通过API调用指定数据和键(Key)。 2...

Global site tag (gtag.js) - Google Analytics