分布式系统

news2024/11/24 11:56:23

一.分布式理论基础

1.CAP理论

CAP定理是分布式系统中的重要理论,在一个分布式系统中最多只能同时满足一致性(Consistency)可用性(Availability)分区容错性(Partition tolerance)这三项中的两项,不能同时满足这三项。

  • 数据一致性(consistency): 对于客户端的每次读操作,要么读到的是最新的数据,要么读取失败。换句话说,一致性是站在分布式系统的角度,对访问本系统的客户端的一种承诺:要么我给您返回一个错误,要么我给你返回绝对一致的最新数据,不难看出,其强调的是数据正确。
  • 服务可用性(availability): 任何客户端的请求在一定时间内都能得到响应数据,不会出现响应错误。换句话说,可用性是站在分布式系统的角度,对访问本系统的客户的另一种承诺:我一定会给您返回数据,不会给你返回错误,但不保证数据最新,强调的是不出错。
  • 分区容错性(partition-tolerance): 在网络分区的情况下,当任意数量的消息丢失或延迟到达时,系统仍会继续提供服务,不会挂掉。换句话说,分区容忍性是站在分布式系统的角度,对访问本系统的客户端的再一种承诺:我会一直运行,不管我的内部出现何种数据同步问题,强调的是不挂掉。

概念补充

  • Partition (分区):因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区
  • Tolerance(容错):在集群出现分区时,整个系统也要持续对外提供服务

在网络分区的情况下,由于不同子网络之间的通信需要经过路由器或其他网络设备进行转发,因此可能会出现网络拥塞、延迟、丢包等问题

如果是单体应用则可以同时保证CA,P在单体应用是不存在的。对于分布式架构来说则必须保证P,因为分布式系统节点通过网络连接,一定会出现分区问题,分布式系统必须面对网络分区的可能性,即网络延迟、故障、丢包等问题。在这种情况下,一个分布式系统必须能够在网络分区发生时继续运行,即保证系统的分区容错性。因此,P是分布式系统中必须满足的特性

如果选择了 CA 而放弃了 P,那么当发生分区现象时,为了保证 C,系统需要禁止写入,当有写入请求时,系统返回error (例如,当前系统不允许写入),这又和A冲突了,因为A要求返回no error和no timeout。因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构

反证:
如果 CAP 三者可同时满足,由于允许 P 的存在,则一定存在节点之间的丢包,如此则不能保证 C

因为允许分区容错,写操作可能在节点1上成功,在节点2 上失败,这时候对于 Client 1(读取节点1)和 Client2(读取节点2),就会读取到不一致的值,出现不一致的情况。如果要保持一致性,写操作必须同时失败,也就是降低系统的可用性。

2.Base理论

cap理论的一种妥协,由于cap只能二取其一,base理论降低了发生分区容错时对可用性和一致性的要求

  1. 基本可用: 允许可用性降低 ,可能响应延长、可能服务降级(服务降级指的是当某个服务繁忙,不能让客户端的请求一直等待,应该立刻返回给客户端一个备选方案)
  2. 软状态: 指允许系统中的数据存在中间状态,并认为该中间状态不会影响系统整体可用性。比如说下单后加个支付中的中间状态,可以给支付业务提供一个缓冲的时间,一定时间后再变成支付完成的最终状态
  3. 最终一致性:节点数据同步可以存在时延,但在一定的期限后必须达成数据的一致,状态变为最终状态

3.数据一致性模型

  • 强一致性:当更新操作完成之后,任何多个后续进程的访问都会返回最新的更新过的值,这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根据 CAP 理论,这种实现需要牺牲可用性。
  • 弱一致性:系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到。用户读到某一操作对系统数据的更新需要一段时间,我们称这段时间为“不一致性窗口”。
  • 最终一致性:最终一致性是弱一致性的特例,强调的是所有的数据副本,在经过一段时间的同步之后,最终都能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。到达最终一致性的时间,就是不一致窗口时间,在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。

最终一致性模型根据其提供的不同保证可以划分为更多的模型,包括因果一致性和会话一致性等

1.因果一致性:要求有因果关系的操作顺序得到保证,非因果关系的操作顺序则无所谓
进程A在更新完某个数据项后通知了进程 B,那么进程B之后对该数据项的访问都应该能够获取到进程 A更新后的最新值,并且如果进程 B 要对该数据项进行更新操作的话,务必基于进程A更新后的最新值。
在微博或者微信进行评论的时候,比如你在朋友圈发了一张照片,朋友给你评论了,而你对朋友的评论进行了回复,这条朋友圈的显示中,你的回复必须在朋友之后,这是一个因果关系,而其他没有因果关系的数据,可以允许不一致。
2.会话一致性:将对系统数据的访问过程框定在了一个会话当中,约定了系统能保证在同一个有效的会话中实现“读己之所写"的一致性,就是在你的一次访问中,执行更新操作之后,客户端能够在同一个会话中始终读取到该数据项的最新值。实际开发中有分布式的 Session 一致性问题,可以认为是会话一致性的一个应用。

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

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

相关文章

以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取

【硬件环境】 Imx6ul 【Linux kernel版本】 Linux4.1.15 【以太网phy】 Realtek8201f 1.1. 以太网驱动probe流程 1.1 mii_bus初始化以及phy id的获取 然后进行mii的一些初始化fec_enet_mii_init(pdev); 主要是对struct mii_bus这里的成员进行初始化 并且会做注册mdiobus的…

小笔记-简单但够用系列_jupyter notebook 的重新安装问题

文章目录 目的目标步骤 目的 做程序开发时,想到 jupyter notebook 的浏览器交互式执行,决定再次启用放置许久的 jupyter notebook。 但太久没有执行的 jupyter notebook 在打开页面有一旦打开或创建新的 python,就自动报错退出。 使用过往经…

Blender UV展开流程

目录 1. UV1.1 blender默认物体1.2 创建物体1.3 UV参考图1.4 标记缝合边1.5 UV拉伸1.6 孤岛模式 1. UV 1.1 blender默认物体 默认物体已经自动生成UV 在UV编辑工作区,编辑模式,全选物体在左边自动展开UV 在物体数据属性-UV贴图-存在默认的UV贴图&#…

华为OD机试真题B卷 Java 实现【输入整型数组和排序标识,对其元素按照升序或降序进行排序】,附详细解题思路

一、题目描述 输入整型数组和排序标识,对其元素按照升序或降序进行排序 数据范围: 1≤n≤1000 ,元素大小满足 0≤val≤100000 。 二、输入描述 第一行输入数组元素个数;第二行输入待排序的数组,每个数用空格隔开;第三行输入一个整数0或1。0代表升序排序,1代表降序排序…

UOS桌面系统使用RLinux恢复数据

UOS桌面系统使用RLinux恢复数据 一、工具介绍二、注意事项三、准备四、制作live系统启动盘五、拷贝文件六、进入live系统一、工具介绍 R-Linux 是一款用于 Linux 和某些 Unixes 操作系统 Ext2/Ext3/Ext4 FS 文件系统的免费文件恢复实用工具。R-Linux 与 R-Studio 使用相同的 I…

如何使用ArcGIS进行选房分析

无论是城市规划布局研究,还是为自己找一个心仪的住房,都需要综合考虑购物、医疗、教育和休闲等诸多因素,若单纯依靠人力去寻找,十分的麻烦和耗时。 此时ArcGIS强大的分析功能就凸显了出来,我们可以通过空间上的距离关…

chatgpt赋能python:Python中同一键可以对应多个值吗?

Python中同一键可以对应多个值吗? Python是一门简单、易学且功能强大的编程语言,它广泛应用于Web开发、机器学习、数据科学等领域。Python的数据结构中的字典(dictionary)是其中一个非常有用的数据结构,它可以存储键值…

解锁高并发世界:深入探索并发编程和线程池技术的实用指南

《深入理解高并发编程:JDK核心技术》这本书是一本非常实用的编程指南,旨在帮助读者深入理解并发编程和线程池技术。笔者将目录分为两大部分:基础篇、工具篇和线程池技术篇。 这本书提供了广泛的内容覆盖和深入的讲解,适合读者在高并发编程领…

MT8183核心板 MTK8183处理器规格参数

MT8183核心板集成了多项高性能硬件,是一款功耗低、高效能的芯片,可以支持高质量的平板电脑平台设计。该芯片结合了一个八核CPU,其中包括四个Arm Cortex-A73的“大核心”和四个Cortex-A53核心,全部运行速度高达2GHz,还有…

chatgpt赋能python:Python中的//2

Python中的//2 Python是一种广泛使用的动态编程语言,因为它功能强大,易于学习和使用。Python在每个程序员的工具包中占据重要位置,这是因为Python可以用于构建各种应用程序。 本文将讨论Python中的//2运算符,解释其作用和用法&a…

抖音seo源码开发-抖音搜索优化系统-视频批量剪辑系统搭建

抖音seo源码开发,抖音seo开源定制,抖音seo源码交付,抖音seo源码开发是一项重要的技术,可以将您的抖音号排名提升到更高的位置,帮助您吸引更多的关注和粉丝。SEO源码开发需要具备一定的技术和经验,因此建议在…

跨模态检索综述

跨模态检索问题的描述 图1:跨 模 态 检 索 的 形 式 。 跨 模 态 检索 允 许 查 询 样 例 和 候 选 对 象 属 于 不 同 模 态 的 数 据 , 比 如 图 像搜索文本 , 文 本 搜 索 视 频 等 , 这 种 灵 活 多 变 的 检索方 式 能 够 满…

2023 年 PMP 考试难不难?

PMP 真的不难,目前的考试都只有选择题,往后可能会增加别的题型(2023,8 月份启用第七版教材), 加入了很多 ACP 敏捷管理的内容,而且 敏捷混合题型占到了 50%。 我从新考纲考完下来,最开始也被折…

【计算机组成原理】第八章 输入输出系统

系列文章目录 第一章 计算系统概论 第二章 运算方法和运算器 第三章 多层次的存储器 第四章 指令系统 第五章 中央处理器 第六章 总线系统 第七章 外围设备 第八章 输入输出系统 文章目录 系列文章目录前言第八章 输入输出系统8.1外围设备的定时方式和信息交换方式8.2程序查询…

33.C++函数重载

今天进行了新的学习。 目录 1.什么是函数重载? 2.函数重载的规则 代码演示: 分析: 3.为什么C能进行函数重载 例如: 调用约定: 4.extern关键字 1.什么是函数重载? 在同一个作用域内&#xff0c…

Nodejs安装以及环境变量配置

Nodejs安装以及环境变量配置 1.下载Nodejs1.1最新版下载1.2历史版本下载 2.安装3.验证4.环境变量配置5.npm下载设置6.测试6.设置国内镜像提高下载速度 1.下载Nodejs 1.1最新版下载 直接官网下载:https://nodejs.org/zh-cn/download 根据自己的需求,选择…

关于两个项目用的不是同一个node的解决 办法

问题描述: 两个前端项目,使用的不是同一个版本的node 和npm ,导致总有一个项目启动不了,如何解决这个问题呐? 解决工具: nvm:node 版本管理器,也就是说:一个 nvm 可以管理…

Dubbo高可用

1.zookeeper宕机与dubbo直连 1.1.现象:zookeeper注册中心宕机,还可以消费dubbo暴露的服务。 原因: 监控中心宕掉不影响使用,只是丢失部分采样数据数据库宕掉后,注册中心仍能通过缓存提供服务列表查询,但…

常见的Linux发行版配置要求到底有多低?

常见的Linux发行版配置要求主要包括以下几个方面: 处理器: 一般来说,64位的Linux发行版需要至少2GHz的CPU速度,对于较老的处理器,可以选择使用32位的Linux发行版。 内存: Linux发行版通常需要至少1GB的…

AdaIN

AdaIN的全名是Adaptive Instance Normalization,源自风格迁移的论文Arbitrary Style Transfer in Real-time with Adaptive Instance Normalization 假设原图和风格图经过VGG进行特征提取后得到shape分别为CxHxW和CxH‘xW’的特征图c和s,AdaIN的计算如…