Hadoop及其组件简单了解
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/16626253.html
Hadoop
目录:
什么是Shell?
什么是 Shell 脚本?
学习Hadoop需要的设备硬件配置
Hadoop的安装模式分为三种:单机模式、伪分布模式、全分布模式
学习Arch
Hadoop简介
Hadoop项目,四个模块详解
Map/Reduce作业和map/reduce函数的区别
Ambari:安装部署工具
心跳机制
Hive:基于Hadoop的一个数据仓库工具
Pig:Hadoop数据操作的客户端,是一个数据分析引擎
Spark和Hadoop的区别
Hadoop的工作流程
Spark架构及基本流程,RDD,DataFrame
Shark简介
Tez:(运行在YARN上的通用DAG计算框架)
Oozie:表达 MapReduce 作业的依赖关系
ZooKeeper:分布式协调服务
Hbase:分布式数据库
Region服务器工作原理
Store工作原理
HLog工作原理
Flume:日志收集
Sqoop:数据库ETL工具
P2P 网络核心技术:Gossip 协议
——————————————————
什么是Shell?
Shell 是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可以是交互式,也可以是非交互式的。
我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们。
大多数 linux 发行版本默认 shell 使用的是 bash
https://zhuanlan.zhihu.com/p/389943243
——————————————————
什么是 Shell 脚本?
shell 脚本:就是说我们把原来 linux 命令或语句放在一个文件中,就说这个文件程序为 shell 脚本或 shell 程序;
我们可以在脚本中输入一系列的命令以及相关的语法,语句组合,比如变量,流程控制语句等,把他们有机结合起来就形成了一个功能强大的 shell 脚本。
https://zhuanlan.zhihu.com/p/389943243
——————————————————
学习Hadoop需要的设备硬件配置:
自学Hadoop,电脑配置的要求主要是在内存方面。一般来说,至少不能低于8个G。但根据个人经验,最好是不要少于16个G,否则稍微做个迭代计算(比如Spark机器学习、Hive分区表等),你会有把电脑砸了的冲动。
——————————————————
Hadoop的安装模式分为三种:单机模式、伪分布模式、全分布模式:
单机模式:这是默认的安装模式,也是占用资源最少的模式,配置文件不用修改。完全运行在本地,不与其它节点交互,也不使用Hadoop文件系统,不加载任何守护进程,主要用于开发调试MapReduce应用程序
伪分布模式:即“单节点集群”模式,所有的守护进程(eg:namenode,datanode,secondarynamenode,jobtracker,tasktracker)都运行在同一台机子上。这种模式增加了代码调试功能,可以查看内存、HDFS的输入/输出,以及与其它守护进程之间的交互。
全分布模式:真正的分布式集群配置,用于生产环境。
为了便于大家学习,快速进入MapReduce编程,接下来的的学习我们选择搭建Hadoop伪分布集群。
——————————————————
学习Arch:
对于Linux新手来说,相比较学习Ubuntu和centos,建议学习Arch(能够快速进步)虽然这些都可以,但是学习Arch可以让你进步更快。
原因:
1.文档详细. 这点在整个Linux世界是无人可比, Archwiki是最详尽的文档存在, 没有之一.
2.基于KISS哲学, 又不至于像Gentoo甚至LFS那样需要自己各种编译; 适合快速了解Linux生态的构架体系,
3.系统的正交性和一致性比ubuntu和centos强, 依赖管理清晰, 有利于快速熟悉Linux生态的各个组件构成及其配置和作用.
4.ubuntu/centos跟Arch系的区别:
u和c是集成式, 很多你需要或者不需要的都集成在发行版里面了, 正交性不太好, 所以你常常需要去网上搜人家的各种命令写法, 出现问题也不大容易定位, 就算你搜到了正确的解决方案, 大部分情况下你还是云里雾里, 知其然而不知其所以然.
Arch系则是一开始只给你一个基础的最简核心, 其它功能要你自己按需添加, 这个过程会让你很容易学到很多基础的原理和知识, 后续维护的时候, 出现问题你很容易就清楚大致是那个点卡了, 并且知道如何去处理.这就是选择Arch的好处了。之后在选择其他的系统就会一目了然。
——————————————————
Hadoop简介:
Hadoop:Hadoop是一个开源的分布式计算和存储框架,
Hadoop的作用:
就是在计算机集群环境中营造一个统一而稳定的存储和计算环境,并能为其他分布式应用服务提供数据平台支撑,
也就是说,Hadoop框架在某种程度上将多台计算机组织成一台计算机,达到众多计算机来做同一件事的目的,使之具备处理特大量级别的大数据,这样远超过一台高性能计算机的存储和计算机能力,分布式集群的计算机可以是廉价低配置的计算机,这样也降低了硬件成本,可以将Hadoop的作用理解为利用众多低配置计算机集群合力来解决特大量级别的大数据任务,使其超过单台高性能计算机
主机之间通讯:
部署了 Hadoop 软件的主机之间是通过套接字 (网络) 进行通讯的
存储单位:
HDFS的存储单位是块(Block),一批数据会被分成若干个Block,然后分配到集群当中的计算机进行存储
HDFS的节点:
HDFS的节点可以理解为计算机集群中的某一台计算机就是一个节点,这样的节点处计算机有的专门用于存储数据,有的专门用于指挥其他计算机存储数据;其中,Namenode:命名节点,是用于指挥其它节点存储的节点,任何一个"文件系统"(File System, FS) 都需要具备根据文件路径映射到文件的功能,命名节点就是用于储存这些映射信息并提供映射服务的计算机,在整个 HDFS 系统中扮演"管理员"的角色,因此一个 HDFS 集群中只有一个命名节点。DataNode:数据节点,使用来存储数据库的节点,数据节点具有储存数据、读写数据的功能,其中存储的数据块比较类似于硬盘中的"扇区"概念,是 HDFS 存储的基本单位。Secondary Namenode:副命名节点,与NameNode进行通信,以便定期保存HDFS元数据的快照,如果命名节点坏掉了,它也可以提供备份数据以恢复命名节点。副命名节点可以有多个
MapReduce又是什么,它的含义就像它的名字一样浅显:Map 和 Reduce (映射和规约)
原文链接:https://zhuanlan.zhihu.com/p/475818801#:~:text=Hadoop%E7%9A%84%E4%BD%9C,%E5%8F%B0%E9%AB%98%E6%80%A7%E8%83%BD%E8%AE%A1%E7%AE%97%E6%9C%BA%E3%80%82
——————————————————
Hadoop项目,四个模块详解
https://www.cnblogs.com/mmzs/p/8031137.html
HDFS(分布式文件系统):主要是分布式存储数据, 文件,块,DataNode,NameNode
HDFS服务功能:
◆NameNode(NN)是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表和块所在DataNode等。
◆DataNode(DN)在本地文件系统存储文件块数据,以及块数据的校验和。
◆Secondary NameNode(SNN) 用来监控HDFS状态的辅助后台程序,每隔一段时间获 取HDFS元数据的快照
——————————————————
MapReduce(分布式计算框架(适用离线计算)):
将计算过程分为两个阶段:Map和Reduce
1.Map阶段并行处理输入数据 ;
2.Reduce阶段对Map结果进行汇总 ;
Shuffle链接Map和Reduce两个阶段(Shuffle通俗的理解就是重新洗牌,打乱原有顺序)
1.Map Task将数据写到本地磁盘 ;
2.Reduce Task从每个Map Task上读取一份数据 ;
仅适合离线批处理
具有很好的容错性和扩展性 ;
适合简单的批处理任务 ;
缺点明显
启动开销大,过多使用磁盘导致效率低下等;
Hadoop MapRedue 的表达能力有限
磁盘 I/O 开销大
计算延迟高
——————————————————
Map/Reduce作业和map/reduce函数的区别:
Map作业处理一个输入数据的分片,可能需要调用多次map函数来处理每个输入键值对;Reduce作业处理一个分区的中间键值对,期间要对每个不同的键调用一次reduce函数,Reduce作业最终也对应一个输出文件
YARN(服务组件):主要是负责硬件资源的合理调用
1.YARN 总体上仍然是Master/Slave 结构,在整个资源管理框架中,ResourceManager 为Master,NodeManager 为Slave
2.ResourceManager 负责对各个NodeManager 上的资源进行统一管理和调度
3.当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster(主管进程),它负责向ResourceManager 申请资源,并要求NodeManger 启动可以占用一定资源的任务
4.由于不同的ApplicationMaster 被分布到不同的节点上,因此它们之间不会相互影响
YARN资源管理
◆ 资源调度和资源隔离是YARN作为一个资源管理系统,最重要和最基础的两个功能。资源调度由ResourceManager完成,而资源隔离由各个NM实现。
◆ ResourceManager将某个NodeManager上资源分配给任务(这就是所谓的“资源调度”)后,NodeManager需按照要求为任务提供相应的资源,甚至保证这些资源应具有独占性,为任务运行提供基础的保证,这就是所谓的资源隔离。
◆ 当谈及到资源时,我们通常指内存,CPU和IO三种资源。Hadoop YARN同时支持内存和CPU两种资源的调度。
◆ 内存资源的多少会会决定任务的生死,如果内存不够,任务可能会运行失败;相比之下,CPU资源则不同,它只会决定任务运行的快慢,不会对生死产生影响
——————————————————
Ambari:安装部署工具
https://zhuanlan.zhihu.com/p/101940942
——————————————————
心跳机制:
ambari-server和ambari-agent是通过ambari-agent定期发送post请求上报agent所在主机的状态,ambari-server在接收到ambari-agent上报的状态后,给ambari-agent返回应该在这台主机上执行的指令,这样一次完整的流程就是一次心跳,通过心跳完成主从交互的这种机制就是心跳机制。
——————————————————
Hive(基于Hadoop的一个数据仓库工具):
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。Hive的优点是学习成本低,可以通过类似SQL语句实现快速MapReduce统计,使MapReduce变得更加简单,而不必开发专门的MapReduce应用程序。hive十分适合对数据仓库进行统计分析。
——————————————————
Pig:Hadoop数据操作的客户端,是一个数据分析引擎
Pig是Hadoop数据操作的客户端,是一个数据分析引擎,采用了一定的语法操作HDFS中的数据(Pig应该说是一种语言,有人说Pig是类SQL的语言我这里只能说它的功能类似Sql语言和数据库的关系,而且这里的Sql更像是PLSQL而不是标准SQL,Hadoop中更像标准Sql的应该是Hive或者叫HiveQL),它的语言比较像Shell脚本,可以嵌入Hadoop的JAVA程序中,从而达到简化代码的功能,
Pig的脚本叫Pig Latin,之所以说Pig是一个数据分析引擎,是因为Pig相当于一个翻译器,将Pig Latin语句翻译成MapReduce程序,而Pig Latin语句是一种用于处理大规模数据的脚本语言。
Pig Latin可完成排序(Order By)、过滤(Where)、求和(Sum)、分组(Group By)、关联(Join)等操作,支持自定义函数;
Pig Latin是把类似Sql的语句转换成MapReduce过程进行处理,减少Java 代码的书写,
Pig的运行方式有Grunt Shell方式,脚本方式和嵌入式方式。
Grunt shell方式
Grunt shell方式首先用pig命令启动,pig命令可以加参数“-x local”代表本地模式,或“-x mapreduce”代表mapreduce模式,默认mapreduce模式。本地模式:伪分布式模式下使用,MapReduce模式:全分布式下使用
Pig script方式
script方式中,用pig命令启动,后面带要运行的.pig文件即可,如:
$ pig -x local id.pig
$ pig id.pig
$ pig -x mapreduce id.pig
嵌入式方式 Java代码(具体看链接)
原文链接:https://blog.csdn.net/hirisw/article/details/89681701
——————————————————
Spark和Hadoop的区别:
1.Spark 使用 Scala 语言进行实现,它是一种面向对象的函数式编程语言,能够像操作本地集合对象一样轻松地操作分布式数据集。它具有运行速度快、易用性好、通用性强和随处运行等特点
2.Spark 提供了内存计算,把中间结果放到内存中,带来了更高的迭代运算效率。通过支持有向无环图(DAG)的分布式并行计算的编程框架,Spark 减少了迭代过程中数据需要写入磁盘的需求,提高了处理效率(更适合处理交互分析,机器学习)
3.Spark 为我们提供了一个全面、统一的框架,用于管理各种有着不同性质(文本数据、图表数据等)的数据集和数据源(批量数据或实时的流数据)的大数据处理的需求
4.Spark 使用函数式编程范式扩展了 MapReduce 模型以支持更多计算类型,可以涵盖广泛的工作流,Spark 的计算模式也属于 MapReduce 类型,但提供的操作不仅包括 Map 和 Reduce,还提供了包括 Map、Filter、FlatMap、Sample、GroupByKey、ReduceByKey、Union、Join、Cogroup、MapValues、Sort、PartionBy 等多种转换操作,以及 Count、Collect、Reduce、Lookup、Save 等行为操作,Hadoop 只提供了 Map 和 Reduce 两种处理操作
5.Spark 各个处理结点之间的通信模型不再像 Hadoop 一样只有 Shuffle 一种模式,程序开发者可以使用 DAG 开发复杂的多步数据管道,控制中间结果的存储、分区等
6. Spark 是基于内存进行数据处理的,所以不适合于数据量特别大、对实时性要求不高的场合。另外,Hadoop 可以使用廉价的通用服务器来搭建集群,而 Spark 对硬件要求比较高,特别是对内存和 CPU 有更高的要求
7.Spark 的适应场景有以下几种。
1)Spark 是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大;数据量小但是计算密集度较大的场合,受益就相对较小。
2)Spark 适用于数据量不是特别大,但是要求实时统计分析的场景。
3)由于 RDD 的特性,Spark 不适用于那种异步细粒度更新状态的应用,例如,Web 服务的存储。
8.容错性
在分布式数据集计算时通过checkpoint来实现容错,而checkpoint有两种方式,一个是checkpoint data,一个是logging the updates。用户可以控制采用哪种方式来实现容错
9.两者都是用MapReduce模型来进行并行计算
原文链接:https://zhuanlan.zhihu.com/p/139259614
适用场景:
Hadoop:如果需求倾向于处理大量的大历史数据,则Hadoop是首选,因为硬盘空间的价格要比内存空间便宜得多。
Spark:当我们处理实时数据选项时,Spark可能具有成本效益,因为它使用较少的硬件以更快的速度执行相同的任务。
原文链接:https://zhuanlan.zhihu.com/p/149441214
————————————————
Hadoop工作流程:
原文链接:https://cloud.tencent.com/developer/article/1510500
————————————————
Spark架构:
Application: 用户自己写的 Spark 应用程序,批处理作业的集合
SparkContext: Spark 最重要的 API,用户逻辑与 Spark 集群主要的交互接口,它会和 Cluster Master 交互
Driver 和 Executor:Spark 在执行每个 Application 的过程中会启动 Driver 和 Executor 两种 JVM 进程
RDD:(弹性分布式数据集)
1.可以将 RDD 视作数据库中的一张表。其中可以保存任何类型的数据。Spark 将数据存储在不同分区上的 RDD 之中。
2.RDD知道如何重新创建和重新计算数据集
3.RDD 支持两种类型的操作:变换(Transformation),行动(Action)
DataFrame:
以RDD为基础的分布式数据集,与RDD相同,采用惰性机制,只记录各种转换的逻辑线路图(DAG),支持SQL查询
原文链接:https://cloud.tencent.com/developer/article/1510500
——————————————————
Shark简介:
Shark即Hive on Spark,本质上是通过Hive的HQL解析,把HQL翻译成Spark上的RDD操作,然后通过Hive的metadata获取数据库里的表信息,实际HDFS上的数据和文件,会由Shark获取并放到Spark上运算。
Shark的特点就是快,完全兼容Hive,且可以在shell模式下使用rdd2sql()这样的API,把HQL得到的结果集,继续在scala环境下运算,支持自己编写简单的机器学习或简单分析处理函数,对HQL结果进一步分析计算
Shark速度快的原因除了Spark平台提供的基于内存迭代计算外,在设计上还存在对Spark上进行了一定的拓展
原文链接:https://blog.csdn.net/pelick/article/details/11964291
原文链接:https://blog.csdn.net/baiyangfu_love/article/details/23923163(介绍拓展)
——————————————————
Tez:(运行在YARN上的通用DAG计算框架)
Tez是从MapReduce计算框架演化而来的通用DAG计算框架,可作为MapReduceR/Pig/Hive等系统的底层数据处理引擎,它天生融入Hadoop 2.0中的资源管理平台YARN
Tez旨在成为通用的执行运行时,以增强经典Map-Reduce无法很好地满足的各种方案。 在短期内,主要重点是支持Hive和Pig,特别是要提高批处理和临时交互查询的性能
原文链接:https://blog.csdn.net/wank1259162/article/details/109575875
Tez是支持DAG作业的开源计算框架,它可以将多个有依赖的作业转换为一个作业从而大幅提升DAG 作业的性能。
Tez源于MapReduce框架,核心思想是将Map和Reduce两个操作进一步拆分,即Map被拆分成Input、Processor、Sort、Merge和Output, Reduce被拆分成Input、Shuffle、Sort、Merge、Processor和Output等,这样,这些分解后的元操作可以灵活组合,产生新的操作,这些操作经过一些控制程序组装后,可形成一个大的DAG作业。
两个组成部分:
1.数据处理管道引擎,其中一个引擎可以插入输入,处理和输出实现以执行任意数据处理
2.数据处理应用程序的主机,通过它可以将上述任意数据处理“任务”组合到任务 DAG 中,以根据需要处理数据。
原文链接:https://juejin.cn/post/7111312746175528968
示例链接:https://blog.csdn.net/cloudeagle_bupt/article/details/17919569
——————————————————
Oozie:
用户编写的多个 MapReduce 应用程序之间存在依赖关系或者为了使用 MapReduce 解决一个问题,不得不将问题转化成一系列存在依赖关系的 MapReduce 作业,而为了表达这些作业的依赖关系,用户通常借助于像 Oozie或者 Cascading 这样的流式作业管理工具。
原文链接:https://blog.csdn.net/wank1259162/article/details/109575875
——————————————————
ZooKeeper:分布式协调服务
设计目的是为了减轻分布式应用程序所承担的协调任务,通过选举算法和集群复制可以避免单点故障。
ZooKeeper特性
1 Zookeeper为一个leader,多个follower组成的集群
2 全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的
3 分布式读写,更新请求转发,由leader实施
4 更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行
5 数据更新原子性,一次数据更新要么成功,要么失败
6 实时性,在一定时间范围内,client能读到最新数据
ZooKeeper集群
通常Zookeeper由2n+1台servers组成,每个server都知道彼此的存在。每个server都维护的内存状态镜像以及持久化存储的事务日志和快照。为了保证Leader选举能过得到多数的支持,所以ZooKeeper集群的数量一般为奇数。对于2n+1台server,只要有n+1台(大多数)server可用,整个系统保持可用
Zookeeper服务器:
1.Zookeeper可以帮助选举出一个Master作为集群的总管,并保证在任何时刻总有唯一一个Master在运行,这就避了Master的“单点失效”问题
2.Zookeeper是一个很好的集群管理工具,被大量用于分布式计算, 、提供配置维护、域名服务、分布式同步、组服务等
原文链接:https://blog.csdn.net/liang_0609/article/details/88803391
——————————————————
Hbase:分布式数据库
HBase简介
HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌BigTable的 开源实现,主要用来存储非结构化和半结构化的松散数据
BigTable与HBase的对比
HBase使用HDFS文件存储系统,数据处理使用Hadoop的M/R,服务管理使用Zookeeper
HBase与传统关系数据库的对比分析
1.数据类型:关系数据库采用关系模型,具有丰富的数据类型和存储方式,HBase则采用了更加简单的数据模型,它把数据存储为未经解释的字符串;
2.数据操作:关系数据库中包含了丰富的操作,其中会涉及复杂的多表连接。HBase操作则不存在复杂的表与表之间的关系,只有简单的插入、查询、删除、清空等,因为HBase在设计上就避免了复杂的表和表之间的关系;
3.存储模式:关系数据库是基于行模式存储的。HBase是基于列存储的,每个列族都由几个文件保存,不同列族的文件是分离的;
4.数据索引:关系数据库通常可以针对不同列构建复杂的多个索引,以提高数据访问性能。HBase只有一个索引——行键,通过巧妙的设计,HBase中的所有访问方法,或者通过行键访问,或者通过行键扫描,从而使得整个系统不会慢下来;
5.数据维护:在关系数据库中,更新操作会用最新的当前值去替换记录中原来的旧值,旧值被覆盖后就不会存在。而在HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留;
6.可伸缩性:关系数据库很难实现横向扩展,纵向扩展的空间也比较有限。相反,HBase和BigTable这些分布式数据库就是为了实现灵活的水平扩展而开发的,能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩
https://zhuanlan.zhihu.com/p/131626000
——————————————————
Region服务器工作原理
详见下面的链接
https://zhuanlan.zhihu.com/p/131626000
——————————————————
Store工作原理
Store是Region服务器的核心
https://zhuanlan.zhihu.com/p/131626000
——————————————————
HLog工作原理
就是 Master 对发生故障的 region服务器 的数据 通过HLog 进行恢复
https://zhuanlan.zhihu.com/p/131626000
——————————————————
Flume:日志收集
Flume是一个分布式、可靠、和高可用的海量日志聚合的系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力
flume的逻辑架构:
正如前面提到的,Flume采用了分层架构:
分别为agent,collector和storage。其中,agent和collector均由两部分组成:source和sink,source是数据来源,sink是数据去向。
Flume使用两个组件:
Master和Node,Node根据在Master shell或web中动态配置,决定其是作为Agent还是Collector
agent的作用是将数据源的数据发送给collector
collector的作用是将多个agent的数据汇总后,加载到storage中
storage是存储系统,可以是一个普通file,也可以是HDFS,HIVE,HBase,分布式存储等
Master是管理协调agent和collector的配置等信息,是flume集群的控制器
在Flume中,最重要的抽象是data flow(数据流),data flow描述了数据从产生,传输、处理并最终写入目标的一条路径。
对于agent数据流配置就是从哪得到数据,把数据发送到哪个collector。
对于collector是接收agent发过来的数据,把数据发送到指定的目标机器上。
注:Flume框架对hadoop和zookeeper的依赖只是在jar包上,并不要求flume启动时必须将hadoop和zookeeper服务也启动
https://blog.csdn.net/zhoulixin8/article/details/51753200
——————————————————
Sqoop:数据库ETL工具
就是说Sqoop是一款用来在Hadoop(Hive)和 关系型数据库间 传输数据 的工具。
功能概述:
主要用于在HDFS/Hive与关系型数据库(Mysql、Oracle、SQLserver、...)之间进行数据的传输,可以将一个关系型数据库中的数据导入到HDFS(Hive)中,也可以将HDFS中的数据导入到关系型数据库中
原文链接:https://blog.csdn.net/snail_bing/article/details/82905539
https://blog.csdn.net/weixin_43288858/article/details/126146473
——————————————————
P2P 网络核心技术:Gossip 协议
主要用在分布式数据库系统中各个副本节点同步数据之用,这种场景的一个最大特点就是组成的网络的节点都是对等节点,是非结构化网络
Gossip 协议的执行过程:
Gossip 过程是由种子节点发起,当一个种子节点有状态需要更新到网络中的其他节点时,它会随机的选择周围几个节点散播消息,收到消息的节点也会重复该过程,直至最终网络中所有的节点都收到了消息。这个过程可能需要一定的时间,由于不能保证某个时刻所有节点都收到消息,但是理论上最终所有节点都会收到消息,因此它是一个最终一致性协议
Gossip 的特点(优势):
1)扩展性
网络可以允许节点的任意增加和减少,新增加的节点的状态最终会与其他节点一致。
2)容错
网络中任何节点的宕机和重启都不会影响 Gossip 消息的传播,Gossip 协议具有天然的分布式系统容错特性
3)去中心化
Gossip 协议不要求任何中心节点,所有节点都可以是对等的,任何一个节点无需知道整个网络状况,只要网络是连通的,任意一个节点就可以把消息散播到全网。
4)一致性收敛
Gossip 协议中的消息会以一传十、十传百一样的指数级速度在网络中快速传播,因此系统状态的不一致可以在很快的时间内收敛到一致。消息传播速度达到了 logN。
5)简单
Gossip 协议的过程极其简单,实现起来几乎没有太多复杂性。
Gossip 的缺陷:
1)消息的延迟
2)消息冗余
https://zhuanlan.zhihu.com/p/41228196
——————————————————
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」