1-1 微服务架构概述

news2025/4/19 18:13:57

文章目录

    • 微服务架构概述
      • 1-1. 系统进化理论概述
        • 集中式系统:
        • 分布式系统
      • 1-2. 系统进化理论背景
      • 1-3. 什么是微服务架构
      • 1-4. 微服务架构的优缺点
      • 1-5. 为什么选择 Spring Cloud 构建微服务
    • 认识 Spring Cloud
      • 2-1. Spring Cloud 是什么
      • 2-2. Spring Cloud 的版本
      • 2-3 Spring Cloud 的整体架构

微服务架构概述

1-1. 系统进化理论概述

在系统架构与设计的实践中,经历了两个阶段,一个阶段是早些年常见的集中式系统,一个阶段是近年来流行的分布式系统;

集中式系统:

集中式系统也叫单体应用,就是把所有的程序、功能、模块都集中到一个项目中,部署在一台服务器上,从而对外提供服务;

分布式系统

分布式系统就是把所有的程序、功能拆分成不同的子系统,部署在多台不同的服务器上,这些子系统相互协作共同对外提供服务,而对用户而言他并不知道后台是多个子系统和多台服务器在提供服务,在使用上和集中式系统一样;

集中式系统跟分布式系统是相反的两个概念,他们的区别体现在“合”与“分”。

1-2. 系统进化理论背景

系统进化的背景与中国互联网用户规模庞大有巨大关系,中国互联网用户规模有7.7 亿,庞大的用户访问量对系统的架构设计是巨大的挑战;

产品或者网站初期,通常功能较少,用户量也不多,所以一般按照单体应用进行设计和开发,按照经典的 MVC 三层架构设计;

随着业务的发展,应用功能的增加,访问用户的增多,传统的采用集中式系统进行开发的方式就不再适用了,因为在这种情况下,集中式系统就会逐步变得非常庞大,很多人维护这么一个系统,开发、测试、上线都会造成很大问题,比如代码冲突,代码重复,逻辑错综混乱,代码逻辑复杂度增加,响应新需求的速度降低,隐藏的风险增大;

所以需要按照业务维度进行应用拆分,采用分布式开发,每个应用专职于做某一些方面的事情,比如将一个集中式系统拆分为用户服务、订单服务、产品服务、交易服务等,各个应用服务之间通过相互调用完成某一项业务功能。

1-3. 什么是微服务架构

分布式强调系统的拆分,微服务也是强调系统的拆分,微服务架构属于分布式架构的范畴;
并且到目前为止,微服务并没有一个统一的标准的定义,那么微服务究竟是什么?
微服务一词源于 Martin Fowler(马丁.福勒)的名为 Microservices 的博文,
可以在他的官方博客上找到这篇文章:

http://martinfowler.com/articles/microservices.html

中文翻译版本:

https://www.martinfowler.cn/articles/microservices.html

简单地说, 微服务是系统架构上的一种设计风格, 它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于 HTTP 的 RESTful API 进行通信协作;

被拆分后的每一个小型服务都围绕着系统中的某一项业务功能进行构建, 并且每个服务都是一个独立的项目,可以进行独立的测试、开发和部署等; 由于各个独立的服务之间使用的是基于 HTTP 的 JSON 作为数据通信协作的基础,所以这些微服务可以使用不同的语言来开发;

1-4. 微服务架构的优缺点

1、我们知道微服务架构是将系统中的不同功能模块拆分成多个不同的服务,这些服务进行独立地开发和部署,每个服务都运行在自己的进程内,这样每个服务的更新都不会影响其他服务的运行;

2、由于每个服务是独立部署的,所以我们可以更准确地监控每个服务的资源消耗情况,进行性能容量的评估,通过压力测试,也很容易发现各个服务间的性能瓶颈所在;

3、由于每个服务都是独立开发,项目的开发也比较方便,减少代码的冲突、代码的重复,逻辑处理流程也更加清晰,让后续的维护与扩展更加容易;

4、微服务可以使用不同的编程语言进行开发;

但是在系统架构领域关于微服务架构也有一些争论,有人倾向于在系统设计与开发中采用微服务架构实现软件系统的低耦合,被认为是系统架构的未来方向,Martin Fowler(马丁.福勒)也给微服务架构很高的评价;

同时,对微服务架构也有人持反对观点,他们表示:
1、微服务架构增加了系统维护、部署的难度,导致一些功能模块或代码无法复用;

2、随着系统规模的日渐增长,微服务在一定程度上也会导致系统变得越来越复杂,增加了集成测试的复杂度;

3、随着微服务的增多,数据的一致性问题,服务之间的通信成本等都凸显了出来;

所以在系统架构时也要提醒自己:不要为了微服务而微服务。

1-5. 为什么选择 Spring Cloud 构建微服务

微服务一词是 Martin Fowler(马丁.福勒)于 2014 年提出来的,近几年微服务架构的讨论非常火热,无数的架构师和开发者在实际项目中实践着微服务架构的设计理念,他们在微服务架构中针对不同应用场景出现的各种问题,也推出了很多解决方案和开源框架,其中我们国内的互联网企业也有一些著名的框架和方案;

整个微服务架构是由大量的技术框架和方案构成,比如:

在这里插入图片描述
但是在微服务架构上,几乎大部分的开源组件都只能解决某一个场景下的问题,所以这些实施微服务架构的公司也是整合来自不同公司或组织的诸多开源框架,并加入针对自身业务的一些改进,没有一个统一的架构方案;
所以当我们准备实施微服务架构时,我们要整合各个公司或组织的开源软件,而且某些开源软件又有多种选择,这导致在做技术选型的初期,需要花费大量的时间进行预备研、分析和实验,这些方案的整合没有得到充分的测试,可能在实践中会遇到各种各样的问题;
Spring Cloud 的出现,可以说是为微服务架构迎来一缕曙光,有 SpringCloud社区的巨大支持和技术保障,让我们实施微服务架构变得异常简单了起来,它不像我们之前所列举的框架那样,只是解决微服务中的某一个问题,而是一个解决微服务架构实施的综合性解决框架,它整合了诸多被广泛实践和证明有效的框架作为实施的基础组件,又在该体系基础上创建了一些非常优秀的边缘组件将它们很好地整合起来。
加之 Spring Cloud 有其 Spring 的强大技术背景,极高的社区活跃度,也许未来 Spring Cloud 会成为微服务的标准技术解决方案;

认识 Spring Cloud

2-1. Spring Cloud 是什么

1、Spring Cloud 是一个一站式的开发分布式系统的框架,为开发者提供了一系
列的构建分布式系统的工具集;
2、Spring Cloud 为开发人员提供了快速构建分布式系统中一些常见模式的工具
(比如:配置管理,服务发现,断路器,智能路由、微代理、控制总线、全局锁、
决策竞选、分布式会话和集群状态管理等);
3、开发分布式系统都需要解决一系列共同关心的问题,而使用 Spring Cloud
可以快速地实现这些分布式开发共同关心的问题,并能方便地在任何分布式环境
中部署与运行。
4、Spring Cloud 这个一站式地分布式开发框架,被近年来流行的“微服务”架
构所大力推崇,成为目前进行微服务架构的优先选择工具;
5、Spring Cloud 基于 Spring Boot 框架构建微服务架构,学习 Spring Cloud
需要先学习 Spring Boot;
6、SpringCloud 官网:http://spring.io

2-2. Spring Cloud 的版本

Spring Cloud 最早是从 2014 年推出的,在推出的前期更新迭代速度非常快,频繁发布新版本,目前更趋于稳定,变化稍慢一些;
Spring Cloud 的版本并不是传统的使用数字的方式标识,而是使用诸如:
Angel、Brixton、Camden…等伦敦的地名来命名版本,版本的先后顺序使用字母表 A-Z 的先后来标识,,现在已经进入 F 版本;
Spring Cloud 与 Spring Boot 版本匹配关系
在这里插入图片描述

Spring Cloud 并不是从 0 开始开发一整套微服务解决方案,而是集成各个开源软件,构成一整套的微服务解决方案,这其中有非常著名的 Netflix 公司的开源产品;
Netflix 公司成立于 1997 年,是目前美国最大的版权视频交易网站;
Netflix 公司在不断发展的过程中,也成为了一家云计算公司,并积极参与开源
项目,Netflix OSS(Open Source)就是由 Netflix 公司主持开发的一套代码

框架和库,github 地址:https://github.com/Netflix;
Spring Cloud 所包含的众多组件中,Spring Cloud Netflix 就是其中一组不可
忽视的组件,由 netflix 公司开发后又并入 Spring Cloud 大家庭;
目前 Netflix 公司贡献的活跃项目包括:
spring-cloud-netflix-eureka
spring-cloud-netflix-hystrix
spring-cloud-netflix-stream
spring-cloud-netflix-archaius
spring-cloud-netflix-ribbon
spring-cloud-netflix-zuul

2-3 Spring Cloud 的整体架构

在这里插入图片描述
Service Provider: 暴露服务的服务提供方。
Service Consumer:调用远程服务的服务消费方。
EureKa Server: 服务注册中心和服务发现中心。

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

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

相关文章

2.2操作系统-进程管理:前趋图、前趋图与PV操作

2.1操作系统-进程管理:前趋图\前趋图与PV操作前趋图前趋图与PV操作练习前趋图与PV操作,一般出现了,分值在2~3分左右,技巧性很强。 前趋图 前趋图是为了描述一个程序的各部分间的依赖关系,或者是一个大的计算的各个子…

【c++类与对象 】

目录:前言一、基础引入1.类的定义2.类的权限3.类的封装4.类的实例化5.计算类对象的大小结构体内存对齐规则空类的大小二、this指针this引入this指针的特性经典例题三、类的六个默认成员函数1、构造 && 析构构造函数析构函数2、拷贝 && 赋值拷贝构造…

display:inline-flex使用

凡是使用了display:inline-flex布局的容器(不管是行内元素还是块级元素),将会变为弹性容器,它的宽高都将可以被设置,并且该容器整体对外表现为一个行内块元素。 span也可以设置宽高,并且div和span它们都没有…

【C++】缺省参数函数重载

🏖️作者:malloc不出对象 ⛺专栏:C的学习之路 👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈 目录前言一、缺省参数1.1 缺省参数的概念1…

关于new和delete的一些思考,为什么不能在析构函数中调用delete释放对象的内存空间,new和delete的原理

最近在写代码的时候,觉得每次new出来的对象都需要去delete好麻烦,于是直接把delete写到了析构函数中,在析构函数里面写了句delete this,结果调用析构函数的时候死循环了,不是很理解原因,于是去研究了一下。…

盘点全球10大女性技术先驱

盘点全球10大女性技术先驱 人们普遍认为技术是男性主导的领域,但事实,技术或编程与性别无关,几乎任何人都可以成为技术大神。已经有很多案例证明女性同样可以在技术领域施展才能。在女神节来临之际,我为大家盘点一下为编程做出卓越…

AB测试——流程介绍(定义问题和指标选取)

前言: 作为AB测试的学习记录,本文主要介绍了AB测试的基本流程,以及指标类型和如何选取合适指标。 相关文章:AB测试——原理介绍 AB测试的基本流程是什么? AB测试(也称为分流测试)是一种常用的实…

visual studio的team使用问题小结

visual studio的team使用问题小结一、visual studio(2017)默认浏览器打开team任务和bug二、visual studio(2017)上传team时,文件超过一万个会上传失败。三、visual studio(2017)拉取team代码时&…

C++面向对象编程之二:构造函数、拷贝构造函数、析构函数

构造函数和析构函数C利用构造函数和析构函数,完成对象的初始化和清理工作。对象的初始化和清理工作,是编译器强制我们要做的事情,如果我们不提供构造函数和析构函数,编译器会提供3个函数:默认无参构造函数默认拷贝构造…

004+limou+HTML——(4)HTML表格

000、前言 表格在实际开发中的应用还是比较多的&#xff0c;表格可以更加清晰地排列数据 001、基本结构 &#xff08;1&#xff09;构成 表格&#xff1a;<table>行&#xff1a;<tr>&#xff08;table row&#xff0c;表格行&#xff09;&#xff0c;由多少组t…

【每日随笔】中国当前社会阶层 ( 技术无关 | 随便写写 )

文章目录一、阶层划分根据收入划分的阶层根据分工逻辑划分根据权利划分二、根据社会地位和掌握的资源划分的阶层三、赚钱的方式四、如何进入高阶层看了一个有意思的视频 , 讲的是中国当前的社会阶层 , 感觉好有道理 , 搜索了一些资料 ; 参考资料 : 关于中国的社会阶层社会在分…

【一】【socket聊天室】-多线程,socket编程

本文主要实现基于socket编程的聊天室&#xff0c;主要分为下面三个步骤&#xff1a; &#xff08;1&#xff09;多用户聊天&#xff1a;一个服务器多个客户端&#xff0c;客户端信息显示在公共的服务端窗口&#xff0c;利用多线程实现&#xff1b; ——客户端双线程&#xff1a…

OpenCV基础(一)

1.认识图像&#xff08;彩色图中每一个像素点都包含三个颜色通道RGB&#xff0c;数值范围为0~255&#xff0c;0代表黑色&#xff0c;255代表白色&#xff09; import cv2 #opencv 读取的格式为BGRimg cv2.imread(cat.png) #读取图像 cv2.imshow(cat, img) #显示图像img&#x…

Matlab实现FFT变换

Matlab实现FFT变换 文章目录Matlab实现FFT变换原理实现手算验证简单fft变换和频谱求取功率谱结论在信号处理中&#xff0c;快速傅里叶变换&#xff08;FFT&#xff09;是一种非常常见的频域分析方法。本文将介绍如何使用Matlab实现FFT变换&#xff0c;并通过Matlab代码演示实际…

SAP ABAP 深度解析Smartform打印特殊符号等功能

ABAP 开发人员可以在 Smartform 输出上显示 SAP 图标或 SAP 符号。例如,需要在 SAP Smart Forms 文档上显示复选框形状的输出。SAP Smartform 文档上可以轻松显示空复选框、标记复选框以及 SAP 图标等特殊符号。 在 SAP Smartform 文档中添加一个新的文本节点。 1. 单击“更…

开发一款系统软件的流程步骤是什么

在如今的数字化时代&#xff0c;软件开发成为了一个重要的行业。无论是大型企业还是小型创业公司&#xff0c;软件开发都是不可或缺的一环。在本文中&#xff0c;我将介绍一些网上常见的软件开发步骤&#xff0c;以便开发者能够更好地理解和实践。1、需求分析需求分析是开发系统…

基于transformer的多帧自监督深度估计 Multi-Frame Self-Supervised Depth with Transformers

Multi-Frame Self-Supervised Depth with Transformers基于transformer的多帧自监督深度估计0 Abstract 多帧深度估计除了学习基于外观的特征外&#xff0c;也通过特征匹配利用图像之间的几何关系来改善单帧估计。我们采用深度离散的核极抽样来选择匹配像素&#xff0c;并通过一…

基于Jeecgboot前后端分离的ERP系统开发代码生成(六)

商品信息原先生成的不符合要求&#xff0c;重新生成&#xff0c;包括一个附表商品价格信息表 一、采用TAB主题一对多的模式 因为主键&#xff0c;在online表单配置是灰的&#xff0c;所以不能进行外键管理&#xff0c;只能通过下面数据库进行关联录入&#xff0c;否则online界面…

案例19-遇见问题的临时解决方案和最终解决方案

目录1、背景介绍2、两种解决方案的概念1、临时解决方案&#xff1a;2、最终解决方案&#xff1a;3、排查问题过程4、总结站在用户的角度思考作为软件开发者5、升华1、背景介绍 首先说明这是系统很早之前的时候的一个功能&#xff0c;当时和学习通还有很强的耦合关系。在学习通…

研究链表空间销毁问题

&#x1f4af;&#x1f4af;&#x1f4af; 1.研究链表空间销毁问题 当链表使用完后&#xff0c;需要将链表销毁&#xff0c;那么该如何销毁呢&#xff1f; void SLTDestroy(SLTNode* phead)//销毁单链表 {SLTNode* cur phead;while(cur){free(cur);cur cur->next;} }你…