【分布式架构理论2】分布式架构要处理的问题及解决方案

文章目录

      • 1. 应用服务拆分
      • 2. 分布式调用
      • 3. 分布式协同
      • 4. 分布式计算
      • 5. 分布式存储
      • 6. 分布式资源管理与调度
      • 7. 高性能与可用性优化
      • 8. 指标与监控

将分布式架构需要解决的问题按照顺序列举为如下几步

问题分类具体内容
应用服务拆分分布式是用分散的服务和资源代替集中的服务和资源,所以先根据业务进行应用服务拆分。
分布式调用、协同与计算- 由于服务分布在不同的服务器和网络节点上,所以要解决分布式调用的问题。
- 服务能够互相感知和调用以后,需要共同完成一些任务,因此需要解决分布式协同问题。
- 在协同工作时,会遇到大规模计算的情况,需要考虑使用多种分布式计算的算法来应对。
分布式存储、资源管理与调度- 任何服务的成果都需要保存下来,这就要考虑存储问题。和服务一样,存储的分布式也可以提高存储的性能和可用性,因此需要考虑分布式存储的问题。
- 所有的服务与存储都可以看作资源,因此需要考虑分布式资源管理和调度。
服务的高性能与高可用、与监控- 设计分布式架构的目的是实现高性能和可用性。为了达到这个目的,一起来看看高性能与可用性的最佳实践,例如缓存的应用、请求限流、服务降级等。
- 系统上线以后需要对性能指标进行有效的监控才能保证系统稳定运行,此时指标与监控就是我们需要关注的问题。

1. 应用服务拆分

分布式架构的第一步是应用服务的拆分。合理的拆分方式能够确保系统的高可用性和可扩展性,而拆分过细或过粗都会带来额外的复杂度。为此,领域驱动设计(DDD)提供了一种有效的方法,它通过领域建模、限界上下文划分等方式,确保服务的高内聚、低耦合。
 

2. 分布式调用

针对调用的问题,在不同架构层面有不同的处理方式:

  • 在用户请求经过互联网进入应用服务器之前,需要通过负载均衡和反向代理;
  • 在内网的应用服务器之间需要 API 网关调用;ing
  • 服务与服务之间可以通过服务注册中心、消息队列、远程调用等方式互相调用。

可以将分布式调用总结为两部分,第一部分是感知对方,包括负载均衡、API 网关、服务注册与发现、消息队列;第二部分是信息传递,包括 RPC、RMI、NIO 通信。

常见的分布式调用方式包括:

  • 负载均衡:如 Nginx、F5,确保请求均匀分配到不同的服务实例。
  • API 网关:如Spring Cloud Gateway,用于统一管理和路由 API 请求。
  • 服务注册与发现:如 Eureka、Consul,动态管理服务实例。
  • 远程调用:采用 RPC、RMI、消息队列等方式,实现跨服务通信。

 

3. 分布式协同

多个分布式服务在处理同一业务时,需要协调工作,避免数据不一致和资源竞争。解决方案包括:

  • 分布式锁:如 Redis 锁、ZooKeeper 实现的互斥锁,确保临界资源的独占性
  • 分布式事务:包括 2PC(两阶段提交)、TCC(Try-Confirm-Cancel)等事务控制机制。
  • 分布式选举:如 Bully 算法、Raft 算法,实现主从数据库切换等场景的选主机制。

4. 分布式计算

在大数据和高计算需求场景下,分布式计算提供了高效的处理能力。主要计算模式包括:

  • MapReduce:适用于批量静态数据计算,常见框架有 Hadoop。
  • Stream 计算:适用于实时数据流计算,常见工具有 Apache Storm、Flink。
     

5. 分布式存储

分布式存储涉及数据的持久化与管理,需要考虑存储均衡、故障恢复和扩展性。主要技术方案包括:

  • 分布式数据库:MySQL 分库分表、主从复制等。
  • 分布式缓存:如 Redis Cluster,实现缓存分片,提高访问性能。
  • 分布式文件存储:如 HDFS、Ceph,适用于大规模数据存储。
     

6. 分布式资源管理与调度

操作系统的进程调度和分布式系统的资源调度在处理并发计算任务时,都是为了解决有限的资源(如 CPU、内存、存储等)如何合理分配给多个任务的问题。

  • 操作系统的进程调度:在单核 CPU 的情况下,操作系统通过调度算法(如时间片轮转)在多个进程之间快速切换,使得它们看起来几乎是同时执行的。进程调度属于微观调度,它关注的是如何在有限的 CPU 时间片内高效管理和调度进程。

  • 多核 CPU 和并发处理:随着技术发展,单核 CPU 的瓶颈被突破,进入了多核 CPU 的时代。多核 CPU 通过在不同的核心上并行执行任务来提高性能,操作系统的调度算法需要适应这种硬件的变化,合理分配任务到不同的核心上。

  • 分布式系统的资源调度:为了进一步扩展计算能力,分布式系统通过水平扩展,将资源分配到多个服务器和网络节点上。这些节点拥有独立的 CPU、内存、硬盘等资源,任务需要跨多个节点进行调度和协调。分布式系统调度更加复杂,需要考虑节点之间的通信、负载均衡、容错性等因素。

综上,操作系统和分布式系统的调度虽然在不同层次和范围上进行,但核心目标一致:如何在有限的资源下,最有效地处理并发计算任务,提高系统整体性能。

 

资源管理和调度决定了系统的计算效率。常见调度架构包括:

  • 中心化调度:由单个调度中心统一管理资源。
  • 两级调度:资源管理层与任务调度层分离,提高调度灵活性。
  • 共享状态调度:如 Kubernetes 共享任务状态,实现高效调度。

 

7. 高性能与可用性优化

提升分布式系统性能的关键在于缓存和高可用策略。

  • 缓存优化:使用 HTTP 缓存、CDN、分布式缓存等方式加快数据访问。
  • 可用性策略:采用限流(Rate Limiting)、熔断(Circuit Breaker)、降级(Fallback)等方式,提高系统稳定性。

 

8. 指标与监控

判断一个架构是好是坏时,有两个参考标准,即性能指标和可用性指标,分布式架构也是如此。性能指标又分为吞吐量、响应时间和完成时间。由于系统的分布性,服务会分布到不同的服务器和网络节点,因此监控程序需要在不同的服务器和网络节点上对服务进行监控。

监控系统确保分布式架构的稳定运行,主要包括:

  • 性能指标:如吞吐量、响应时间、错误率、系统负载。
  • 监控系统:Zabbix、Prometheus、ELK(Elasticsearch + Logstash + Kibana),用于收集和分析系统状态。

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

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

相关文章

【PyQt】pyqt小案例实现简易文本编辑器

pyqt小案例实现简易文本编辑器 分析 实现了一个简单的文本编辑器,使用PyQt5框架构建。以下是代码的主要功能和特点: 主窗口类 (MyWindow): 继承自 QWidget 类。使用 .ui 文件加载用户界面布局。设置窗口标题、状态栏消息等。创建菜单栏及其子菜单项&…

Unity中的虚拟相机(Cinemachine)

Unity Cinemachine详解 什么是Cinemachine Cinemachine是Unity官方推出的智能相机系统,它提供了一套完整的工具来创建复杂的相机运动和行为,而无需编写大量代码。它能够大大简化相机管理,提高游戏开发效率。 Cinemachine的主要组件 1. Vi…

【PyQt】getattr动态访问对象的属性

问题 使用qtdesigner设计好大体的软件结构,需要使用代码进行批量修改控件样式,self.ui.x 会被解释为访问 self.ui 中名为 x 的属性,而不是将 x 作为变量名来解析,此时需要通过字符串动态访问 self.ui 中的按钮对象 for i in range(20):x f…

【电脑系统】电脑突然(蓝屏)卡死发出刺耳声音

文章目录 前言问题描述软件解决方案尝试硬件解决方案尝试参考文献 前言 在 更换硬盘 时遇到的问题,有时候只有卡死没有蓝屏 问题描述 更换硬盘后,电脑用一会就卡死,蓝屏,显示蓝屏代码 UNEXPECTED_STORE_EXCEPTION 软件解决方案…

DEEPSEKK GPT等AI体的出现如何重构工厂数字化架构:从设备控制到ERP MES系统的全面优化

随着深度学习(DeepSeek)、GPT等先进AI技术的出现,工厂的数字化架构正在经历前所未有的变革。AI的强大处理能力、预测能力和自动化决策支持,将大幅度提升生产效率、设备管理、资源调度以及产品质量管理。本文将探讨AI体&#xff08…

【大模型LLM面试合集】大语言模型架构_Transformer架构细节

Transformer架构细节 1.Transformer各个模块的作用 (1)Encoder模块 经典的Transformer架构中的Encoder模块包含6个Encoder Block. 每个Encoder Block包含两个⼦模块, 分别是多头⾃注意⼒层, 和前馈全连接层. 多头⾃注意⼒层采⽤的是⼀种Scaled Dot-Pr…

【华为OD-E卷 - 113 跳格子2 100分(python、java、c++、js、c)】

【华为OD-E卷 - 跳格子2 100分(python、java、c、js、c)】 题目 小明和朋友玩跳格子游戏,有 n 个连续格子组成的圆圈,每个格子有不同的分数,小朋友可以选择以任意格子起跳,但是不能跳连续的格子&#xff…

订单状态监控实战:基于 SQL 的状态机分析与异常检测

目录 1. 背景与问题 2. 数据准备 2.1 表结构设计 3. 场景分析与实现 3.1 场景 1:检测非法状态转换

说一下JVM管理的常见参数

Java虚拟机&#xff08;JVM&#xff09;有许多常见参数&#xff0c;用于控制其行为和性能。以下是一些常见的JVM参数及其说明&#xff1a; 1. 内存管理参数 -Xms<size> START 设置初始堆内存大小。例如&#xff0c;-Xms512m表示初始堆大小为512MB。 -Xmx<size>…

验证工具:GVIM和VIM

一、定义与关系 gVim&#xff1a;gVim是Vim的图形界面版本&#xff0c;提供了更多的图形化功能&#xff0c;如菜单栏、工具栏和鼠标支持。它使得Vim的使用更加直观和方便&#xff0c;尤其对于不习惯命令行界面的用户来说。Vim&#xff1a;Vim是一个在命令行界面下运行的文本编…

4 HBase 的高级 shell 管理命令

4 HBase 的高级 shell 管理命令 1.status 例如&#xff1a;显示服务器状态 hbase(main):058:0> status node012.whoami 显示 HBase 当前用户&#xff0c;例如&#xff1a; hbase> whoami3.list 显示当前所有的表 hbase> list4.count 统计指定表的记录数&#xff0c…

Web - CSS3基础语法与盒模型

概述 这篇文章是关于 Web 前端 CSS3 的基础语法与盒模型的讲解。包括 CSS3 层叠性及处理冲突规则、伪元素和新增伪类元素、属性选择器等。还介绍了文本与字体属性&#xff0c;如段落和行相关属性、字体文本属性。最后阐述了盒子模型&#xff0c;如元素隐藏、行内与块元素转换、…

国防科大:双目标优化防止LLM灾难性遗忘

&#x1f4d6;标题&#xff1a;How to Complete Domain Tuning while Keeping General Ability in LLM: Adaptive Layer-wise and Element-wise Regularization &#x1f310;来源&#xff1a;arXiv, 2501.13669 &#x1f31f;摘要 &#x1f538;大型语言模型&#xff08;LLM…

Verilog基础(一):基础元素

verilog基础 我先说,看了肯定会忘,但是重要的是这个过程,我们知道了概念,知道了以后在哪里查询。语法都是术,通用的概念是术。所以如果你有相关的软件编程经验,那么其实开启这个学习之旅,你会感受到熟悉,也会感受到别致。 入门 - 如何开始 欢迎来到二进制的世界,数字…

一次线程数超限导致的hive写入hbase作业失败分析

1.集群配置 操作系统:SuSe操作系统 集群节点:100台相同配置的服务器 单台:核心112Core,内存396G 2.问题现象 现象1:跑单个入库任务报错,批量提交任务后出现OOM异常 执行12个hivesql,将数据写入hbase.hbase入库有近一半的任务报错。 每次报错的任务不是同一个,hivesql…

优化fm.jiecao.jcvideoplayer_lib中视频横竖屏自动适配原视频方案

fm.jiecao:jiecaovideoplayer:x.x.x 优化fm.jiecao.jcvideoplayer_lib中视频横竖屏自动适配原视频方案&#xff1a; 仅优化关键代码部分&#xff0c;源码&#xff1a; public void startWindowFullscreen() {Log.i(TAG, "startWindowFullscreen " " [" …

多无人机--强化学习

这个是我对于我的大创项目的构思&#xff0c;随着时间逐渐更新 项目概要 我们的项目平台来自挑战杯揭绑挂帅的无人机对抗项目&#xff0c;但是在由于时间原因&#xff0c;并未考虑强化学习&#xff0c;所以现在通过大创项目来弥补遗憾 我们项目分为三部分&#xff0c;分为虚…

工业相机常用词语解释

线阵相机和面阵相机&#xff1a; 线阵相机&#xff0c;是采用线阵图像传感器的相机。线阵图像传感器以CCD为主&#xff0c; 一行的数据可以到几K甚至几十K&#xff0c;但是高度只有几个像素&#xff0c;行频很高&#xff0c;可以到每秒几万行&#xff0c;适合做非常高精度、宽…

2501,编写dll

DLL的优点 简单的说,dll有以下几个优点: 1)节省内存.同一个软件模块,若是源码重用,则会在不同可执行程序中编译,同时运行这些exe时,会在内存中重复加载这些模块的二进制码. 如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,每个进程会复制一份的d…

Python----Python高级(并发编程:进程Process,多进程,进程间通信,进程同步,进程池)

一、进程Process 拥有自己独立的堆和栈&#xff0c;既不共享堆&#xff0c;也不共享栈&#xff0c;进程由操作系统调度&#xff1b;进程切换需要的资源很最大&#xff0c;效率低。 对于操作系统来说&#xff0c;一个任务就是一个进程&#xff08;Process&#xff09;&#xff…