首页 > 其他分享 >分布式

分布式

时间:2023-08-24 22:33:35浏览次数:26  
标签:分区 Leader 算法 一致性 entry 节点 分布式

一、理论

1、CAP

  • C:一致性:所有节点访问同一份最新的数据副本
  • A:可用性:非故障的节点在合理的时间内返回合理的响应,不是错误或者超时的响应
  • P:分区容错性:分布式系统在出现网络分区的时候,依然能够对外提供服务

网络分区:分布式系统中,多个节点之间的网络原本是联通的,但是由于某些故障导致某些节点不连通,整个网络分成了几块区域,这就叫网络分区。

 一个分布式系统必须要满足分区容错性,然后在此基础上,只能满足可用性或者一致性。三者不能同时满足,只能满足AP或者CP。

为什么不能有CA架构呢?因为如果系统出现“分区”,系统的某个节点正在进行写操作,为了保证C一致性,必须禁止其他节点的读写操作,这就和可用性A发生冲突了。如果保证可用性A,其他节点的读写正常的话就与一致性C发生冲突了。

如果网络分区正常的话(系统在绝大部分时候所处的状态),也就说不需要保证 P 的时候,C 和 A 能够同时保证。

2、CAP实际案例

以下是Dubbo(高性能、轻量级的开源RPC框架)架构图,由注册中心、服务提供者、服务消费者、服务运行容器、监控中心五部分组成。

注册中心的作用:负责服务地址的注册与查找,相当于目录服务,服务提供者和服务消费者只在启动的时候与注册中心交互,注册中心不转发请求,压力较小。

常见的可以作为注册中心的组件有:ZooKeeper、Eureka、Nacos...。

zookeeper只满足CP,nacos不仅支持CP也支持AP架构。

  • zookeeper采用了 Paxos 算法来实现分布式一致性和分区容错性,但是当leader选举过程中半数以上的节点不可用时,zookeeper服务暂时不可用。
  • Nacos 是阿里巴巴开源的服务发现和配置管理平台。Nacos 不仅支持 CP 架构,也支持 AP 架构。在 CP 模式下,Nacos保证强一致性和分区容错性;而在 AP 模式下,Nacos追求高可用性和分区容错性。Nacos提供了服务注册和发现、配置管理、动态配置刷新等功能,被广泛应用于微服务架构中。
 

 3、BASE理论

是对AP方案的补充,AP方案是在系统发生分区的时候放弃一致性,而不是永远放弃一致性,在分区故障恢复后,系统应该达到最终一致性。

1、BA:基本可用:指的是分布式在出现分区故障后允许损失部分可用性。时间以及系统功能的损失。

  • 响应时间上的损失: 正常情况下,处理用户请求需要 0.5s 返回结果,但是由于系统出现故障,处理用户请求的时间变为 3 s。
  • 系统功能上的损失:正常情况下,用户可以使用系统的全部功能,但是由于系统访问量突然剧增,系统的部分非核心功能无法使用。

2、S:软状态:允许分布式系统中的数据存在中间状态,即允许系统在不同节点的数据副本之间进行数据同步的过程中存在延时

3、E:最终一致性:系统中的所有数据副本在经过一段时间的同步后最终能够达到一致的状态。

分布式一致性的 3 种级别:

  1. 强一致性:系统写入了什么,读出来的就是什么。

  2. 弱一致性:不一定可以读取到最新写入的值,也不保证多少时间之后读取到的数据是最新的,只是会尽量保证某个时刻达到数据一致的状态。

  3. 最终一致性:弱一致性的升级版,系统会保证在一定时间内达到数据一致的状态。


实现最终一致性的方式:
  • 读时修复 : 在读取数据时,检测数据的不一致,进行修复。
  • 写时修复 : 在写入数据,检测数据的不一致时,进行修复。
  • 异步修复 : 这个是最常用的方式,通过定时对账检测副本数据的一致性,并修复。

3、paxos算法

分布式系统的共识算法,在分布式系统中进行多个节点之间的协调与通信,以达到一致性的目标。

拜占庭将军问题:假设多位拜占庭将军没有叛军,但是信使有可能被暗杀的情况下,将军们如何达成是否要进攻的一致性决定?

在共识算法中,一般会选举出一个或多个节点作为领导者(Leader),领导者负责协调节点之间的通信和决策。常见的共识算法包括 Paxos、Raft、ZAB(ZooKeeper Atomic Broadcast)等。

paxos算法主要包含2部分:

1、basic paxos 算法:描述的是多节点之间如何就提案达成一致

2、multi-paxos算法:执行多个basic paxos算法,就一系列提案达成共识。

 

3.1 basic paxos 算法

有三个重要的角色:

1、提议者(proposer):负责接收客户端的请求并发起提案

2、接受者(acceptor):负责对提议者的提案进行投票

3、学习者(learner):如果有超过半数的接受者就某个提议达成共识,那么学习者就接受这个提议,并就该提议做出运算,将运算结果返回给客户端。

4、Raft 算法

Raft 是 Multi-Paxos 的一个变种,其简化了 Multi-Paxos 的思想,变得更容易被理解以及工程实现。

4.1节点类型

1、leader:负责发起心跳,响应客户端,创建日志,同步日志

2、candidate:leader选举过程中的临时角色,由follower转化而来,发起投票参与竞选

3、follower:接受leader的心跳和日志同步数据,投票给candidate

在正常的情况下,只有一个服务器是 Leader,剩下的服务器是 Follower。Follower 是被动的,它们不会发送任何请求,只是响应来自 Leader 和 Candidate 的请求。

4.2 任期

 

 raft 算法将时间划分为任意长度的任期(term),任期用连续的数字表示,看作当前 term 号。每一个任期的开始都是一次选举,在选举开始时,一个或多个 Candidate 会尝试成为 Leader。如果一个 Candidate 赢得了选举,它就会在该任期内担任 Leader。如果没有选出 Leader,将会开启另一个任期,并立刻开始下一次选举。raft 算法保证在给定的一个任期最少要有一个 Leader。

4.3 日志

  • entry:每一个事件成为 entry,只有 Leader 可以创建 entry。entry 的内容为<term,index,cmd>其中 cmd 是可以应用到状态机的操作。
  • log:由 entry 构成的数组,每一个 entry 都有一个表明自己在 log 中的 index。只有 Leader 才可以改变其他节点的 log。entry 总是先被 Leader 添加到自己的 log 数组中,然后再发起共识请求,获得同意后才会被 Leader 提交给状态机。Follower 只能从 Leader 获取新日志和当前的 commitIndex,然后把对应的 entry 应用到自己的状态机中。

 

标签:分区,Leader,算法,一致性,entry,节点,分布式
From: https://www.cnblogs.com/coooookie/p/17655325.html

相关文章

  • 分布式数据库
    1.基于Redis分布式锁1.获取锁时,使用setnx加锁(setnxkeyval当且仅当key不存在时,set一个key为val的字符串,返回1;存在返回0;)锁的value为随机的UUID,释放锁的时候进行判断,使用expire命令添加一个超时时间,超过该时间自动释放锁2.释放锁时,通过UUID判断是不是该锁,是则delete进行锁释放......
  • 架构:第五章:分布式架构的演进
    单一应用架构 适用于小型网站,小型管理系统,将所有功能都部署到一个功能里,简单易用。缺点:1、性能扩展比较难2、协同开发问题3、不利于升级维护垂直应用架构 通过切分业务来实现各个模块独立部署,降低了维护和部署的难度,团队各司其职更易管理,性能扩展也更方便,更有......
  • Kurator,你的分布式云原生解决方案
    本文分享自华为云社区《DTSETechTalk|第40期:Kurator,你的分布式云原生解决方案》,作者:华为云社区精选。什么是分布式云原生?中国信通院给出的定义:分布式云原生是指通过云原生技术统一多云技术栈,提供业务价值的设计模式。根据这个定义,我们延伸出以下几个问题:•什么是云原生技......
  • OpenHarmony 分布式硬件关键技术
     本文转载自 OpenHarmony TSC 官方微信公众号《峰会回顾第8期 | OpenHarmony 分布式硬件关键技术》  演讲嘉宾 | 李   刚回顾整理 | 廖   涛排版校对 | 李萍萍嘉宾简介李刚,华为OpenHarmony技术专家,OpenHarmony分布式硬件技术负责人。主要负责OpenH......
  • c# .NET 高级编程 高并发必备技巧(二) - 分布式锁
    上一篇文章简单的介绍了单机的情况下如何进行加锁,防止高并发带来的问题。然而现实中,一般会高并发的应用,很少会单机部署。当用户量达到一定的程度,分布式、集群部署是必然的选择。在分布式部署的情况下,之前的单机锁还会有效吗?代码还是之前的代码:privatestaticobjectlck=......
  • 基于Redission的分布式锁
    分布式锁的设计共分为3步定义注解对注解进行扫描使用注解加锁核心逻辑为RLockrLock=redissonClient.getLock(key);//是否加锁成功booleanisLock=rLock.tryLock(timeOut,expireTime,timeUnit);1.定义注解LockActionpackagecom.jwds.app.compont.cache.annotat......
  • 分布式可视化 DAG 任务调度系统 Taier 的整体流程分析
    Taier作为袋鼠云的开源项目之一,是一个分布式可视化的DAG任务调度系统。旨在降低ETL开发成本,提高大数据平台稳定性,让大数据开发人员可以在Taier直接进行业务逻辑的开发,而不用关心任务错综复杂的依赖关系与底层的大数据平台的架构实现,将工作的重心更多地聚焦在业务之中。本文......
  • 分布式光伏储能系统远程监控运维解决方案
    行业背景随着经济发展对于能源需求的不断提升,光伏发电作为一种重要的可再生清洁能源,受到国家和企业的重点关注。光伏发电是将太阳能转换为电能的过程,其输出功率“靠天吃饭”,容易受到太阳辐射强度、温度等环境因素影响,具有波动性、间歇性、不稳定性等特性。多地开始要求分布式新能源......
  • Nginx Ingress Contoller 通过 Envoy 代理和 Jaeger 进行分布式追踪(二)
    1、概述在《应用程序通过Envoy代理和Jaeger进行分布式追踪(一)》一文中,我们详细介绍了单个应用程序如何通过Envoy和Jaeger实现链路追踪的过程。然而,单独追踪单个应用程序的链路在实际场景中往往显得不够有意义。因此,在本文中,我们将进一步扩展链路追踪范围,演示如何将Ng......
  • ceph分布式存储软件pgs inconsistent
    Ceph是一个开源的分布式存储系统,它提供了高性能、高可靠性以及高扩展性。Ceph的设计理念是基于对象存储模型,通过将数据分割成多个对象并存储在不同的节点上,实现数据的分布式存储和访问。Ceph的核心组件包括:RADOS(ReliableAutonomicDistributedObjectStore):RADOS是Ceph的底层......