`

真材实料的分布式资料-试读《大型分布式网站架构设计与实践》有感

 
阅读更多
  • 读后感

逐字逐句看完《大型分布式网站架构设计与实践》第2章,意犹未尽!如标题所言,这是一本“真材实料的分布式资料”,它与我看过的分布式书籍(如《大型网站系统与Java中间件实践》)不同,本书重技术兼并理论,给了新人入手的方向。

 

我最最感动的是书中介绍了很多分布式的“干货”:分布式缓存可以用memcache、数据库水平/垂直拆分技术、分布式存储可以HBase/Redis等、消息通道可以用ActiveMQ、搜索引擎Lucene/Solr等。当然每一种技术都不是一本书能说完的,作者至少给了我们学习的方向,我很感动。

 

这只是第2章,后面还会有我很感兴趣的日志处理、数据仓库、负载均衡等,如果没有中奖,我也会去买一本学习。这是一本适合入门和进阶的书籍,有介绍分布式的理论,也同时介绍每种技术用到的具体实现方式,可以让我们少走弯路。

 

书中介绍了一致性hash算法(consistent hashing),我个人也非常佩服这个经典算法,所以后面对它进行一些介绍总结。

 

  • 一致性算法

 

背景:所谓分布式缓存不是说每台服务器都存储所有的缓存,而是让每台服务器均分存储缓存。要实现服务器的均分及更新就要注意两点:①用什么算法去均分才能快速找到指定缓存;②当缓存出现新增、删除时如何将变化的缓存同步到对应服务器也是一个关键。

 

传统算法:最传统的算法是通过“缓存总数/服务器数量”的形式来均分,每一个缓存都有其唯一的Hash值(数字),要找到指定缓存在哪台服务器上可通过hash(key)%N取余的形式判断,这样基本能达到平衡。

传统的算法查找缓存运行模式如下图所示,当客户端需要某个缓存的时候,首先会向缓存索引(菱形结构)发出请求,此时索引器通过算法(hash(key)%N)取余的形式找到余数对应的缓存服务器并取得该缓存返回。


 

这种算法能达到缓存的第一个条件“用什么算法去均分才能快速找到指定缓存”,但是却在第二个条件上碰了壁“当缓存出现新增、删除时如何将变化的缓存同步到对应服务器”。假设server1突然宕机,该服务器上的所有缓存失效,这时又得重新平均计算缓存并且平均放到剩余的几台服务器上。重置缓存是需要花费时间的,这时如果有用户请求则无法取到缓存,取而代之的是从数据源读数据,一大波数据请求不断冲击服务器,很可能造成系统崩溃,这也就是所谓的“雪崩效应”。

 

一致性哈希(consistent hashing):一致性哈希算法在1997年由麻省理工学院提出,设计目标是为了解决因特网中的热点问题,目前在集群缓存应用中得到非常高的肯定。

 

下图所示为一致性哈希的理论原理。

>>首先要有一个首位相接的圆环,这个圆环大小是有科学依据的:一般一个缓存对象的hash值是32位的,那么理论上就可以存在2的32次方个(也就是从数字0~2的32次方-1)不同的哈希值,那么只需要将0和2的32次方-1首尾相连就成了一个数字圆环

>>假设有9个缓存,这时将其进行hash计算成一个数字,再根据他们的哈希值放到圆环对应数字点位上,这样9个缓存就已经有自己位置(如下图粉色小圆点即是缓存哈希)。

>>假设有4台缓存服务器,我们也对服务器进行哈希计算生成32位数字,这时再将服务器放在圆环对应位置上(如下图淡蓝色圆圈)。这样就组成了缓存与缓存服务器的物理结构图。[顺便提一下服务器的hash计算,一般的方法可以使用机器的IP地址或者机器名作为hash输入。]

>>如何将缓存映射到对应服务器上呢?一致性哈希算法采用单向就近原则:在这个环形空间中,如果沿着顺时针方向从缓存哈希出发,直到遇见一个服务器Node,那么就将该对象存储在这个Node上,因为缓存哈希和服务器的hash值是固定的,因此这个缓存必然是唯一和确定的。这样就能很方便根据哈希值找到对应服务器下的缓存对象。


 

用这种方式只需要维护node的hash值即可找到对应缓存,非常快速方便。而且假设有一个node宕机,则只需要将它维护的缓存hash放入下一个Node中即可;假设有新缓存加入,则只需要根据其hash值找最近的Node即可,缓存变化影响非常小。这是模式满足了前面提到的分布式缓存第二点要求“当缓存出现新增、删除时如何将变化的缓存同步到对应服务器”。

 

当然,上面描绘的只是一种理想的情况,各个节点在环上分布得十分均匀。正常情况下,当节点数量较少时,节点的分布可能十分不均匀,从而导致数据访问的倾斜,大量的 key 被映射到同一台服务器上。为了避免这种情况的出现,可以引入虚拟节点机制,对每一个服务器节点都计算多个 Hash值,每一个Hash值都对应环上一个节点的位置,该节点称为虚拟节点,而key 的映射方式不变,只是多了一步从虚拟节点再映射到真实节点的过程。这样,如果虚拟节点的数量足够多,即使只有很少的实际节点,也能够使 key分布得相对均衡。 

 

这就是一致性哈希算法的原理,理论非常合理,所以才会受到这么广泛的应用,希望能给大家有所帮助。

  • 大小: 103.2 KB
  • 大小: 25.5 KB
分享到:
评论
2 楼 呵呵6666 2016-11-10  
受教了!分享一个Dubbo分布式架构项目实战参考内容:
http://www.roncoo.com/course/view/f614343765bc4aac8597c6d8b38f06fd​
1 楼 Yuanyuanasdf 2015-08-13  
我正在看这本书,很不错!

相关推荐

    分布式系统-原理与范例

    这本书“分布式系统-原理与范例”可能是深入理解这一主题的关键资源,尽管这里提供的信息是英文版且清晰度不高。然而,对于熟悉英文的专业人士来说,这仍然是一个有价值的学习材料。 分布式系统的原理主要包括以下...

    Java编程代码-分布式事务-源代码+讲义+资料

    在这个"Java编程代码-分布式事务-源代码+讲义+资料"的压缩包中,我们可以期待深入学习关于分布式事务的理论与实践。 首先,分布式事务的核心目标是实现ACID(原子性、一致性、隔离性和持久性)特性,这是数据库事务...

    杨波-分布式系统设计案例课材料.zip

    分布式系统设计是现代互联网技术的核心组成部分,它涉及多个计算节点通过网络进行协同工作,以处理大规模数据和提供高可用的服务。杨波的分布式系统设计案例课材料深入浅出地介绍了这个领域的关键概念和技术。 首先...

    大型分布式Java应用电商项目教程pdf+架构师视频资源

    在IT行业中,分布式Java应用和电商项目的结合是现代企业级...通过深入学习这些内容,开发者不仅可以掌握大型分布式Java应用电商项目的开发技术,还能提升自己的架构设计能力,为成为一位优秀的架构师奠定坚实的基础。

    分布式IO-ADAM物联网全面感知解决方案.pptx

    【分布式IO-ADAM物联网全面感知解决方案】 ADAM物联网全面感知解决方案是亚当科技提出的一种分布式数据采集系统,旨在提供高效、智能的物联网(IoT)应用。自1992年以来,亚当科技不断创新,推出了多款ADAM系列产品,...

    阿里巴巴服务搜索框架、架构设计实践和分布式数据库服务实践.zip

    其次,“阿里巴巴中文站架构设计实践(何崚).pdf”可能涵盖了阿里巴巴中文网站的架构演进历程,从单体架构到分布式架构的转变。这可能包括负载均衡策略、缓存机制、数据一致性保障、容灾恢复方案等内容。通过这样的...

    分布式资料

    最后,《分布式实时处理系统 原理、架构与实现.pdf》则全面探讨了实时数据处理的原理和实践。这可能包括实时处理系统的架构设计,如批处理与流处理的区别,实时数据处理框架(如Spark Streaming、Flink)的工作机制...

    新员工培训材料-天宫paas分布式服务架构演进及k8s基础培训.pdf

    【新员工培训材料-天宫PaaS分布式服务架构演进及K8S基础培训】 本文主要探讨了中国联通济南软件研究院的“天宫PaaS”分布式服务架构的演进以及Kubernetes(K8S)的基础知识,由主讲人王海涛进行讲解。以下是详细的...

    分布式光伏发电系统的设计与实现.pdf

    分布式光伏发电系统的设计与实现这一主题涉及了新能源领域特别是光伏发电系统的构建,以及分布式发电系统的运作原理和实践应用。分布式光伏发电系统是一种利用太阳能这一清洁能源,通过安装光伏面板来收集太阳能并...

    分布式光伏扶贫项目接网工程典型设计

    ### 分布式光伏扶贫项目接网工程典型设计 #### 总论 分布式光伏扶贫项目接网工程典型设计是一项旨在通过光伏技术改善贫困地区能源供应的重要工程。该设计充分考虑了光伏扶贫项目的特殊性和地区特点,旨在为分布式...

    移动通信分布式皮基站设计方案.pdf

    总而言之,此文档是关于移动通信领域分布式皮基站设计的重要技术资料,不仅涵盖了从2G到5G的技术演进,还包括了BBU、PRRU等关键组件的介绍,以及分布式基站架构的部署案例。此设计图方案应该是为专业人士提供参考的...

    基于分布式光纤的建筑材料偏差检测方法.pdf

    本文提出的基于分布式光纤的建筑材料尺寸偏差检测方法,就是为了解决传统检测方法中的精度问题。 首先,我们来看传统的建筑材料尺寸偏差检测方法。传统的检测方法主要包括基于遗传神经网络算法的检测方法、基于材料...

    分布式驱动电动汽车轮毂设计与优化.pdf

    分布式驱动电动汽车的轮毂设计与优化是当前电动汽车技术发展的重点之一。本文针对分布式驱动电动汽车轮毂的设计与优化进行了详细的研究和分析,主要的知识点包括了以下几点: 1. 分布式驱动电动汽车的特点:分布式...

    Hadoop3.1.3安装和单机/伪分布式配置

    ### Hadoop3.1.3安装与单机/伪分布式配置知识点详解 #### 一、实验目的和要求 - **掌握Hadoop3.1.3的安装与配置**:包括单机模式和伪分布式模式。 - **理解Hadoop的工作原理**:特别是其在不同模式下的运行机制。 ...

    分布式轮边驱动中同步带传动的设计与研究.pdf

    在讨论分布式轮边驱动中同步带传动的设计与研究时,需要重点掌握以下几个知识点: 1. 分布式轮边驱动的定义与特点:分布式轮边驱动系统是指驱动系统中的驱动力矩直接作用于车辆或机械系统的轮边,而不需要通过传统...

    大规模分布式存储系统:原理解析与架构实战pdf文档+电商项目视频资源

    本资源包包含了对大规模分布式存储系统的深入解析和实际架构案例,结合电商项目的实践视频,旨在帮助学习者理解和掌握这一领域的核心知识。 首先,我们从“Java基础入门到架构师”的部分开始,这部分内容涵盖了Java...

    2021年最新系统架构师资料.zip

    资料包包含以下内容: 1、系统架构师论文范文50篇(含完整目录).pdf 2、2021年软考题库app:包含软考初级、中级、高级各科目练习题库 3、2020年系统架构设计师讲义:从网上收集来的希赛2020年最新讲义 4、2021年系统...

    软考高级系统架构设计师资料

    在软考高级系统架构设计师的考试中,考生需要掌握多个核心领域的知识,包括计算机组成与结构、系统配置与性能评价、操作系统知识、数据库系统以及计算机网络。以下是对这些知识点的详细阐述: 1. 计算机组成与结构...

    基于MVC模式的耐火材料梭式窑分布式控制系统.pdf

    根据提供的文件信息,以下是对“基于MVC模式的耐火材料梭式窑分布式控制系统”知识点的详细说明: ### MVC模式 MVC(Model-View-Controller)模式是一种软件设计模式,主要用于将软件应用程序分为三个核心部件:...

    4_应用系统分布式构建运维.rar

    【标题】"4_应用系统分布式构建运维.rar" 涉及的是在IT领域中关于构建和运维分布式应用系统的主题,特别关注了基于Linux环境下的实践操作。分布式系统是现代IT架构中的核心部分,它通过将工作负载分散到多个相互连接...

Global site tag (gtag.js) - Google Analytics