`

几种必须了解的分布式算法

 
阅读更多

Paxos算法

1)问题描述

分布式中有这么一个疑难问题,客户端向一个分布式集群的服务端发出一系列更新数据的消息,由于分布式集群中的各个服务端节点是互为同步数据的,所以运行完客户端这系列消息指令后各服务端节点的数据应该是一致的,但由于网络或其他原因,各个服务端节点接收到消息的序列可能不一致,最后导致各节点的数据不一致。举一个实例来说明这个问题,下面是客户端与服务端的结构图:

当client1、client2、client3分别发出消息指令A、B、C时,Server1~4由于网络问题,接收到的消息序列就可能各不相同,这样就可能由于消息序列的不同导致Server1~4上的数据不一致。对于这么一个问题,在分布式环境中很难通过像单机里处理同步问题那么简单,而Paxos算法就是一种处理类似于以上数据不一致问题的方案。

2)算法本身

莱斯利·兰伯特(Leslie Lamport,paxos算法的奠基人,此人现在在微软研究院)的Paxos Made Simple 是学习paxos最好的文档,它并没有像大多数算法文档那样搞一堆公式和数学符号在那里吓唬人,而是用人类语言让你搞清楚Paxos要解决什么问题,是如何解决的。

言归正传,透过Paxos算法的各个步骤和约束,其实它就是一个分布式的选举算法,其目的就是要在一堆消息中通过选举,使得消息的接收者或者执行者能达成一致,按照一致的消息顺序来执行。其实,以最简单的想法来看,为了达到大伙执行相同序列的指令,完全可以通过串行来做,比如在分布式环境前加上一个FIFO队列来接收所有指令,然后所有服务节点按照队列里的顺序来执行。这个方法当然可以解决一致性问题,但它不符合分布式特性,如果这个队列down掉或是不堪重负这么办?而Paxos的高明之处就在于允许各个client互不影响地向服务端发指令,大伙按照选举的方式达成一致,这种方式具有分布式特性,容错性更好。

说到这个选举算法本身,可以联想一下现实社会中的选举,一般说来都是得票者最多者获胜,而Paxos算法是序列号更高者获胜,并且当尝试提交指令者被拒绝时(说明它的指令所占有的序列号不是最高),它会重新以一个更好的序列参与再次选举,通过各个提交者不断参与选举的方式,达到选出大伙公认的一个序列的目的。也正是因为有这个不断参与选举的过程,所以Paxos规定了三种角色(proposer,acceptor,和 learner)和两个阶段(accept和learn),三种角色的具体职责和两个阶段的具体过程就见Paxos Made Simple ,另外一个国内的哥们写了个不错的PPT ,还通过动画描述了paxos运行的过程。不过还是那句话不要一开始就陷入算法的细节中,一定要多想想设计这些游戏规则的初衷是什么。

Paxos算法的最大优点在于它的限制比较少,它允许各个角色在各个阶段的失败和重复执行,这也是分布式环境下常有的事情,只要大伙按照规矩办事即可,算法的本身保障了在错误发生时仍然得到一致的结果。

3)算法的实现

Paxos的实现有很多版本,最有名的就是google chubby ,不过看不了源码。开源的实现可见libpaxos 。另外,ZooKeeper 也基于paxos解决数据一致性问题,也可以看看它是如果实现paxos的。

4)适用场景

弄清楚paxos的来龙去脉后,会发现它的适用场景非常多,Tim有篇blog《Paxos在大型系统中常见的应用场景》专门谈这个问题。我所见到的项目里,naming service是运用Paxos最广的领域,具体应用可参考ZooKeeper

一致性Hash算法

1)问题描述

分布式常常用Hash算法来分布数据,当数据节点不变化时是非常好的,但当数据节点有增加或减少时,由于需要调整Hash算法里的模,导致所有数据得重新按照新的模分布到各个节点中去。如果数据量庞大,这样的工作常常是很难完成的。一致性Hash算法是基于Hash算法的优化,通过一些映射规则解决以上问题

2)算法本身

对于一致性Hash算法本身我也不做完整的阐述,有篇blog《一致性hash算法 - consistent hashing》 描述这个算法非常到位。

实际上,在其他设计和开发领域我们也可以借鉴一致性Hash的思路,当一个映射或规则导致有难以维护的问题时,可以考虑更一步抽象这些映射或规则,通过规则的变化使得最终数据的不变。一致性hash实际就是把以前点映射改为区段映射,使得数据节点变更后其他数据节点变动尽可能小。这个思路在操作系统对于存储问题上体现很多,比如操作系统为了更优化地利用存储空间,区分了段、页等不同纬度,加了很多映射规则,目的就是要通过灵活的规则避免物理变动的代价

3)算法实现

一致性Hash算法本身比较简单,不过可以根据实际情况有很多改进的版本,其目的无非是两点:

  • 节点变动后其他节点受影响尽可能小
  • 节点变动后数据重新分配尽可能均衡

实现这个算法就技术本身来说没多少难度和工作量,需要做的是建立起你所设计的映射关系,无需借助什么框架或工具,sourceforge上倒是有个项目libconhash ,可以参考一下

以上两个算法在我看来就算从不涉及算法的开发人员也需要了解的,算法其实就是一个策略,而在分布式环境常常需要我们设计一个策略来解决很多无法通过单纯的技术搞定的难题,学习这些算法可以提供我们一些思路。

分享到:
评论

相关推荐

    分布式算法导论原书第2版

    分布式算法的核心知识点可以总结为以下几个方面: 1. 基础概念:包括分布式系统的基本概念,如节点、进程、消息传递、分布式状态机、网络分区等。书中应该会解释这些术语的含义,以及它们在设计和实现分布式算法中...

    几种分布式功率控制算法分析.pdf

    本文主要分析了几种分布式功率控制算法,它们是在不使用中心控制单元的情况下,由网络中的各个节点自主进行功率调整的算法。分布式功率控制算法相较于集中式功率控制具有算法复杂度低、易于扩展和抗毁性高等优势。 ...

    分布式算法在乘法模块中的应用.pdf

    分布式算法的实现过程涉及到了几个关键步骤: 1. 利用分布式算法原理,对FIR滤波器的系数进行乘积累加运算。 2. 采用流水线技术,将乘法模块的操作分解为一系列较简单的、可以并行处理的子操作。 3. 通过并行分布式...

    中科大黄刘生教授分布式算法、概率算法讲义

    【分布式算法】 分布式算法是计算机科学中的一个重要领域,它研究如何在多台计算机或网络节点之间协调计算任务,以解决单个系统无法处理的大规模问题。分布式算法涉及到多个独立执行的进程,它们通过网络通信协作...

    分布式算法导论 英文版

    - 分析了几种结构化的解决方案。 #### 四、核心概念详解 - **分布式系统定义**(第1章) - 定义了什么是分布式系统,以及它们与传统集中式系统之间的区别。 - 探讨了分布式系统的架构和编程语言的选择。 - 介绍...

    边缘计算的分布式算法.pptx

    根据给定的部分内容,边缘计算中的分布式算法主要可以分为以下几类: 1. **分布式一致性算法** - **单副本一致性(Raft)**:适用于规模较小、延迟较低的边缘环境。通过日志复制机制来保证数据的一致性。 - **多...

    分布式算法

    ### 分布式算法 #### 一、分布式系统的定义与主要目标 **定义**: 分布式系统是由多个相互连接的计算节点组成的系统,这些节点通过网络通信进行协作,共同完成任务。用户从应用层面感知不到各个节点的存在,而是...

    中科大_研究生_算法设计与分析_最新期末复习资料分布式算法总结.zip

    分布式算法是计算机科学中的一个重要领域,特别是在大数据处理和云计算中占据核心地位。这份"中科大_研究生_算法设计与分析_最新期末复习资料分布式算法总结.zip"文件包含了关于这一主题的详细资料,对于理解分布式...

    分布式算法与优化.pdf

    在可扩展算法、调度和前缀求和的讨论中,文档提出了几种可扩展性策略,其中包括并行化的一些基本方法。调度是分布式计算中决定任务如何分配给处理器的重要过程。文档通过一个简单(贪心)算法和它的最优性来具体阐述...

    网络化分布式凸优化算法研究进展.pdf

    分布式优化算法的研究进展主要集中在以下几个方面:一是分布式优化算法的设计,二是分布式优化算法的收敛性分析,三是分布式优化算法在实际应用中的实现。 分布式优化算法的设计主要是为了解决大规模优化问题。为了...

    基于分布式算法的FIR优化设计.pdf

    首先,文章对分布式算法在数字滤波器实现中的应用进行了介绍,并且总结了几种用于减少只读存储器(ROM)单元容量的分布式实现算法。随后,文章提出了一种综合方法,即将分解ROM方法与偏移二进制码(Offset Binary ...

    基于最小误差熵的分布式算法研究.pdf

    在介绍基于最小误差熵的分布式算法研究之前,我们首先需要理解几个核心概念:自适应滤波、分布式算法、最小均方误差(MSE)和最小误差熵(MEE)。 自适应滤波是一种根据输入信号的统计特性自动调整自身参数的滤波...

    基于改进分布式算法的无线传感网络覆盖盲区检测.pdf

    分布式算法是一种能够在没有中央控制的情况下由网络中的各个节点自主协作完成特定任务的算法。改进的分布式算法针对盲区检测进行了优化,使得网络能够更加高效地识别并处理覆盖盲区。 3. 无线传感网络覆盖盲区检测...

    基于FPGA分布式算法的滤波器设计.pdf

    分布式算法,从文档描述来看,是一种适用于FPGA设计的乘加运算算法,其目的是为了简化滤波器系统的设计,并提高系统的运行速度。 接下来,文档描述了设计者是如何利用FPGA的并行处理特性来设计分布式算法。并行处理...

    基于FPGA分布式算法的滤波器设计

    分布式算法是一种适合于FPGA的乘加运算方法,主要用于克服FPGA内部硬件乘法器资源有限的问题。该算法通过利用FPGA中的存储器资源来实现查找表运算,从而有效地减少了硬件规模和资源使用量。在具体实现过程中,可以...

    算法与数据结构 分布式算法课程 第12章 ASM - Peterson’s算法 共43页.pdf

    这一章节重点介绍了几种经典的互斥算法,包括Peterson算法、Bakery算法和Burns算法。 #### 三、Peterson算法详解 Peterson算法是为了解决异步共享内存系统中的互斥问题而设计的一种经典算法。该算法保证了进程在...

    分布式算法(非字典排列和字典排列)

    ### 分布式算法中的排列问题:字典排列与非字典排列 #### 一、引言 在计算机科学领域,特别是在分布式系统的研究中,排列问题是一个重要的数学模型,尤其是在涉及多集(允许元素重复出现的集合)的情况下。本文将...

    联合稀疏信号恢复中的分布式路径协同优化算法.pdf

    为了解决这一难题,本文提出了一种分布式路径协同优化算法。 首先,我们来理解文中提到的几个关键概念: 1. 压缩感知(Compressed Sensing):这是一种信号处理理论,旨在从远小于Nyquist采样定理要求的采样中重构...

    面向物联网隐私数据分析的分布式弹性网络回归学习算法.pdf

    一、分布式算法 1.1 什么是分布式算法? 分布式算法是指在多个节点上进行并行计算的算法,以提高计算效率和可扩展性。在面向物联网隐私数据分析领域,分布式算法可以解决集中式算法所带来的问题,如网络带宽占用过...

Global site tag (gtag.js) - Google Analytics