`

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

 
阅读更多
  • 读后感

逐字逐句看完《大型分布式网站架构设计与实践》第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应用电商项目的开发技术,还能提升自己的架构设计能力,为成为一位优秀的架构师奠定坚实的基础。

    基于三角波定位监督的分布式CFRP-OFBGs早期损伤检测方法.pdf

    标题中提到的“基于三角波定位监督的分布式CFRP-OFBGs早期损伤检测方法”涉及了多个关键概念,包括三角波定位、分布式系统、CFRP(碳纤维复合材料)以及OFBGs(光纤光栅传感器)。为深入了解这些概念及其在损伤检测...

    ADS软件应用教程视频-分布式电路设计-射频电路设计

    这个“ADS软件应用教程视频-分布式电路设计-射频电路设计”资源显然是一个全面的学习材料,旨在帮助用户掌握ADS软件的使用以及射频电路设计的基本概念和技巧。以下是基于这些信息详细阐述的相关知识点: 1. **ADS...

    基于Java语言的xxl-job-2.3.1分布式任务调度设计与实践源码学习

    本项目不仅为开发者提供了一个学习和实践分布式任务调度的平台,也为分布式系统设计和优化提供了宝贵的经验和启示。通过深入研究xxl-job源码,开发者将能够更加深入地理解分布式计算的精髓,从而设计出更加高效、...

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

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

    大数据时代电子取证分布式架构的设计与实践.pdf

    吴铭和宋庆飞两位研究者,分别来自上海现代信息技术研究所和盘石软件(上海)有限公司,共同探讨了大数据时代电子取证分布式架构的设计与实践。 电子取证是法庭证据科学中的一个重要分支,主要涉及在有限的时间内从...

    分布式资料

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

    系统架构师考试材料2009-2017

    《系统架构师考试材料2009-2017》是针对系统架构师资格认证考试的一份全面学习资源,涵盖了从2009年至2017年间的历年真题、教程及部分论文资料。这份压缩包对于备考者来说极具价值,因为它不仅提供了试题的回顾,还...

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

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

    商业源码-编程源码-RedSoft多层分布式架构实例源码.zip

    《RedSoft多层分布式架构实例源码》是一个深入探讨分布式系统设计与实现的宝贵资源,主要涉及软件/插件开发、编程语言应用以及分布式技术的实际运用。本源码集为开发者提供了一个完整的、多层的分布式架构示例,有助...

    毕业设计-分布式快递系统-crm前台(没弄).zip

    【标题】"毕业设计-分布式快递系统-crm前台(没弄).zip" 提供的是一个基于分布式架构的快递管理系统的前端部分,虽然CRM(客户关系管理)的前台部分未完成,但我们可以从这个主题中抽取一些关键的IT知识点。...

    "Aspice VDA 16流程文档大全:真材实料的专业公司级标准",aspice vda 16个全流程文档,包括全部流程 swe sys man3 sup1.8.9.10,最全的版本,公司级别专业可

    "Aspice VDA 16流程文档大全:真材实料的专业公司级标准",aspice vda 16个全流程文档,包括全部流程 swe sys man3 sup1.8.9.10,最全的版本,公司级别专业可验,每个文档都是真材实料,有的有内容,有的是模板 ...

    系统架构设计师教程第二版

    在本书中,读者将学习到系统架构设计的基本概念、原理和方法论,包括但不限于系统设计的基础、架构风格、设计模式、质量属性以及系统的分析与评估。此外,教程还详细介绍了如何将理论知识应用于实际场景中,通过案例...

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

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

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

    在信息技术日新月异的今天,系统架构设计师成为了IT领域内的核心职业之一。他们不仅仅是技术的实施者,更是技术与商业需求结合的桥梁,负责将复杂的系统需求转化为合理且高效的软件架构解决方案。通过“软考高级系统...

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

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

    高可用网站架构设计与实现.rar

    《高可用网站架构设计与实现》是一份深入探讨如何构建稳定、可靠且高效网站架构的综合资料。这份压缩包包含了详细的设计文档、开题报告以及相关的PPT演示文稿,旨在为IT专业人士提供一个全面的学习资源,同时也适用...

    全面解析ASPICE VDA流程文档:涵盖全流程16个文档版本最全专业资料集,每个文件内容充实真材实料,专业可验确保公司级别标准化,涵盖SWE Sys Man3及Sup1.8.9.10完整解读,每份文

    全面解析ASPICE VDA流程文档:涵盖全流程16个文档版本最全专业资料集,每个文件内容充实真材实料,专业可验确保公司级别标准化,涵盖SWE Sys Man3及Sup1.8.9.10完整解读,每份文档均有实际应用模板助力高效工作,...

Global site tag (gtag.js) - Google Analytics