【分布式架构理论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.rhkb.cn/news/13102.html

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

相关文章

哪些专业跟FPGA有关?

FPGA产业作为近几年新兴的技术领域,薪资高、待遇好,吸引了大量的求职者。特别是对于毕业生,FPGA领域的岗位需求供不应求。那么,哪些专业和FPGA相关呢? 哪些专业跟FPGA有关? 微电子学与固体电子学、微电子科…

pytorch实现门控循环单元 (GRU)

人工智能例子汇总:AI常见的算法和例子-CSDN博客 特性GRULSTM计算效率更快,参数更少相对较慢,参数更多结构复杂度只有两个门(更新门和重置门)三个门(输入门、遗忘门、输出门)处理长时依赖一般适…

【大数据技术】搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn)

搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) jdk-8u361-linux-x64.tarhadoop-3.3.6.tar.gz注:请在阅读本篇文章前,将以上资源下载下来。 写在前面 本文主要介绍搭建完全分布式高可用集群Hadoop+MapReduce+Yarn的详细步骤。 注意: 统一约定将软件安装包存放…

移动机器人规划控制入门与实践:基于navigation2 学习笔记(一)

课程实践: (1)手写A*代码并且调试,总结优缺点 (2)基于Gazebo仿真,完成给定机器人在给定地图中的导航调试 (3)使用Groot设计自己的导航行为树 掌握一门技术 规划控制概述 常见移动机器人

两种文件类型(pdf/图片)打印A4半张纸方法

环境:windows10、Adobe Reader XI v11.0.23 Pdf: 1.把内容由横排变为纵排: 2.点击打印按钮: 3.选择打印页范围和多页: 4.内容打印在纸张上部 图片: 1.右键图片点击打印: 2.选择打印类型: 3.打印配置&am…

JS-对象-BOM

BOM 概念:Browser Object Model 浏览器对象模型,允许|avaScript与浏览器对话,JavaScript 将浏览器的各个组成部分封装为对象 组成: Window : 浏览器窗口对象 Navigator : 浏览器对象 Screen : 屏幕对象 History : 历史…

Pytest+selenium UI自动化测试实战实例

今天来说说pytest吧,经过几周的时间学习,有收获也有疑惑,总之最后还是搞个小项目出来证明自己的努力不没有白费。 环境准备 1 确保您已经安装了python3.x 2 配置python3pycharmselenium2开发环境 3 安装pytest库pip install p…

Linux中的基本指令(二)

一、移动和重命名指令mv 1.1基本作用及使用规范 基本作用是进行文件的移动和重命名,使用规范如: mv src[目录/文件]dst[路径/文件] 回车 1.2三种不同的作用 通过在src部分和dst部分写入不同的内容,来实现文件的移动和重命名的等不同功能…

Redis背景介绍

⭐️前言⭐️ 本文主要做Redis相关背景介绍,包括核心能力、重要特性和使用场景。 🍉欢迎点赞 👍 收藏 ⭐留言评论 🍉博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 🍉博客中涉及源码及博主…

【高阶数据结构(一)】:LRU Cache

LRU Cache 一、LRU Cache概念二、LRU Cache的实现三、实现 一、LRU Cache概念 LRU(Least Recently Used)最近最少使用,是一种cache替换算法。Cache的容量是优先的,当容量达到上限时,如果还有新的数据需要插入&#xff…

R语言 | 使用 ComplexHeatmap 绘制热图,分区并给对角线分区加黑边框

目的:画热图,分区,给对角线分区添加黑色边框 建议直接看0和4。 0. 准备数据 # 安装并加载必要的包 #install.packages("ComplexHeatmap") # 如果尚未安装 library(ComplexHeatmap)# 使用 iris 数据集 #data(iris)# 选择数值列&a…

[数据结构] 线性表和顺序表

目录 线性表 顺序表的实现 顺序表各个方法的实现 boolean isFull() -- 判断数组是否放满 : void add(int data) -- 在数组末尾插入新元素 : void add(int pos,int data) -- 在指定位置插入元素 : boolean contain(int toFind) -- 判断是否包含某个元素 int indexOf(in…

虚幻UE5手机安卓Android Studio开发设置2025

一、下载Android Studio历史版本 步骤1:虚幻4.27、5.0、5.1、5.2官方要求Andrd Studio 4.0版本; 5.3、5.4、5.5官方要求的版本为Android Studio Flamingo | 2022.2.1 Patch 2 May 24, 2023 虚幻官网查看对应Andrd Studiob下载版本: https:/…

导入了fastjson2的依赖,但却无法使用相关API的解决方案

今天遇到了一个特别奇怪的问题&#xff0c;跟着视频敲代码&#xff0c;视频中用到了一个将JSON字符串转为对象的 API&#xff0c;需要引入alibaba的fastjson2相关依赖&#xff0c;我引入的依赖跟视频一样。 <!--视频中给的相关依赖 --> <dependency><groupId&g…

Qt展厅播放器/多媒体播放器/中控播放器/帧同步播放器/硬解播放器/监控播放器

一、前言说明 音视频开发除了应用在安防监控、视频网站、各种流媒体app开发之外&#xff0c;还有一个小众的市场&#xff0c;那就是多媒体展厅场景&#xff0c;这个场景目前处于垄断地位的软件是HirenderS3&#xff0c;做的非常早而且非常全面&#xff0c;都是通用的需求&…

【漫话机器学习系列】070.汉明损失(Hamming Loss)

汉明损失&#xff08;Hamming Loss&#xff09; 汉明损失是多标签分类问题中的一种评价指标&#xff0c;用于衡量预测结果与实际标签之间的差异。它定义为预测错误的标签比例&#xff0c;即错误标签的个数占总标签数量的比值。 在多标签分类中&#xff0c;每个样本可以属于多…

Meta推动虚拟现实:Facebook如何进入元宇宙时代

随着科技的不断进步&#xff0c;虚拟现实&#xff08;VR&#xff09;与增强现实&#xff08;AR&#xff09;技术的快速发展&#xff0c;世界正在逐步迈向一个全新的数字时代——元宇宙。而在这个革命性的转变中&#xff0c;Meta&#xff08;前身为Facebook&#xff09;作为全球…

C++ Primer 算术运算符

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

【初阶数据结构和算法】八大排序算法之插入排序(直接插入排序、希尔排序及其对比)

文章目录 一、常见排序算法分类一、直接插入排序二、希尔排序三、直接插入排序和希尔排序性能对比 一、常见排序算法分类 常见的排序算法有八种&#xff0c;我们简单盘点一下 插入排序&#xff1a;直接插入排序、希尔排序选择排序&#xff1a;直接选择排序、堆排序交换排序&am…

大模型综述一镜到底(全文八万字) ——《Large Language Models: A Survey》

论文链接&#xff1a;https://arxiv.org/abs/2402.06196 摘要&#xff1a;自2022年11月ChatGPT发布以来&#xff0c;大语言模型&#xff08;LLMs&#xff09;因其在广泛的自然语言任务上的强大性能而备受关注。正如缩放定律所预测的那样&#xff0c;大语言模型通过在大量文本数…