`

Memcached学习笔记 — 第五部分-Memcached分布式实现

 
阅读更多

 

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://tech.idv2.com/2008/07/10/memcached-001/

 

  • 大小: 18.5 KB
  • 大小: 23 KB
  • 大小: 26.2 KB
  • 大小: 8.2 KB
分享到:
评论

相关推荐

    Memcached学习笔记 — 第四部分:Memcached Java 客户端-gwhalin(1)-介绍及使用

    本篇学习笔记将重点介绍如何在Java环境中使用gwhalin提供的Memcached客户端进行开发。gwhalin的Memcached Java客户端是一个轻量级、高性能的库,使得Java开发者可以轻松地与Memcached服务器进行交互。 ### 一、...

    memcached-笔记资料

    【标题】"memcached-笔记资料"涉及到的核心知识点是分布式内存缓存系统——Memcached,它是一个高性能、轻量级的缓存解决方案,主要用于减轻数据库的负载,提高Web应用的性能。 【描述】"memcached-笔记资料"暗示了...

    Memcached学习笔记

    ### Memcached学习笔记 #### 一、Memcached简介 Memcached是一种高性能的分布式内存对象缓存系统,主要用于在动态应用程序中减少数据库负载,提高访问速度。最初由Danga Interactive为优化LiveJournal.com网站的...

    memcached学习笔记

    【Memcached 学习笔记】 Memcached 是一种高性能的分布式内存对象缓存系统,主要用于减少数据库负载,提高应用程序的响应速度。它最初由 Danga Interactive 开发,为 LiveJournal.com 提供服务,处理高流量的动态...

    Memcached 学习资料(memcached Memcached使用手册 Memcached源码剖析笔记)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    memcached-笔记资料.rar

    标题 "memcached-笔记资料.rar" 暗示了这个压缩包包含的是关于 memcached 的学习资料,这是一款广泛使用的分布式内存对象缓存系统。它主要用于减轻数据库的负载,通过在内存中存储常用数据,提高应用程序的响应速度...

    韩顺平 PHP Memcached缓存技术资料源码笔记图解PPT_Ady

    Memcached是一款分布式内存对象缓存系统,广泛应用于高性能网站和应用中。它设计的目标是简化并加速动态Web应用程序的数据存储,通过将数据存储在内存中,避免频繁读取或写入数据库,从而提高系统响应速度。 二、...

    memcached教程.PPT.笔记.软件

    - **数据分片**:对于大量数据,可以使用哈希算法实现数据分片,分散到多个Memcached实例上。 5. **性能优化** - **内存管理**:根据服务器资源合理分配内存,避免内存不足导致的性能下降。 - **网络优化**:...

    Java架构面试专题汇总(含答案)和学习笔记.zip

    以上只是Java架构面试中可能涉及的部分核心知识点,实际的压缩包文件可能还包括更多具体的面试题目、解答以及深度学习笔记,对于准备Java架构师职位的求职者来说,这些都是宝贵的参考资料。通过系统学习并实践这些...

    NoSQL学习笔记

    在这个学习笔记中,我们将探讨NoSQL技术的优劣,并对常用的NoSQL技术进行对比和深入分析,同时也会涉及到Memcached数据缓冲技术。 首先,让我们来了解为什么我们需要使用非关系数据库。随着互联网web2.0网站的兴起...

    memcached php

    Memcached是一种高性能、分布式内存缓存系统,常用于减轻数据库的负载,提升Web应用的响应速度。 描述中提到的是关于Memcached的安装文件、集群配置的图解文档(可能是.doc格式),以及PHP程序实现Memcached项目的...

    Java架构面试专题(含答案)和学习笔记(5).rar

    以上只是Java架构面试中部分可能涉及的知识点,具体的学习笔记和答案会更加详细地解释每个概念,提供实践案例和解决思路,帮助读者巩固理论知识并提升实战技能。对于希望在Java架构领域深造的开发者来说,这是一个...

    胡伟煌 Linux学习笔记

    Linux学习笔记的知识点总结,涵盖了Linux文件系统、Linux介绍、Linux文件权限、Shell简介、运维工具、Ansible的使用、Supervisor的使用、Confd的使用、NFS的使用、ceph-fuse的使用、Git、Nginx、Keepalived、TCP/IP...

    《IT学习资料2》-Java架构师学习.zip

    它包含了四个主要部分:ConcurrentProgrammingStudyNotes(并发编程学习笔记)、DistributedTopic(分布式主题)、DistributedStudyNotes(分布式学习笔记)以及ConcurrentProgrammingTopic(并发编程主题)。...

    《java学习》-SSM实战项目-Java高并发秒杀API,详细流程+学习笔记.zip

    本项目提供了详细的流程说明和学习笔记,帮助开发者更好地掌握相关知识。 首先,`pom.xml`文件是Maven项目的配置文件,它定义了项目依赖,包括SSM框架的各个版本和其他必要的库。通过管理依赖关系,Maven能够自动...

    php之Memcache学习笔记

    5. 分布式存储和高可用 - 大型网站在使用Memcache时,为了提高缓存的可用性和扩展性,往往会采用多个memcached服务器组成分布式存储。 - Memcache内置了简单的负载均衡机制,可以将数据存储在不同的服务器上,自动...

    43_说说你们的分布式session方案是啥?怎么做的?.zip

    附件中的"笔记.docx"可能详细记录了分布式Session的各种实现方法和优缺点,"01_分布式会话是什么.png"可能是一张解释分布式会话概念的图表,而"PPT.pptx"则可能是更全面的讲解,包括具体的配置示例和实战经验分享。...

    自己学习系统架构整理出的学习笔记

    这份学习笔记涵盖了多个关键领域,包括亿级流量网站的架构设计、微服务架构、代码重构和设计模式等,这些都是现代软件开发的核心技术。 首先,亿级流量网站架构核心技术.pdf 提到了如何处理大规模用户访问的问题。...

    B站【编程不良人】Redis学习笔记

    本学习笔记基于"B站【编程不良人】"的Redis教程,深入浅出地介绍了Redis的各种特性和使用方法,旨在帮助读者全面掌握Redis的基础与进阶知识。 一、Redis基础知识 1. 数据类型:Redis提供了五种基本数据类型,包括...

Global site tag (gtag.js) - Google Analytics