【分布式系统】分布式系统架构的冰与火

news2025/1/24 11:34:30

什么是分布式系统

分布式系统(distributed system)是建立在网络之上的软件系统。

以上是摘自百度百科的解释,不可否则,分布式系统的基础是网络、计算、存储。比如常见的一个Web单体系统,其实也是一个分布式系统,因为从客户端到Web端以及存储MySQL层,其实就涉及到了不同的服务器进行计算、存储,而具体的形式可能是不一样的。主从MySQL也是分布式系统等等,但是从传统定义上来看,分布式系统其实可能有不同的形态。

分布式和集群的区别
分布式:多台机器提供不同的任务。集群:多台机器提供相同的任务。
比如我们有3台机器,3台机器分别部署了用户服务,那么就是集群模式,但是3台机器同时也部署了订单系统以及相关的支付、库存系统,那么整个架构就是分布式架构,因为用户->订单->库存->支付构成了整体,大多数的时候都是分布式和集群模式混合在一起。

为什么需要分布式系统

  • 增大系统的容量
    当我们的业务量逐渐增大,单机所能承受的QPS、TPS是有一定上限的,所以为了从计算和存储两个层面,通过多台机器来支持应对更大的应用场景。

  • 提高系统的稳定性
    单机系统是必定存在单点故障的,为了保证高可用,所以需要进行分布式架构冗余来提升可用性。

  • 系统的可拓展性
    通过将系统进行拆分,多个系统的可拓展性会提交,并且可能会随着不同的组件模块、多个系统之间可以直接重用,比如用户中心,存储等。

分布式系统的冰火

在这里插入图片描述
在软件系统中,都是按起葫芦起了瓢,虽然可以通过引入分布式系统来解决上述单体架构的问题,但是分布式也引入了一系列相关问题。这可能就是trade-off的艺术。正所谓冰火不相容。

分布式系统带来的问题

  • 架构设计变的复杂,分布式事务(电商系统 下订单-库存-支付不同的系统 如何保证业务数据的一致性)
  • 部署层面,部署一个服务比较简单,但是如何部署多个服务。
  • 响应时间变长,一个单独的服务A,直接操作存储,缓存 消息队列等,但是如果A 拆分成(B、C、D)其中必定有一定的网络耗时,(http/RPC)
  • 测试和排查问题 复杂度提高,需要依赖上下游系统进行排查。
  • 分布式系统中服务调度更加困难和复杂
  • 分布式网络的不可靠,网络延迟以及时钟问题。

总结:分布式带来了系统设计,管理,运维,测试,部署等问题。这就是为什么会出现各种分布式技术的原因,比如事务、锁、以及相关的分布式存储、计算(服务注册发现等)等技术。

分布式系统的难点

  • 异构系统的不标准
  • 系统架构中服务依赖性问题
  • 故障发生的概率更大
  • 多层架构的运维复杂度更大

分布式系统的发展

在这里插入图片描述
从90年的单体系统到20年的SOA以及10年之后大火的微服务。

分布式系统的技术栈

构建分布式系统的目的就是为了提高系统容量,增加系统可用性。

  • 大流量处理:通过集群把大流量的请求分散负载到不同的机器上
  • 关键业务保护:提高系统的的可用性,防止出现多米诺骨牌效应,通过限流,降级等手段来保证核心业务的正常运转。

总结:提高整体架构的吞吐量,服务更多的并发和流量。而是提高系统的稳定性,让系统的可用性更高。

a.提高架构的性能

在这里插入图片描述

  • 缓存
    从客户端、CDN、网关、服务端、内存、数据库、文件系统、磁盘和CPU 都可以通过加缓存,来提高访问的速度。
  • 负载均衡
    水平拓展的技术,通过将用户请求分发到不同的机器上来承担一部分用户流量
  • 异步调用
    主要通过消息队列来实现,将前段的请求的峰值给肖平,后端按照自己的速度进行处理请求,增加系统的吞吐量,但是实时性就比较差。但是消息队列带来了消息丢失,重复消费,消息挤压等问题。
  • 数据分区/镜像
    数据分区是通过将数据按照某种维度进行划分,比如地理上,请求最近的数据,但是join和跨库的事务操作复杂度比较高。而数据镜像则是通过将数据拷贝一份,然后任意节点上都可以读写,内部自行同步数据,最大问题就是数据一致性问题。

缓存是提高读的性能,而异步调用是提高写的性能,负载均衡技术主要是通过服务冗余将流量进行分担,在分布式架构中,数据存储是一个重中之重,而一般要么就是使用镜像/复制技术,将数据进行拷贝,读写分离,另一种就是将数据分成多片,每片存储在不同服务器上,这样可以横行提高数据读写能力

b.提高架构的稳定性

在这里插入图片描述

  • 服务拆分
    服务拆分的目的主要是两个,一是隔离故障,二是提高重用性。但是拆分后会引来服务之间依赖通信问题
  • 服务冗余
    去除单点故障,支持服务的弹性伸缩,以及故障迁移。具体形式可能是主备、主从。
  • 限流降级
    当系统是在扛不住压力的时候,需要通过限流或者降级的方式来保证核心业务的正常运转,属于技术保护的措施。
  • 高可用架构
    通常来说高可用架构是从冗余架构的角度来保证可用性,多租户隔离,容灾备份(异地多活/同城多机房、跨城多机房、跨国多机房),或者数据可以在复制保持一致性的集群。
  • 高可用运维
    DevOps中的CI/CD(持续集成、持续部署)一个流程的软件发布流程,足够的自动化测试,相应的灰度发布,线上系统的自动化控制。

c.分布式系统的关键技术

虽然引入分布式可以解决一定的问题,但是也带来了一堆技术问题

  • 服务治理
    服务拆分、服务调用、服务发现、服务依赖。关键在于对服务调用链路,依赖关系给梳理出来,并对这些服务进行性能和可用性方面的管理
  • 软件架构管理
    服务之间有依赖关系,有兼容性问题,所以整体服务所形成的架构需要有架构版本管理,整体架构的生命周期管理,以及对服务的编排,聚合,事务处理等服务调度功能
  • DevOps
    分布式服务可以快读的部署,但是对测试和运维是一个挑战,包括环境构建、持续集成、持续部署等
  • 自动化运维
    对服务进行自动伸缩、故障迁移、配置管理、状态管理等一系列自动化运维技术了
  • 资源调度管理
    应用层的 计算 网络 存储
  • 整体架构监控
    监控是眼睛,需要对 应用层、中间件层、基础层进行监控
  • 流量控制
    负载均衡、服务路由、熔断、限流、降级都和流量相关的调度,以及灰度发布等。

d.分布式系统的纲

分布式五个关键技术

  • 全栈系统监控
  • 服务、资源调度
  • 流量调度
  • 状态、数据调度
  • 开发和运维的自动化

在这里插入图片描述

小结

请添加图片描述

以上是我整理的分布式技术栈思维图,基本上可以分为几个主题

  • 分布式理论基础
    • ACID、CAP、BASE、FLP
  • 分布式共识算法
    • 两将军、拜占庭将军
    • Paxos、Raft、ZAB、Gossip
  • 分布式存储
    • 分区、复制、一致性模型
    • 分布式事务
  • 分布式计算
    • 注册发现、负载均衡、配置中心、分布式锁、重试幂等、雪崩、故障恢复,监控、部署
  • 高性能架构设计
    • 缓存、负载均衡、异步、数据镜像、分区
  • 高可用架构设计
    • 弹力设计篇: 故障和弹力设计、隔离设计、异步通讯设计、幂等&重试&补偿、熔断、限流、降级、排队
    • 异地多活
    • 存储、计算高可用:主从、主备
    • 高可用运维
  • 可拓展架构设计
    • 分层、SOA、微服务、微内核
  • 软件设计
    • 编程范式
    • 软件设计原则
      • SOLID原则
    • 设计模式
    • 设计方法
  • 中间件
    • 关系型数据库:MySQL,Sharding-JDBC
    • NoSQL:Redis、MongDB、ES
    • 消息队列:Kafka、RabbitMQ、RocketMQ
    • RPC:Dubbo、GRpc
    • 注册中心 :Zookeeper、Consul
    • 网关/代理:Nginx、LVS
    • 定时任务:Xxl-job
    • 日志采集:ELK
    • 配置中心:Apollo
    • 分布式链路追踪:Jeger、CAT、SkyWalking

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

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

相关文章

Android监听消息(二)——电话及短信监听

学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为2747字,预计阅读6分钟 前言 前面一篇《Android监听消息(一)——应用消息捕获》我们使用NotificationListenerService实现了应用的消息监听,但是电话和短信是…

【花雕学AI】爆款ChatGPT的核心算法和技术逻辑到底是什么?

一、ChatGPT是一种基于GPT模型的聊天机器人 由OpenAI研究中心开发,于2022年11月30日发布。它可以根据用户的输入,生成自然、流畅、有趣的对话回复。它的技术逻辑主要是利用大规模的预训练语言模型(LLM),通过Transforme…

总结823

学习目标: 4月(复习完高数18讲内容,背诵21篇短文,熟词僻义300词基础词) 学习内容: 暴力英语:早上1.5小时背单词,背了两篇文章,之后抄写5篇文章。晚上做了一道长难句。 …

CAN-FD协议

总目录链接>> AutoSAR入门和实战系列总目录 总目录链接>> AutoSAR BSW高阶配置系列总目录 文章目录 CAN-FD协议**CAN-FD协议需要什么?**CAN-FD 协议的属性CAN-FD 协议中的安全性 OSI 层中的 CAN-FD**CAN-FD物理层设计**CAN-FD 数据链路层数据链路层…

【2023】cookie是什么?有什么用?一篇文章彻底搞懂cookie

一个不大不小的问题 假设服务器有一个接口,通过请求这个接口,可以添加一个管理员 但是,不是任何人都有权力做这种操作的 那么服务器如何知道请求接口的人是有权力的呢? 答案是:只有登录过的管理员才能做这种操作 …

一天掌握C51单片机基础1-计算机数值与MCS51单片机

目录 简介计算机的数值表示源码反码补码 MCS51 单片机型号与构成存储结构外部引脚与总线接口并行 IO 口工作原理工作周期 简介 本笔记参考B站高宏亮老师的教学视频:点击观看 计算机的数值表示 源码 正数:首位 0,其余七位表示实际数值 负数&…

Java内存模型JMM

大厂面试题? 你知道什么是java内存模型JMM吗? JMM和Volatile它们两个之间的关系? JMM有哪些特性和他的三大特性是什么? 为什么要有JMM,他为什么出现?作用和功能是什么? happens-before先行发…

如何用jmeter+ant+jenkins搭建一个接口自动化测试框架?

目录 前言 一、什么是Jmeter? 二、什么是Ant? 三、什么是Jenkins? 四、如何构建一个JmeterAntJenkins的接口自动化测试框架? 五、JmeterAntJenkins接口自动化测试框架的优势和特点 六、总结 前言 Jmeter是一款功能强大的开…

陪诊小程序开发|陪诊软件开发功能特色

为了提升就医的服务质量,人们对于医疗服务的需求也在不断提高。这几年随着生活水平和医疗水平的提升,陪诊服务越来越受到人们的重视和青睐,越来越多的人开始意识到,陪伴和关爱在疾病治疗过程中的重要性,为了更好的规划…

Python数据结构与算法-贪心算法(一)

一、贪心算法 1、定义 贪心算法(贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所作出的是在某种意义上的局部最优解。 贪心算法并不保证会得到最优解,但是在某些…

debian 10 安装prometheus 2.37.6 配置rc.local自启动

debian 10 安装prometheus 2.37.6 配置rc.local自启动 1、下载安装包2、安装3、访问普罗米修斯4、加入开机自启动4.1、配置rc-local.service4.2、添加自定义启动命令4.3、查看rc-local.service 1、下载安装包 https://prometheus.io/download/ wget -c https://github.com/pro…

人工智能前沿——「小海带」超全视觉注意力机制资源分享(附下载链接)

📚📚 人工智能 | 计算机视觉 —— 致力于目标检测领域科研Tricks改进与推荐 | 主要包括主干网络改进、轻量化网络、注意力机制、检测头部改进、空间金字塔池化、损失函数及NMS改进、ICCV/CVPR/ECCV视觉顶会创新点改进、各类数据集资源分享以及算法训练相…

Serge让你在本地运行LLaMa模型

什么是 Serge ? Serge 是基于 llama.cpp 运行 Alpaca 模型的聊天界面。完全自托管,不需要 API 密钥。适合 4GB RAM 并且能在 CPU 上运行。 什么是 LLaMA ? LLaMA 是一种机器学习算法,全称为 Laplacian Regularized Least Squares for Multip…

windows安装mysql详解

目录 1. mysql下载2. 添加环境变量3. 添加配置文件4. 初始化 data 目录5. 安装启动服务6. 修改密码 1. mysql下载 mysql官网:https://www.mysql.com/downloads/ MySQL Community Server:MySQL数据库的服务端,MySQL的核心,只下载它…

FISCO BCOS(三十四)———商品溯源(智能合约+后端)

FISCO BCOS(三十四)———商品溯源(智能合约+后端) 一、智能合约函数调用流程 注:智能合约来源(官网的合约仓库中) 但是TraceabilityFactory合约有问题,我已经做了修改,可以看原版与我的,只有一个函数不同。 官网上这套合约在TraceabilityFactory这个合约上缺少getGo…

Springboot信息泄露以及heapdump的利用

本文转载于https://blog.csdn.net/weixin_44309905/article/details/127279561 heapdump的利用 0x01 Springboot信息泄露 路由列表 0x02 下载heapdump0x03 利用heapdump的姿势 工具一:heapdump_tool工具二:Eclipse MemoryAnalyzer 0x01 Springboot信息…

【C++11】关于C++11新特性简介

目录 一、关于C11的简介 二、统一的列表初始化 2.1 {}初始化 2.2 std::initializer_list 三、声明 3.1 auto 3.2 decltype 3.3 nullptr 四、范围for循环 五、C11中STL的一些变化 一、关于C11的简介 在2003年 C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff…

“分割一切”大模型SAM、超轻量PP-MobileSeg、工业质检工具、全景分割方案,PaddleSeg全新版本等你来体验!

图像分割是计算机视觉的一项基础技术,其目标是将图像中的像素按内容分成不同的类别。它在许多领域有重要应用,比如自动驾驶、工业质检、医疗图像分析、遥感图像解译等。 导读 PaddleSeg 是飞桨高性能图像分割开发套件,在图像分割领域做了大…

分类预测 | MATLAB实现BO-CNN-BiLSTM贝叶斯优化卷积双向长短期记忆网络多输入分类预测

分类预测 | MATLAB实现BO-CNN-BiLSTM贝叶斯优化卷积双向长短期记忆网络多输入分类预测 目录 分类预测 | MATLAB实现BO-CNN-BiLSTM贝叶斯优化卷积双向长短期记忆网络多输入分类预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 基本介绍 MATLAB实现BO-CNN-BiLSTM贝叶斯优…

上海车展:深蓝汽车首次亮相,全场景电动出行实力圈粉

4月18日,2023上海国际车展如约而至。 作为疫情结束后的首个国际车展,本届上海车展自然吸睛无数,光是首个媒体日进场时的阵仗,就让无数媒体人高呼“人潮汹涌”。 而在本次参展的众多汽车品牌中,刚刚成立一周年的深蓝汽车…