学习分布式第一天(分布式系统原理和概念)

news2024/11/16 13:40:47

目录

分布式系统原理和概念

1.分布式系统:

        单体架构:

         垂直架构:

        分布式架构:

2.分布式计算:

3.CAP 原理:

4.BASE 理论:

5.Paxos 算法:

6.Raft 算法:


分布式系统原理和概念

1.分布式系统:

        学习分布式,肯定的知道什么是分布式。分布式言简意赅,就是多台电脑部署实现你要实现的功能,突破了单机的性能机器的瓶颈(高性能),解决了单机的容易宕机的(高可用),另外支出了水平、垂直扩展(可扩展)的 性能。单机服务集群架构或者微服务,根据业务功能拆分都属于分布式。

        单体架构:

                将所有的模块写到一个Web项目中,再统一部署到一个Web服务器中,这就是单体应用架构

         垂直架构:

                垂直应用架构就是将原来的项目应用拆分为互不相干的几个应用,以此提升系统的整体性能

       

        分布式架构:

                将重复的代码抽象出来,形成统一的服务,供其他系统或者业务模块调用,这就是分布式架构

        分布式确实能提高服务性能也利于方便扩展增加新功能,但是毕竟机器之间也是需要沟通的,所以也延伸出网络通信延迟、节点故障、数据分布和同步等分布式环境下的特殊挑战。

2.分布式计算:

        分布式计算是一种将计算任务分解和分配到多个计算资源(如计算机、服务器或节点)上进行并行处理的计算模型。传统的计算模型通常是集中式的,即单个计算机或服务器负责处理所有的计算任务。分布式计算肯定也计算分布式的优势。高性能、容错性、资源共享提高利用率、可扩展的能力。

3.CAP 原理:

        CAP 原理是对分布式系统的三个关键属性进行权衡。C(一致性)表示所有节点在同一时间具有相同的数据视图;A(可用性)表示系统在面临部分节点故障时仍然可用;P(分区容错性)表示系统在面临网络分区时仍然能够继续运行。根据 CAP 原理,分布式系统只能同时满足其中两个属性。

        为什么只能满足其中两个?你们有考虑过这个问题吗。

        这里有个小知识,其实这里有个关于CAP理论理解的误区。不要以为在所有时候都只能选择两个特性。在不存在网络失败的情况下(分布式系统正常运行时),C和A能够同时保证。只有当网络发生分区或失败时,才会在C和A之间做出选择。

       是 CP(强一致性)还是AP(可用性)根据业务场景决定。

4.BASE 理论:

        三大特征:基本可用(Basically Available)、软状态(Soft State)、最终一致性(Eventually Consistent)三个特征

        为什么使用base?

        相对于传统ACID(原子性、一致性、隔离性、持久性)事务模型,提供了一种更为宽松和灵活的设计思路。在分布式系统中,由于网络延迟、节点故障等原因,强调ACID特性可能导致系统的可用性和性能受到很大的限制。而采用BASE理论,可以更好地适应分布式环境下的不确定性和容错性要求,提供更高的可用性和扩展性。

      通俗易懂点就是折中,数据的实时性不要求的那么高了,保证服务的一致性,对不一致的数据有补偿的措施。

5.Paxos 算法:

  1. 提案阶段(Prepare Phase):

    • 提议者向接受者发送一个准备请求,称为prepare请求。这个请求包含一个提案编号(proposal number)。每个提案编号都是唯一且递增的。
    • 每个接受者收到prepare请求后,会比较该请求的提案编号与之前收到的最大提案编号。
    • 如果新请求的提案编号大于接受者之前收到的最大提案编号,则接受者将返回一个承诺(promise),表示不再接受小于该提案编号的请求。
  2. 接受阶段(Accept Phase):

    • 如果提议者收到了大多数接受者的承诺,即收到了足够的接受者回复,那么提议者可以发送一个接受请求,称为accept请求。
    • 这个accept请求包含了一个提案值和提案编号。
    • 接受者收到accept请求后,会验证请求中的提案编号是否大于等于之前收到的最大提案编号,并且没有对应的承诺被撤销。
    • 如果通过验证,接受者将接受该提案,并向所有学习者广播接受请求。
  3. 学习阶段(Learn Phase):

    • 学习者收到接受请求后,将学习该提案,并广播给其他节点,以达到整个系统的一致性。
    • 如果一个学习者在接收到足够多的相同提案的接受请求后,可以认为提案已经达成一致。
  4. 总结:Paxos算法通过两个阶段的协商过程,即提案阶段和接受阶段,来保证多个节点最终达成一致的提案。它通过使用提案编号和承诺机制,避免了冲突和竞争条件的发生。最终,通过学习阶段的广播与学习,确保所有节点都达到了相同的最终状态

6.Raft 算法:

       三个角色:领导者(leader)、跟随者(follower)和候选者(candidate)。

  1. 领导者选举阶段(Leader Election Phase):

    • 当一个节点启动或者现任领导者失效时,所有节点都可以成为候选者。
    • 候选者将发送选举请求(election request)给其他节点,要求它们投票支持自己成为新的领导者。
    • 如果候选者得到了大多数节点的投票支持,即获得了绝对多数(majority)的选票,那么它就成为新的领导者。
    • 如果没有候选者获得绝对多数的选票,则重新进行选举。
  2. 日志复制阶段(Log Replication Phase):

    • 在这个阶段中,领导者负责接收客户端的命令请求,并将其转换为日志条目。
    • 领导者向跟随者发送追加条目请求(append entries request),将日志条目复制给跟随者。
    • 跟随者接收到请求后,将日志条目追加到自己的日志中。
  3. 提交与应用阶段(Commit and Application Phase):

    • 当领导者将一条日志条目复制给大多数节点后,它会将该日志条目视为已提交(committed)。
    • 领导者将通知所有节点该已提交的日志条目,并要求其应用到状态机上。
    • 当节点将该已提交的日志条目应用到状态机后,该命令就被执行。

Raft算法通过领导者选举机制、日志复制和提交与应用等机制,确保了分布式系统中的一致性和可靠性。与Paxos算法相比,Raft算法的设计更加直观和易于理解,使得开发人员更容易实现和调试分布式系统。

相关材料:

爆肝七天!终于把分布式系统架构整理出来了_分布式系统架构图_Java架构-大仙的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1018999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Transformer系列】深入浅出理解Transformer网络模型(综合篇)

一、参考资料 The Illustrated Transformer 图解Transformer(完整版) Attention Is All You Need: The Core Idea of the Transformer transformer 总结(超详细-初版) Transformer各层网络结构详解!面试必备!(附代码实现) 大语言…

zemax球差与消球差

基础设置: 效果: 光线光扇图: 可见存在球差(具体分析看我的另一篇文章,专门介绍光线光扇图) 弥散的像: 定量计算赛德尔像差系数: 矫正: 凹凸透镜补偿法、非球面校正球差…

线上论坛之单元测试

对线上论坛进行单元测试的测试报告 源码地址:https://gitee.com/coisini-thirty-three/forum 一、用户部分(UserServiceImplTest) 1.创建普通用户 测试名称 createNormalUser() 测试源码 Test void createNormalUser() { // 构造用户 User …

Linux 系统目录结构 终端

系统目录结构 Linux 或 Unix 操作系统中,所有文件和目录呈一个以根节点为始的倒置的树状结构。文件系统的最顶层是根目录,用 / 来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。如此…

什么是函数式编程(functional programming)?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 函数式编程⭐ 核心概念⭐ 函数式编程示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前…

解决WSL2占用内存过多问题(Docker on WSL2: VmmemWSL)

解决WSL2占用内存过多问题(Docker on WSL2: VmmemWSL) 一、问题描述二、问题解决2.1 创建.wslconfig文件2.2 重启wsl2 一、问题描述 安装完WSL2后,又安装了Docker,使用了一段时间,发现电脑变卡,进一步查看…

voliate实战:voliate可见性验证有序性非原子性验证

一、可见性验证 下面的程序验证了voliate的可见性。 public class VolatileVisibilityTest {private static volatile boolean inintFlag false;public static void main(String[] args) throws InterruptedException {new Thread(() -> {System.out.println("waiti…

Springboot-mybatis创建项目报错day01

problem01 出现springboot引入mbatis-plus依赖单元测试时出现 Error:(3, 44) java: 程序包com.baomidou.mybatisplus.core.mapper不存在。 Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException:异常。 solution 点击右边侧栏Maven的Ge…

在visual studio里安装Python并创建python工程

在2009年,云计算开始发力,Python、R、Go这些天然处理批量计算的语言也迅猛发展。微软在2010年,把Python当成一个语言包插件,集成到了visual studio 2010里。在"云优先,移动优先"的战略下,于2015年…

直方图规定化,计算 SML 映射(数字图像处理大题复习 P3)

文章目录 1. 累计直方图概率2. 累计规定直方图3. 根据累计直方图概率和累计规定直方图 计算 SML 映射4. 计算变化后直方图结果 1. 累计直方图概率 我们最终的目的是从 表 1 变成 表 2 首先我们仍要先求出累计直方图概率 2. 累计规定直方图 把规定直方图抄到下面 然后我们…

Python入门教学——self

1、简介 我们知道在创建类的实例方法时,需要传入一个self,不然就会报错。那么这个self是什么呢?有什么作用呢? def 方法名(self,args): # args为参数pass 在Python类中规定,函数的第一个参数是实例对象本身&#xff…

FreeRTOS进阶-任务管理实践

一、使用接口函数创建任务 1.动态创建 xTaskCreate() 函数原型: BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, // 函数指针, 任务函数 const char * const pcName, // 任务的名字 const configSTACK_DEPTH_T…

渗透测试之漏洞挖掘指南(一)

1.漏洞挖掘中什么漏洞最多? 新手想快速挖掘到漏洞,要专注在业务逻辑与前端漏洞 -- 业务逻辑 (弱密码,等等) -- 前端漏洞 (xss, csrf , cors, jsonp...) 2. 常见漏洞提交平台 注册应急响应中…

投资理财基础知识:指数基金定投是什么?

大家好,我是财富智星,今天跟大家分享一下投资理财基础知识:指数基金定投是什么? 首先,你需要进行理财风险偏好测试,以确定自己的类型。风险偏好一般分为保守型、稳健型、平衡型、进取型和激进型。每个人对风…

C# 实现迷宫游戏

智能提示&#xff1a; /// <summary>/// 迷宫/// </summary>internal class Maze : IDisposable{private MazeCell[,] cells;private readonly Stack<MazeCell> stack new Stack<MazeCell>();private readonly Random rand new Random();private int…

Python 文件写入操作

视频版教程 Python3零基础7天入门实战视频教程 w模式是写入&#xff0c;通过write方法写入内容。 # 打开文件 模式w写入&#xff0c;文件不存在&#xff0c;则自动创建 f open("D:/测试3.txt", "w", encoding"UTF-8")# write写入操作 内容写入…

电脑软件:火绒应用商店功能体验(附下载)

火绒作为国内杀毒软件的一股清流&#xff0c;相信很多电脑爱好者都使用火绒软件作为自己的电脑杀毒软件&#xff0c;火绒杀毒软件的最大特点是软件没有弹窗广告、电脑杀毒可靠、完全免费使用、支持拦截烦人的弹窗广告。今天主要给大家介绍火绒官方内测了一款电脑应用商店独立软…

RK3588平台开发系列讲解(安卓篇)Android12 获取 root 权限

文章目录 一、关闭 selinux二、注释用户组权限检测三、su 文件默认授予 root 权限沉淀、分享、成长,让自己和他人都能有所收获!😄 📢获取Android设备的root权限是指取得超级用户(root用户)的权限,使得用户可以对系统进行更广泛的修改和操作。但需要注意,获取root权限…

VMware Workstation Pro各版本下载安装教程

VMware Workstation Pro下载 打开浏览器&#xff0c;输入VMware Workstation Pro 找到VMware Workstation Pro官网并点击进入&#xff0c;官网地址&#xff1a;https://www.vmware.com/cn/products/workstation-pro.html 进入官网首页后可以下载最新版本的VMware Workstation P…

【JAVA-Day21】序列化和反序列化,学会Java的编解码方法

标题序列化和反序列化&#xff0c;学会Java的编解码方法 序列化和反序列化&#xff0c;学会Java的编解码方法摘要引言一、什么是序列化1.1 序列化的过程 二、什么是反序列化2.1 反序列化的过程 三、为什么要进行序列化和反序列化3.1 主要目的3.2 应用场景 四、总结参考资料 博主…