`

分布式缓存服务器设计原理

 
阅读更多
1.数据是如何被分布到多个服务器上的?(一致性哈希算法)
假设有n台服务器,
计算这n台服务器的IP地址的哈希值,
把这些哈希值从小到大按顺时针排列组成一个“服务器节点环”,
客户端需要存储一系列的“键值对”到这些服务器上去,
计算这些“键”的哈希值,
看看这些“键”的哈希值落在“服务器环”的哪些区间,
如下图所示:
根据上图示意,数据将被存储在“顺时针方向上的下一个服务器节点”
读取数据时,也是先根据“键”的哈希值,找到这个服务器节点,
再向这个节点索取数据。
2.数据如何均匀的分布?(虚拟服务器)
假设服务器数量较少,
很可能造成有些服务器存储的数据较多、承担的压力较大,
有些服务器就比较空闲。
这时就要把一台服务器虚拟化成多台服务器,
具体的操作办法:
在计算服务器对应的哈希值时
可以在IP地址字符串加多个“尾缀”
比如:
10.0.0.1#1
10.0.0.1#2
10.0.0.1#3
....
这样,一台物理服务器就被虚拟化成多台服务器,
对应“服务器环”上的多个节点。
3.如何实现数据的热备份?
以顺时针方向看“服务器环”
当有客户端把数据存储在第1台服务器上后,
第1台服务器负责把该数据拷贝一份给第2台服务器
以此类推,
也就是说“服务器环”上的每一个节点,都是上一个节点的热备份节点
同时,一个服务器上存了两类数据,一类是自身的业务数据,一类是上一节点的热备数据。
注意:这里所说的服务器,都是物理服务器,不是虚拟服务器。
如下图所示
4.如何让客户端发现所有服务端?
每个服务器节点都要维护一个对照表
这个对照表中包含所有服务器,(IP地址和IP地址的哈希值对照表)
配置客户端时,只要让客户端知道任意一个服务器的IP地址即可
客户端可以通过获取这个服务器的对照表从而知道所有的服务器
客户端初始化的时候,这个对照表也存储在客户端一份
客户端根据这个对照表来存取数据
注意:这个对照表是有一个版本号的,具体的用途见下面的描述
5.如何应对服务器异常?
假设数据在节点1上读写不成功,
我们就认为这个节点存在异常,要把它从服务器群集中拿掉。
客户端先在节点2(节点1的热备节点)上完成相应的读写工作,这时客户端就可以去做其他工作了。
然后节点2向节点0索取数据(这些数据是本应该备份在节点1上的数据)
然后节点2向节点3推送数据(这些数据是节点1上的数据,现在要备份在节点3上)
然后节点2更新其对照表,把节点1从其对照表中移除,并更新对照表的版本号
当有任何客户端与节点2交互的时候,
就会发现节点2上的对照表的版本号比自己持有的对照表要高
此时,客户端就更新自己的对照表
这些客户端再与其他服务器交互的时候
其他服务器发现客户端携带的对照表版本号比自己持有的要高
此时,其他服务器更新自己的对照表
注意:这是一个“发散式的连锁反应”,不会影响生产。
还可以让节点2告知节点3需要更新对照表
当节点3更新完之后,再让节点3告知节点4....
以此引发“环式的连锁反应”
注意:
当“服务器环”上连续两台服务器同时故障的时候,那么这个系统就崩溃了
可以对数据做两次热备份,以提高安全性,但性能和硬件利用率会有所损耗。
6.如何增加服务器?
首先需要通过配置让这台服务器知道节点环上的任意一台服务器的IP地址(假设是10.0.0.1)
此服务端运行之后,他就会从10.0.0.1上获取对照表,
以此知道自己在节点环中的具体位置,
它首先需要从它的下一个节点中迁移一部分数据(也就是它上一个节点热备份的一部分数据)
然后从上一个节点中索取一部分数据(也就是该自己存储的一部分数据)
然后它把自己加入对照表中,
然后告知10.0.0.1需要更新对照表,以此引发连锁反应
 
 
 
此文最初的想法是一个alexqiu跟我说的,
后来又仔细研究了一致性哈希算
并加入了我自己的想法(热备机制、配置表保存及升级机制)
最终形成此文。
 
 
2014年4月9号:
针对此文做了技术分享,录音文件地址:http://url.cn/KxFQw5
第一个问题:此文利用IP地址(虚拟IP地址)计算哈希值的办法尚待进一步考虑和验证
第二个问题:增减服务器节点均是在"物理节点环"上完成,与“虚拟节点环”没有关系
第三个问题:除了热备,还可以在热备的基础上实现负载均衡
 
分享到:
评论

相关推荐

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

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

    基于ZooKeeper的分布式缓存的设计与实现.pdf

    ZooKeeper被设计为一个高性能的分布式协调服务框架,可以管理分布式环境中各个缓存服务器之间的共享状态数据,以支持分布式缓存系统的稳定运行。ZooKeeper本质上是一个分布式的小文件存储系统,可以维护和协调分布式...

    分布式缓存

    分布式缓存的主要目标是解决单机内存有限的问题,通过在网络中的多台服务器上分散存储数据,实现高可用性、高并发性和低延迟。这种技术广泛应用于数据库读写缓存、大数据分析、微服务架构等场景。 1. **分布式缓存...

    cpp-分布式缓存服务器memcachedb

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

    300分钟吃透分布式缓存pdf和markdown

    在这个300分钟的学习资料中,我们将深入探讨分布式缓存的基本概念、工作原理以及如何在实际项目中应用。 首先,分布式缓存的核心思想是将数据分散存储在多台独立的设备上,通过网络进行通信和协调,实现数据的高速...

    Memcached 分布式缓存实现原理简介

    分布式缓存是现代高并发应用中缓解数据库压力的关键技术,Memcached作为一款广泛使用的分布式内存缓存系统,其设计和实现原理对于理解分布式系统至关重要。本文主要探讨了Memcached的分布式实现,以及它如何通过简单...

    cpp-xcache是喜马拉雅内部使用的一套分布式缓存解决方案

    1. **Pika和Codis源码分析**:研究两个开源项目的代码结构,理解其设计原理和实现细节。 2. **分布式缓存理论**:学习CAP理论、数据一致性模型以及分布式系统的设计原则。 3. **性能优化技巧**:探索如何通过调整...

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

    分布式缓存,简单来说,就是在多台服务器之间共享数据的一种存储系统。它的主要目标是提高数据访问速度,减轻数据库的压力,并提供高可用性和可扩展性。在分布式系统中,由于数据被分散存储在多个节点上,因此可以...

    Memcached 分布式缓存实现原理 – 码农网1

    分布式原理: Memcached 的分布式实现主要依赖于客户端的哈希策略。当客户端需要存储或检索数据时,它会使用数据的键(key)进行哈希运算,然后根据哈希结果确定数据应存储或查找的memcached服务器。这种哈希策略...

    _net memcached 分布式缓存应用类库

    4. **分布式缓存原理**:理解分布式缓存的工作方式,如键值存储、数据分片、一致性哈希、过期策略等。 5. **SQL数据库交互**:掌握如何将Memcached与SQL数据库结合使用,优化读写操作,实现读写分离和负载均衡。 6. ...

    分布式缓存框架 SwarmCache

    SwarmCache 的设计目标是简化分布式缓存的部署和管理,提高系统的可扩展性和性能。下面将详细探讨 SwarmCache 的核心概念、工作原理、特点以及相关技术。 1. **核心概念** - **分布式**:SwarmCache 是一种分布式...

    分布式缓存客户端MemcachedProviders最新下载

    分布式缓存客户端MemcachedProviders是IT领域中一种用于提高应用程序性能和可伸缩性的关键工具。Memcached是一种广泛使用的开源高性能、分布式内存对象缓存系统,它可以存储数据并提供高速访问,减轻数据库负载,...

    基于Java的源码-分布式缓存框架 SwarmCache.zip

    本文将深入探讨SwarmCache的核心概念、设计原理以及在实际开发中的应用。 首先,SwarmCache的设计理念源自于对传统单机缓存的扩展,以适应分布式环境。它利用Java的网络通信库实现节点间的通信,通过分布式一致性...

    java源码:分布式缓存框架 SwarmCache.zip

    总之,SwarmCache的源码提供了丰富的学习材料,不仅能够帮助开发者掌握分布式缓存的基本原理,还能加深对Java并发编程、网络通信和系统设计的理解。通过实践和研究,开发者可以将这些知识应用到自己的项目中,提升...

    一个用 C# 实现的 No Sql 数据库 , 也可以说是 分布式 缓存 , 用于作为 集群 的 共享内存.zip

    4. **分布式缓存原理**:包括数据过期策略、缓存失效、缓存更新机制等。 5. **共享内存**:如何在进程间安全地共享数据,避免数据冲突和同步问题,可能涉及到Windows API或者.NET Framework的相关接口。 6. **并发...

    分布式缓存Memcached实例

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

    分布式缓存系统Memcached学习心得.zip

    分布式缓存系统在现代Web开发中扮演着至关重要的角色,特别是在处理高并发、大数据量的场景下。Memcached是一款高效、轻量级的分布式内存对象缓存系统,它旨在减轻数据库负载,提升应用性能。本资源针对Memcached的...

    缓存服务器

    4. **分布式缓存**:在大型分布式系统中,多台缓存服务器协同工作,共同处理高并发请求,如Hadoop的HDFS NameNode和DataNode。 三、缓存策略 缓存策略主要有以下几种: 1. **LRU(Least Recently Used)**:最近...

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

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

    DistributedCache:实现分布式缓存

    本文将深入探讨分布式缓存的基本概念、工作原理以及如何在Go中构建和使用分布式缓存。 一、分布式缓存基础 1. **缓存概念**:缓存是一种用于存储临时数据的技术,目的是提高数据读取速度。在分布式系统中,缓存...

Global site tag (gtag.js) - Google Analytics