分布式系统架构介绍

dbc466cecc4b448c8ae275ebc3b3ab76.jpg1、为什么需要分布式架构?

 

 

增大系统容量:单台系统的性能瓶颈,多台机器才能应对大规模的应用场景,所以就需要我们的应用支撑平台具备分布式架构。

 

加强系统的可用:为了满足业务的SLA要求,需要通过分布式架构消除单点故障,提升系统的可用性。

 

其他因素:增加功能模块复用、通过模块化加快开发效率、增强系统扩展性。

 

 

 

2、和单体应用相比分布式架构的优缺点是什么?

 

  传统单体架构 分布式服务化架构

新功能开发 需要时间 容易开发和实现

部署 不经常且容易部署 经常发布,部署复杂

隔离性 故障影响范围大 故障影响范围小

架构设计 难度小 难度级数增加

系统性能 响应时间快,吞吐量小 响应时间慢,吞吐量大 

 系统运维 运维简单 运维复杂 

 新人上手 学习曲线大(应用逻辑) 学习曲线大(架构逻辑) 

 技术 技术单一且封闭 技术多样且开放 

 测试和查错 简单 复杂 

 系统扩展性 扩展性很差 扩展性很好 

 系统管理 重点在于开发成本 重点在于服务治理和调度 

 

 

3、分布式系统存在的问题

 

架构设计变得复杂(尤其是其中的分布式事务);

部署单个服务会比较快,但是如果一次部署多个服务,流程会变得复杂;

系统的吞吐量会变大,但是响应时间会变长;

运维复杂度会因为服务变多而变得很复杂;

架构复杂导致学习曲线变大;

测试和查错的复杂度增大;

技术多元化,这会带来维护和运维的复杂度;

管理分布式系统中的服务和调度变得困难和复杂。

总结:分布式系统架构的难点在于系统设计,以及管理和运维。所以分布式架构解决了“单点”和“性能容量”的问题,却新增了其他的问题。这就需要我们用各式各样的技术和手段来解决这些问题。

 

 

 

4、分布式系统的发展

 

 

 

 从上图可以看到面向服务的架构可以分为以下三个阶段:

 

20世纪90年代前,是单体架构,软件模块高度耦合(这张图同样也说明了有的 SOA 架构其实和单体架构没什么两样,因为都是高度耦合在一起的)。

2000 年左右出现了比较松耦合的 SOA 架构,这个架构需要一个标准的协议或是中间件来联动其它相关联的服务(如 ESB)。 这样一来,服务间并不直接依赖,而是通过中间件的标准协议或是通讯框架相互依赖。 

2010 年后,出现了微服务架构,这个架构更为松耦合。每一个微服务都能独立完整地运行(所谓的自包含),后端单体的数据库也被微服务这样的架构分散到不同的服务中。而它和传统 SOA 的差别在于,服务间的整合需要一个服务编排或是服务整合的引擎(这个编排和组织引擎可以是工作流引擎,也可以是网关。当然,还需要辅助于像容器化调度这样的技术方式,如 Kubernetes)。

马丁·福勒对微服务描述:https://martinfowler.com/articles/microservices.html

 

 

 

5、微服务的优缺点和解决思路

 

微服务的出现使得开发速度变得更快,部署快,隔离性高,系统的扩展度也很好,但在集成测试、运维和服务管理等方面就比较麻烦了。所以需要一套比较好的微服务PaaS平台,提供各种配置服务、服务发现、智能路由、控制总线,并且还需要提供各式各样的部署和调度方式。

 

 

 

6、思考

 

1)分布式系统和微服务架构的关系是什么?

 

1>.概念

 

微服务架构是一种基于组件化、微分化的设计方法,它将应用程序拆分成小型、独立的服务单元,每个服务单元都具有自己的数据存储、逻辑处理和接口。微服务架构旨在提高应用程序的可伸缩性、可维护性和可扩展性,同时降低开发和维护的成本;

分布式系统是指由多个独立组件(或者计算机节点)组成的系统,这些组件可以通过网络相互通信,实现数据存储、处理和传输等功能。分布式系统可以被看作是一种大型的、分布式的数据库或网络应用程序,它通常由多个节点组成,每个节点都有自己的数据和处理能力;

分布式架构是分布式系统的一种实现方式,它将分布式系统中的各个组件通过网络通信连接起来,实现数据的存储、处理和传输等功能。分布式架构的设计需要考虑多个方面,包括数据的分布式存储、负载均衡、容错机制等。

2>.分布式系统架构有以下几个主要优点:

 

高可用性:分布式系统可以将应用程序或数据分布在多个节点上,从而提高系统的可用性。即使一个节点失败,整个系统仍然可以正常运行,并及时切换到备用节点上;

 

可扩展性:分布式系统可以轻松地增加或删除节点来扩展系统的处理能力和容量,从而满足不同的需求;

 

可靠性:分布式系统可以将数据和应用程序分布在多个节点上,从而提高数据的安全性和可靠性。此外,分布式系统还支持容错机制,可以在节点失败时自动切换到备用节点上,从而保证系统的正常运行;

 

灵活性:分布式系统可以根据不同的需求和场景进行灵活的设计和配置,以实现最佳的性能和可用性。

 

分布式系统架构也有一些挑战,例如网络延迟、数据一致性、分布式事务等问题。为了解决这些问题,分布式系统架构通常采用一些常用的技术和工具,例如分布式缓存、消息队列、分布式事务等。

 

3>.微服务和分布式的区别

 

实践的角度看:可以说微服务架构是分布式架构,反之则未必成立;

微服务重在解耦合,使每个模块都独立。分布式重在资源共享与加快计算机计算速度;

分布式:分散压力。微服务:分散能力;

区别分布式的方式是根据不同机器不同业务:

将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。区别分布式的方式是根据不同机器不同业务。

微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。

微服务更加强调单一职责、轻量级通信(HTTP)、独立性并且进程隔离。

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

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

相关文章

第62讲商品搜索动态实现以及性能优化

商品搜索后端动态获取数据 后端动态获取数据&#xff1a; /*** 商品搜索* param q* return*/GetMapping("/search")public R search(String q){List<Product> productList productService.list(new QueryWrapper<Product>().like("name", q)…

Java学习笔记2024/2/8

面向对象 //面向对象介绍 //面向: 拿、找 //对象: 能干活的东西 //面向对象编程: 拿东西过来做对应的事情 //01-如何设计对象并使用 //1.类和对象 //2.类的几个不错注意事项 1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 &#xff0c;所以我们也常常说万物皆对…

机器学习 | 深入集成学习的精髓及实战技巧挑战

目录 xgboost算法简介 泰坦尼克号乘客生存预测(实操) lightGBM算法简介 《绝地求生》玩家排名预测(实操) xgboost算法简介 XGBoost全名叫极端梯度提升树&#xff0c;XGBoost是集成学习方法的王牌&#xff0c;在Kaggle数据挖掘比赛中&#xff0c;大部分获胜者用了XGBoost。…

Java后端技术助力,党员学习平台更稳定

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

大模型2024规模化场景涌现,加速云计算走出第二增长曲线

导读&#xff1a;2024&#xff0c;大模型第一批规模化应用场景已出现。 如果说“百模大战”是2023年国内AI产业的关键词&#xff0c;那么2024年我们将正式迈进“应用为王”的新阶段。 不少业内观点认为&#xff0c;2024年“百模大战”将逐渐收敛甚至洗牌&#xff0c;而大模型在…

video / image上传操作-校验、截取首帧和正方形预览图等

常见video / image上传操作-校验、截取首帧和正方形预览图等。 上回搞了一个视频和图片上传和校验的需求&#xff0c;感觉学到很多&#xff0c;一些常见的函数记录如下&#xff1a; 1. 图片校验尺寸 const { maxCount 30, maxWidth, maxHeight, minHeight 200, minWidth …

Java基础知识练习题

1.对Java源文件进行编译操作的命令是&#xff08;B&#xff09; A.Java B.javac C.where is java D.javaw 2.下列命令中&#xff0c;用来运行Java程序的是&#xff08;A&#xff09;A.java B. javadoc C. jar D. javac 分析&#xff1a; 对Java源程序进行编译的命令是J…

力扣102. 二叉树的层序遍历 (复习vector和queue的常见用法

目录 题目描述 题目解析 题目答案 题目所用知识点 最后 题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术…

使用pygame生成红包封面

import pygame import sys# 初始化pygame pygame.init()# 设置红包封面尺寸 size width, height 640, 960 screen_color (255, 0, 0) # 红色背景# 创建窗口 screen pygame.display.set_mode(size) pygame.display.set_caption(红包封面)# 加载龙形图片 dragon_image pygam…

一些参数(仅供个人理解)

1.mAP&#xff1a; 数据集的平均准确率 mAP50-95&#xff1a;mAP阈值为50到mAP阈值为95&#xff0c;间隔5%,取得10个mAP值&#xff0c;然后对这十个值取平均。 目标检测评估指标mAP&#xff1a;从Precision,Recall,到AP50-95【未完待续】_map50和map50-95-CSDN博客 2.IoU&a…

JVM调优(Window下)

1、编写代码&#xff0c;像下面代码这样&#xff0c;产生OOM&#xff0c; private static final Integer K 1024;/*** 死循环&#xff0c;验证JVM调优* return*/GetMapping(value "/deadLoop")public void deadLoop(){int size K * K * 8;List<byte[]> lis…

C语言第二十一弹---指针(五)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 转移表 1、转移表 总结 1、转移表 函数指针数组的用途&#xff1a;转移表 举例&#xff1a;计算器的⼀般实现&#xff1a; 假设我们需要做一个能够进行加减…

Flume拦截器使用-实现分表、解决零点漂移等

1.场景分析 使用flume做数据传输时&#xff0c;可能遇到将一个数据流中的多张表分别保存到各自位置的问题&#xff0c;同时由于采集时间和数据实际发生时间存在差异&#xff0c;因此需要根据数据实际发生时间进行分区保存。 鉴于此&#xff0c;需要设计flume拦截器配置conf文件…

C#,佩尔数(Pell Number)的算法与源代码

1 佩尔数&#xff08;Pell Number&#xff09; 佩尔数&#xff08;Pell Number&#xff09;是一个自古以来就知道的整数数列&#xff0c;由递推关系定义&#xff0c;与斐波那契数类似。佩尔数呈指数增长&#xff0c;增长速率与白银比的幂成正比。它出现在2的算术平方根的近似值…

一图窥探RAG技术发展现状

2023年除了大语言模型&#xff0c;听到最多的当属RAG&#xff08;检索增强生成技术了&#xff09;&#xff0c;在实际业务场景落地过程中&#xff0c;由于大模型目前的一定局限和能力现状以及Token限制、训练成本等多种因素的影响下&#xff0c;RAG不得不成为大家选择快速试错、…

WebSocket+Http实现功能加成

WebSocketHttp实现功能加成 前言 首先&#xff0c;WebSocket和HTTP是两种不同的协议&#xff0c;它们在设计和用途上有一些显著的区别。以下是它们的主要特点和区别&#xff1a; HTTP (HyperText Transfer Protocol): 请求-响应模型&#xff1a; HTTP 是基于请求-响应模型的协…

Three.js学习8:基础贴图

一、贴图 贴图&#xff08;Texture Mapping&#xff09;&#xff0c;也翻译为纹理映射&#xff0c;“贴图”这个翻译更直观。 贴图&#xff0c;就是把图片贴在 3D 物体材质的表面&#xff0c;让它具有一定的纹理&#xff0c;来为 3D 物体添加细节的一种方法。这使我们能够添加…

TCP和UDP相关问题(重点)——7.TCP的流量控制怎么实现的?

流量控制就是在双方通信时&#xff0c;发送方的速率和接收方的速率不一定是相等的&#xff0c;如果发送方发送的太快&#xff0c;接收方就只能把数据先放到接收缓冲区中&#xff0c;如果缓冲区都满了&#xff0c;那么处理不过来就只能丢弃&#xff0c;所以需要控制发送方的速率…

【Go】三、Go并发编程

并发编程 我们主流的并发编程思路一般有&#xff1a;多进程、多线程 但这两种方式都需要操作系统介入&#xff0c;进入内核态&#xff0c;是十分大的时间开销 由此而来&#xff0c;一个解决该需求的技术出现了&#xff1a;用户级线程&#xff0c;也叫做 绿程、轻量级线程、协…

猫头虎分享已解决Bug || Spring Error: Request method ‘POST‘ not supported

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …