分布式基础

摘要:汇总整理部分概念和理论...

1. 什么是分布式

        利用物理结构形成多个自治的处理元素,不共享主内存,但是通过发送信息合作。 — Leslie Lamport

2. 分布式的作用

        单体应用的问题

        速度变慢、熟悉项目工作量太大、耦合严重、合并代码冲突多,依赖冲突多

        分布式的好处

        开发、部署速度更快、技术升级空间大、可用性增强、成本低、资源利用率高、单体与分布式对比

传统单体架构分布式架构
项目启动速度
团队规模相对较小相对较大
功能维护成本较高,容易有冲突较低
代码清晰度较差,耦合严重较好
可用性一损俱损,殃及池鱼故障影响范围较小
架构设计难度较低较高

3. CAP定理和Base理论

        我们知道数据库事务的基本特性ACID(即原子性、一致性、隔离性和持久性),用于确保事务的正确执行和数据的完整性。本节来学习下分布式基础理论

3.1 CAP定理

        理论计算机科学中,CAP 定理(CAP theorem)指出对于一个分布式系统来说,当设计读写操作时,只能同时满足以下三点中的两个:

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

注: 分布式系统中,多个节点之间的网络本来是连通的,但是因为某些故障(比如部分节点网络出了问题)某些节点之间不连通了,整个网络就分成了几块区域,这就叫网络分区

当发生网络分区的时候,如果我们要继续服务,那么强一致性和可用性只能 2 选 1。**也就是说当网络分区之后 P 是前提,决定了 P 之后才有 C 和 A 的选择。也就是说分区容错性(Partition tolerance)我们是必须要实现的。简而言之就是:CAP 理论中分区容错性 P 是一定要满足的,在此基础上,只能满足可用性 A 或者一致性 C。

        因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。 比如 ZooKeeper、HBase 就是 CP 架构,Cassandra、Eureka 就是 AP 架构,Nacos 不仅支持 CP 架构也支持 AP 架构。

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

        总结:如果系统发生“分区”,我们要考虑选择 CP 还是 AP。如果系统没有发生“分区”的话,我们要思考如何保证 CA 。

CAP & BASE理论详解 | JavaGuide「Java学习 + 面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。准备 Java 面试,首选 JavaGuide!icon-default.png?t=N7T8https://javaguide.cn/distributed-system/protocol/cap-and-base-theorem.html

3.2 BASE理论

        BASE 理论是对 CAP 中一致性 C 和可用性 A 权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于 CAP 定理逐步演化而来的,它大大降低了我们对系统的要求。

        Base理论的核心:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性,即为保证系统的高可用性牺牲数据的一致性。

        BASE 理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP 中 AP 方案的一个补充。

        BASE理论三要素

        基本可用(Basically Available):分布式系统在出现不可预知故障的时候,允许损失部分可用性(例如响应时间、系统功能的损失),但是这绝不等价于系统不可用

        软状态(Soft-state):允许系统中的数据存在中间状态(CAP 理论中的数据不一致),并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时

        最终一致性(Eventually Consistent):系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性

注:实现最终一致性的方式,读时修复(推荐)、写时修复、异步修复

        总结:ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸。

4. 集群、分布式、微服务的区别

        集群与分布式的区别

        分布式:不同的项目,部署在多个服务器上;集群:同一个项目,部署在多个服务器上。具体的说

  • 分布式是不同的服务器节点完成不同的任务,集群是不同的服务器对外提供一致的服务
  • 分布式就是将一个任务分摊到不同的节点共同完成,这几个节点是协同工作的,存在互相依赖的关系,其中一个挂掉了有可能使得其他节点都不能工作;而集群就是多个节点执行相同的任务,互不干扰,就像饭堂的窗口,每个窗口的职能都是一样的,在哪个窗口都能达到目的,随便关了哪个窗口都可以,只要还有窗口可用,客人就能排队打饭
  • 集群要解决的是可靠性,而分布式的主要工作是分解任务,将职能拆解。
  • 分布式:不同的业务模块部署在不同的服务器上或者同一个业务模块分拆多个子业务,部署在不同的服务器上,解决高并发的问题 ;集群:同一个业务部署在多台机器上,提高系统可用性

        集群与微服务的区别

        集群:分散压力;微服务:分散能力

  • 范围不同:集群是一组计算机节点的集合,用于提供资源共享和协同工作;而微服务是一种软件架构风格,强调将单一应用程序拆分为多个小型、独立部署的服务。
  • 关注点不同:集群关注于基础设施层面,用于提供资源和服务的高可用性和扩展性;微服务关注于应用程序的设计和架构,以实现灵活性、可维护性和可扩展性。
  • 设计理念不同:集群设计是为了提高系统的整体性能和可靠性;微服务设计是为了提高应用程序的灵活性、可维护性和可扩展性,通过解耦和独立部署来实现这些目标。

        微服务和分布式的区别

        微服务是架构设计方式,按照业务垂直拆分;分布式是系统部署方式,拆分后分开部署,就是分布式

  • 目标不同:微服务架构旨在将单个复杂应用程序分解为一系列小型服务,每个服务都专注于特定的业务功能,并独立部署和管理,这些服务通常使用轻量级机制(如HTTP API)进行通信;分布式系统是将计算任务分散到多个计算机或网络上,以提高系统的可扩展性、可靠性,并减少单一节点故障的风险
  • 组成不同:微服务的粒度更细,通常关注单一业务功能或业务流程,并且这些服务可以部署在单个或多个服务器上,而分布式系统的粒度相对较粗,每个子系统可能包含多个功能,负责不同的任务
  • 部署方式不同:微服务的部署更加灵活,可以采用多种方式,包括但不限于分布式、集中式或混合式,而分布式系统通常涉及将应用和数据分散到多个服务器上,以实现负载均衡和高可用性
  • 通信机制不同:微服务之间通常使用HTTP和RESTful API进行通信,这种通信方式具有良好的跨语言和跨平台兼容性,而在分布式系统中,服务之间的通信可能依赖于更底层的协议,如RPC(远程过程调用)或消息队列
  • 数据一致性处理不同:在微服务架构中,每个服务通常负责自己的一部分数据,可以采用最终一致性等较简单的数据一致性处理机制,分布式系统由于数据可能分布在不同的服务中,需要采用特殊的协调机制来确保数据一致性,如分布式事务

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚拟化及Docker基础

一、虚拟化 1.1 云端 1.2 云计算服务模式分层 1.3 虚拟化架构 1.3.1 寄居架构 1.3.2 原生架构 1.4 虚拟化产品 1.4.1 仿真虚拟化产品(对系统硬件没有要求,性能最低) 1.4.2 半虚拟化 (虚拟机可以使用真机物理机&#xff09…

如何训练一个大语言模型(LLMs)

目录 前言大语言模型 Vs机器学习模型训练过程步骤1:数据策划(Data Curation)步骤2:格式化与预处理步骤3:训练模型步骤4:模型评估 LLM Leaderboard[LLM Leaderboard 2024](https://www.vellum.ai/llm-leaderboard)[Open…

ubuntu22.04 CH340/CH34x 驱动安装

CH34x驱动地址:CH341SER_LINUX.ZIP - 南京沁恒微电子股份有限公司 1、卸载旧驱动(如果存在) sudo rmmod ch341.ko 2、解压进入 driver 目录 unzip CH341SER_LINUX.ZIP cd CH341SER_LINUX/driver 3、编译 make 可能错误: make[1]…

搜索策略相关内容

相关参考链接: 理解三个指标:Recall、NDCG、RMSE Ranking算法评测指标之 CG、DCG、NDCG 搜索的评价指标DCG 一、搜索方面的内容 搜索的结构框架 大致可以分为四个部分:搜集、分析、索引和查询。 信息搜集:利用爬虫等技术实时更新、自动获…

震惊!!!OB 居然也卷 OLAP

作者 | JiekeXu 来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT) 如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA) 大家好,我是 JiekeXu,江湖人称“强哥”,很高兴又和大家见面了,今天和大家一起来看看 OB 也卷 OLAP 了…

【MySQL 数据宝典】【线程模型】-IO Thread、Puge Thread介绍

一、 线程模型 多线程模型 InnoDB存储引擎采用多线程模型,其后台运行多个不同的后台线程,每个线程负责处理特定的任务。 后台线程功能 刷新内存池数据: 后台线程负责定期刷新内存池中的数据,以确保缓冲池中的内存缓存保持最新的…

FebHost:科技企业如何规划并注册.AI域名?

为确保企业使用.AI域名的方式准确反映其对人工智能技术的关注,企业应考虑以下步骤: 了解法律和合规要求: 第一步是了解与 .AI 域名相关的独特法律和合规要求。由于.AI域名源于安圭拉,企业必须遵守安圭拉的限制和法律规定。这包括…

搭建MySQL主从结构时的问题

说明:记录搭建MySQL主从结构时遇到的两个问题; 问题一:连接主节点失败 搭建完成后从节点查看状态如下: 错误:error connecting to master admin主机IP - retry-time: 60 retries: 712 message: Host 主机IP is block…

通配符/泛域名SSL证书可以保护多少个域名

通配符/泛域名SSL证书,他可以保护一个主域名和无限个子域名。我们需要了解什么是通配符/泛域名SSL证书。这种证书是一种特殊的数字证书,它允许一个单一的SSL证书被安装在多个服务器上。这是通过使用通配符(*)来实现的,…

关于开设RT-DETR专栏及更新内容的一些说明

​ 专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,助力高效涨点!!! 专栏介绍 YOLOv9作为最新的YOLO系列模型,对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型&#xff0…

项目优化11

QT多线程 发送数据不在主线程里面发送了,用信号槽机制,让数据移动到另一个线程里面去发送 多线程发送视频帧:kernel类里: .cpp

【面试经典 150 | 数组】整数转罗马数字

文章目录 写在前面Tag题目来源解题思路方法一:模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾…

人工智能论文GPT-3(5):2020.5 Language Models are Few-Shot Learners;总结

6 更广泛的影响 语言模型对社会具有广泛的有益应用,包括代码和写作自动完成、语法辅助、游戏叙事生成、提高搜索引擎响应速度和回答问题等。但它们也可能具有潜在的有害应用。GPT-3 提高了文本生成质量和适应性,使得相较于较小的模型更难将合成文本与人…

AI自动生成PPT文档 aippt的API介绍文档

官方链接直达! 产品介绍​ 能力介绍​ AiPPT 是一款智能生成演示幻灯片的在线工具。专业设计团队打造海量模板资源,输入标题即可轻松生成完整的PPT。同时 AiPPT 支持导入多格式文档一键生成 PPT,让 PPT 创作更加高效。聚焦于内容&#xff0…

夜鸦国际服账号验证怎么办 夜鸦国际服账号认证的详细教程

夜鸦国际服账号验证怎么办 夜鸦国际服账号认证的详细教程 今天为大家带来的是《夜鸦》这款游戏,游戏背景是基于13世纪欧洲背景的MMORPG游戏,这款游戏以其沉浸式的游戏体验和流畅的打斗为特色。玩家可以选择战士、剑士、猎人或女巫等角色,体验…

Tensorflow AutoGraph 的作用和功能

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ TensorFlow AutoGraph 是 TensorFlow 中的一个重要特性,它允许开发者使用普通的 Python 语法编写高效的 TensorFlow 图(graph)。这意味着开发者可以利用 Python 的易…

(六)小案例银行家应用程序-删除账号-findindex方法

findindex方法和find方法非常类似,只不过findindex顾名思义,他返回的是index; ● 下面我们使用删除账号的功能来学习一下findindex的 ● 当用户登录成功之后,可以在下方输入自己的用户名和密码,然后提交&#xff0c…

在线音乐播放网站项目测试(selenium+Junit5)

在做完在线音乐播放网站项目之后,需要对项目的功能、接口进行测试,利用测试的工具:selenium以及Java的单元测试工具Junit进行测试,下面式测试的思维导图,列出该项目需要测试的所有测试用例: 测试结果&#…

flink Unsupported operand types: IF(boolean, NULL, String)

问题:业务方存储了NULL 字符串,需要处理为 null select if(anull,null,a); 结果遇到了 Unsupported operand types: IF(boolean, NULL, String),根据报错反馈,很明显应该是没有对 null 自动转换&#xff…

视频教程下载:ChatGPT驱动的SEO、网络营销、生产力提升

用户遇到的一个常见问题是在ChatGPT对话过程中难以保持清晰的目的和专注。这可能导致互动无效和浪费时间。这门课程将教给各种创意人士——艺术家、制造者、博主、讲师和内容创作者——如何制定理想的提示配方,从而产生更有成效的对话和更高的回报。 这是一门关于如…