微服务的演变史(单体式、分布式、SOA架构、微服务架构)

news2024/11/24 13:09:12

单体式架构

从架构层面来考虑:一个应用只部署一个服务,或该应用由多个服务组成的时候,只部署在一台服务器上

把一种系统的所有功能全部耦合在一个应用中的框架方式

这种开发方式简单,但是只适合体量较小的业务,一旦业务体量增加到一定程度的时候,单机的硬件资源将没办法满足我们的需求

 

分布式架构

从架构层面来考虑:一个应用的多个服务分别部署在不同的服务器,这种形式都可以称之为分布式;

将一个完整的系统按照功能点拆分成若干个相互独立的子系统,每一个子系统可以称之为一个节点,每一个节点都可以单独配置多台服务器(集群),各个子系统之间相互进行通信,进行协调合作,共同完成整个系统的业务流程

简单的讲: 大任务划分为小任务。一个或多个人(或机器)完成同一任务中的不同部分。被分解后的小任务互相之间有独立性,节点之间只管接受和传递信息。

由于每个服务都是单点部署,因此可能会出现单点故障问题

 

集群部署

分布式架构中的一种解决方案,主要用于解决应用单点故障问题,以及提升应用的并发能力;

在分布式中,每个节点都是完成不同的业务,那么如果一个节点跨了,那这个业务就不可以访问了;

我们把每个单机多复制几遍就构成了一个集群,而这个集群中的每台服务器就是集群中的节点,并且该集群的每个节点服务器都有单独处理该业务的能力,靠负载均衡器来判断当前所有节点的负载情况来决定该请求交给哪个节点处理;

如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行该任务需10小时。

采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是Hadoop的Map/Reduce分布式计算模型)

而采用集群方案,同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,1小时后,10个任务同时完成,这样,整身来看,还是1小时内完成一个任务!

 

SOA架构(面向服务)

特点:主要是为了抽取公共服务,减少代码的重复,提升拓展性以及可用性

在分布式的架构下,当服务越来越多,容量的评估和小服务资源的浪费等问题就会出现,这个时候需要添加一个调度中心(企业消息总线),对集群进行实时管理,但是服务之间会有依赖关系,一旦某个环节出错有可能会造成服务雪崩

 

微服务架构

在某种程度上是面向服务的SOA架构的继续发展的下一步,微服务架构更加强调服务的"彻底拆分"

将一个大型系统的各个不同模块按照需求拆分成一个一个的服务,各自独立运行

单个轻量级服务一般为一个单独微服务,微服务讲究的是专注某个功能的实现,比如登录系统只专注于用户登录方面功能的实现,讲究的职责单一,开箱即用,可以独立运行,微服务架构系统本身是一个分布式的系统,按照业务划分服务单元模块,解决单个系统的不足,满足越来越复杂的业务需求,具体就是使用Springboot开发的一个小模块,处理单一的业务逻辑,一个模块只做一个事情  

微服务架构的优点

  • 服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展

  • 微服务之间采用RESTful等轻量级Http协议相互调用

微服务架构的缺点

分布式系统开发的技术成本高(容错、分布式事务等)

微服务架构的拆分原则

1.基于业务逻辑

将系统中的业务安札奥职责范围进行识别,职责相同的划分为一个单独的服务。

2.基于稳定性

将系统中的业务模块按照稳定性进行排序。稳定的、不经常修改的划分一块;将不稳定的,经常修改的划分为一个独立服务。比如日志服务、监控服务都是相对稳定的服务就可以归到一起。

3.基于可靠性

同样,将系统中的业务模块按照可靠性进行排序、对可靠性要求比较高的核心模块归在一起、对可靠性要求不高的非核心模块归在一起。

这种拆分的高明可以很好的规避因为一颗老鼠屎坏了一锅粥的单体弊端,同时将来要做高可用方案也能很好的节约机器或带宽的成本。

4.基于高性能

同上,将系统中的业务模块按照对性能的要求进行优先级排序,把对性能要求比较高的模块独立成一个服务,对性能要求不高的放在一起,比如全文搜索、商品查询和分类、秒杀这种就属于高性能的核心模块。

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

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

相关文章

JOSEF约瑟 JDL-1001A 电流继电器 导轨式安装 批发价格

名称:电流继电器品牌:JOSEF约瑟型号:JDL-1001A触点容量:250V2A整定范围:0.03-9.99A返回系数:≥0.9特点:交直流两用、消耗小、返回系数高。 型号说明 JD L -1 XXX X/ XXX / XXX 系列型号 JDL…

首发Yolov5/Yolov7优化:Adam该换了!斯坦福最新Sophia优化器,比Adam快2倍 | 2023.5月斯坦福最新成果

1.Sophia优化器介绍 斯坦福2023.5月发表的最新研究成果,他们提出了「一种叫Sophia的优化器,相比Adam,它在LLM上能够快2倍,可以大幅降低训练成本」。 论文:https://arxiv.org/pdf/2305.14342.pdf 本文介绍了一种新的模型预训练优化器:Sophia(Second-order Clippe…

vue2_模版语法

目录 模版语法 react用jsx语法编译后的null作用 插值表达式{{}} v-bind和{{}} 关于国内谷歌自带翻译停用如何解决(额外) 会一点的插值表达式,也有限制 模版语法 更接近原生js的写法jsx语法 jsx是react提出的;后很多前端框架…

LeetCode 周赛 347(2023/05/28)二维空间上的 LIS 最长递增子序列问题

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 往期回顾:LeetCode 单周赛第 346 场 仅 68 人 AK 的最短路问题 周赛 347 概览 T1. 移除字符串中的尾随零(Easy) 标签:模拟、…

HTTP协议深入理解+如何使用Fiddler抓包

博主简介:想进大厂的打工人博主主页:xyk:所属专栏: JavaEE初阶 目录 文章目录 一、HTTP概述 1.1 什么是HTTP 1.2 理解应用层协议 二、抓包工具fiddler的使用 2.1 几个需要注意的点 2.2 fiddler的原理 2.3 fiddler的使用技巧 三、HTTP请求(Re…

intel驱动程序和支持助理常见问题:不识别、无法检测等问题解决方法

起因: wifi驱动有点问题,于是想着更新一下官方的驱动,下载intel驱动程序和支持助理并安装完成后,打开成了这个样子,刷新多少次都没有用,就是不识别。 解决方法: 经过一波胡乱操作&#xff0…

华为OD机试之真正的密码(Java源码)

真正的密码 题目描述 一行中输入一个字符串数组,如果其中一个字符串的所有以索引0开头的子串在数组中都有,那么这个字符串就是潜在密码在所有潜在密码中最长的是真正的密码,如果有多个长度相同的真正的密码,那么取字典序最大的为…

使用CompletionService进行多个文件打包为zip下载

最近没怎么写博客了,因为前段时间在准备软考复习,昨天考完试,现在总算轻松一点了,有更多自由的时间了,总结一下JUC包下的一些并发工具类,主要是从使用场景入手。 CompletionService可以用于实现任务并行化…

数据结构入门(C语言版)图的概念和功能函数实现

图的概念和功能函数实现 前言1.图的定义和术语1.1 定义1.2 常用术语 2.图的存储结构2.1 图的数组(邻接矩阵)存储表示2.2 图的邻接表存储表示 3.图的遍历3.1 深度优先搜索3.2 广度优先搜索3.3 示例 4.连通网的最小生成树4.1 克鲁斯卡尔(Kruskal)算法4.2 普里姆(Prim)算法 5.图的…

企业云盘软件世界排行榜:提升企业文件管理效率的最佳工具

企业云盘是一种面向企业用户提供的在线存储和文件分享服务,它能够帮助企业实现数据备份、文件共享、办公协同等多种功能。通过企业云盘,企业可以将数据集中管理,避免了传统存储方式的不便和风险。 企业云盘的优势 1. 集中管理:企业…

【js】对象属性的拦截和Proxy代理与Reflect映射的用法与区别

✍️ 作者简介: 前端新手学习中。 💂 作者主页: 作者主页查看更多前端教学 🎓 专栏分享:css重难点教学 Node.js教学 从头开始学习 ajax学习 文章目录 对象属性的拦截介绍SetGet 对象的拦截介绍使用对象属性拦截和对象拦截区别练习题 映射…

【Python实战】Python采集地震信息

前言 昨天,我们这里发生了地震,不过,没有太大的问题,我就想着能不能把近几年发生地震的信息,收集下来,我们发现中国地震台网的官方微博会分布近几年发生地震的信息。我们可以直接在这里获取。 环境使用 python 3.9pycharm模块使用 requests模块介绍 requests requ…

每日一博 - 浅析事务隔离级别 MVCC机制

文章目录 DB四个隔离级别MVCC如何工作的 ?小结 DB四个隔离级别 数据库隔离允许事务执行,就像没有其他并发运行的事务一样。 下面的图说明了四个隔离级别。 Serializalble: 这是最高的隔离级别。并发交易保证按顺序执行。Repeatable Read: 事务开始时读…

Flutter 笔记 | Flutter 事件与通知

原始指针事件处理 命中测试 在移动端,各个平台或UI系统的原始指针事件模型基本都是一致,即:一次完整的事件分为三个阶段:手指按下、手指移动、和手指抬起,而更高级别的手势(如点击、双击、拖动等&#xf…

重学迭代器和生成器

重学迭代器和生成器 之前在 JavaScript 高级程序设计第 7 章 迭代器和生成器 学习笔记 其实包含过 iterator 和 generator 的学习笔记,不过依旧温故而知新,有了一些实际上手的经验后重新再回滚一边会有比较深刻的理解,而不是只是 cv 书上的内…

硬件基础常识【3】--详细说说贴片电容器,可能有你不知道的

目录 贴片电容介绍MLCC的制作过程电容失效的头号大敌电容失效的最主要原因电容的容值、耐压值与封装尺寸的关系 电容串并联串联并联 电容的等效电路选取电容的建议总结 贴片电容介绍 贴片电容相信干电子技术活的基本都使用过,他的全称为:多层片式陶瓷电…

基础学习——读txt数据、字符串转list或数组、画PR曲线、画Loss曲线

文章目录 字符串转数组字符串中的数组转列表转整数列表 读数据,然后画PR曲线读取txt数据关于PR曲线代码 读数据画Loss曲线读txt数据代码 字符串转数组 .split() 是Python中的一个字符串方法,它可以将一个字符串按照指定的分隔符分割成多个子字符串&…

智能工厂 | 联合汽车电子有限公司汽车驱动科技上海智能工厂

智能制造是我国加快建设制造强国的主攻方向,是上海城市数字化转型的重要抓手。智能工厂是推动智能制造的切入点和突破口,是制造业数字化转型的重要载体,以智能工厂为载体布局新赛道、触发新动能、带动新终端,从而实现制造业高质量…

scanf读取字符数组的注意点

起因&#xff1a;scanf的%c格式可以读取空格和回车 读取中间无空格隔开的二维字符数组时 #include<bits/stdc.h> using namespace std; char mp[10][10]; signed main() {for(int i1;i<3;i){for(int j1;j<3;j){scanf("%c",&mp[i][j]);}getchar();/…

Zookeeper集群 + Kafka集群

Zookeeper 概述 Zookeeper 定义 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 Zookeeper 工作机制 Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设计的分布式服务管理框架&#xff0c;它负责存储和管理大家都关心的…