【图文详解】什么是微服务?什么是SpringCloud?


目录

一.认识微服务架构

▐ 微服务带来的挑战

二.微服务解决方案SpringCloud

▐ SpringCloud的版本

▐ SpringCloud和SpringBoot的关系

▐ SpringCloud实现方案

Spring Cloud Netfix

Spring Cloud Alibaba

▐ Spring Cloud 实现对比


在入门Spring Cloud 之前,我们需要先了解下什么是微服务,以及微服务的发展史。在架构发展的过程中,项目开发遇到了哪些问题,以及Spring Cloud是用来解决什么问题的。

一.认识微服务架构

下图表示了单体架构到微服务架构的发展过程

什么是单体架构?

很多创业公司早期或者传统企业会把业务的所有功能实现都打包在⼀个项目,这就是单体架构。业务的所有功能实现都打包在⼀个war包或者Jar包中,我们将这种方式就称为单体架构。

以电商系统为例,电商系统包括:用户管理、商品管理、订单管理、支付管理、库存管理、物流管理等等,项目早期我们会把这些模块都写在⼀个web项目中,然后统⼀部署到⼀个Web服务器中。

这种架构开发和部署都很简单,⼀个项目就包含了所有的功能,省去了多个项目之间的交互和调⽤消耗,直接部署在⼀个服务器即可。

当网站的用户量越来越大,需求也会越来越多,流量也会越来越大,服务可能就会⾯临以下问题:

  • 后端服务器的压力就会越来越大,负载越来越高,甚⾄出现无法访问的情况
  • 业务场景逐渐复杂,为了满⾜用户的需求,单体应⽤也会越来越⼤,各个业务代码之间的耦合度也会越来越高,任何⼀个问题,都需要整个项目重新构建,发布
  • ⼀个微笑的问题都可能会导致整个应用挂掉

我们从两个方向进行优化:

  • 横向: 添加服务器,把单台机器变成多台机器的集群,即利用集群的思想。
  • 纵向: 把⼀个应用,按照业务进行拆分,拆分为多个项目,此架构也称为垂直架构,即利用分布式的思想。

以单体结构规模的项目为单位进行垂直划分,也就是将⼀个⼤项目拆分成⼀个⼀个单体结构项⽬,项目和项目之间相对比较独立。

从上图中可以看出,按照业务进行拆分后,会有⼀些重复的功能开发,比如订单系统在电商平台和支付系统都会涉及。

在分布式架构下,当部署的服务越来越多,重复的代码就会越来越多,服务的调⽤关系也会越来越复杂,我们可以把⼀些通用的会被多个上层服务调⽤的共享业务提取成独⽴的基础服务,组成⼀个个微小的服务,这就是微服务.

很多人会把分布式和微服务弄混淆,这二者严格上说是不能划等号的,

从功能上说:

  • 分布式: 服务拆分, 拆了就⾏.
  • 微服务: 指⾮常微小的服务, 更细粒度的垂直拆分, 通常指不能再拆的服务

从侧重点上说:

  • 分布式架构侧重于压力的分散,强调的是服务的分散化
  • 微服务侧重于能力的分散,更强调服务的专业化和精细分⼯

从实践的⻆度来看,微服务架构通常是分布式服务架构;反之则未必成⽴,所以选择微服务通常意味着需要解决分布式架构的各种难题

▐ 微服务带来的挑战

随着产品的复杂性和流量的增加,技术架构也在不断的发⽣变化,不论是早期的单体架构还是现在⼴泛使用的微服务架构,都是为了更好的服务产品,解决问题。

微服务架构带来好处的同时,也⾯临着⼀些挑战,从单体服务转向微服务意味着管理更加复杂,接下来我们从优势和挑战两个方向分析⼀下微服务架构。

优势

  • 易开发和维护:每个微服务负责的业务比较清晰,体量小,开发和维护成本降低.
  • 容错性高:⼀个服务发生故障,可以使故障隔离在单个服务中,不影响整体服务故障.
  • 扩展性好:每个服务都是独立运行的,我们可以结合项⽬实际情况进⾏扩展,按需伸缩.
  • 技术选型灵活:每个微服务都是单独的团队来运维,可以根据业务特点和团队特点,选择适合的技术栈

虽然微服务具备很多的优势, 但由于服务数的增加, 服务治理也是我们⾯临的巨⼤挑战.

挑战

  • 服务依赖:随着服务的数量增多,服务之间的关系也会变得更加复杂,⼀个服务的更改 需要考虑对其他服务的影响.
  • 运维成本:⼀个业务流程会涉及多个微服务共同完成,有更多的服务需要编译、部署、运行,甚⾄可能是不同的编程语言,不同的运⾏环境,当然也需要集群来处理故障转移等,这对于运维人员而言挑战是巨⼤的.
  • 开发和测试:⼀个业务流程可能涉及多个微服务共同完成,服务调⽤引⼊⽹络延迟,不可靠的⽹络,如何进行容错处理等问题,这对开发和测试而言难度也会提升.
  • 服务监控:在⼀个单体结构中, 很容易实现服务的监控,因为所有功能都在⼀个服务中, 微服务架构下,不仅需要对整个链路进⾏监控,还需要对每⼀个服务实现监控.
  • 负载均衡:微服务架构中的服务实例数量可能⾮常庞大,因此需要有效的服务发现和负载均衡机制来管理请求流量和保证⾼可⽤性 

选择微服务架构的话,以上这些问题都需要我们解决,我们是自己研发还是选择市场上比较成熟的技术拿来⽤呢?全球的互联网公司都在积极尝试自己的微服务落地方案,在Java领域最引⼈注⽬的就是Spring Cloud


二.微服务解决方案SpringCloud

上文中说到SpringCloud其实是Java领域内非常热门的微服务解决方案,SpringCloud在业内已经被广泛应用,对于前文中提到的微服务中常见的问题和挑战都有很好的解决效率。

Spring Cloud 提供了⼀些可以让开发⼈员快速构建分布式服务的⼯具,比如配置管理、服务发现、 熔断、智能路由等,他们可以在任何分布式环境中很好的⼯作。

Spring Cloud 并不是Spring 团队研发的框架,它只是把⼀些⽐较优秀的解决微服务架构中常⻅问题的开源框架基于SpringCloud规范进⾏了整合,并基于SpringBoot的⻛格对这些组件进⾏封装,屏蔽掉了复杂的配置和实现原理,为开发者提供了开箱即⽤的微服务开发体验.

▐ SpringCloud的版本

Spring Cloud 是⼀个由很多⼦项⽬组成的庞⼤项⽬,这些⼦项⽬由各个公司来维护的,所以发布阶段也是不同的

为了管理主项目和⼦项目的依赖关系,以及为了避免和⼦项⽬版本的冲突,主项⽬版本命名并没有采⽤和⼦项⽬数字版本化的形式,⽽是采⽤了英⽂名称。这个英⽂版本名称也⽐较有趣, Spring Cloud 采⽤了英国伦敦地铁站的名称来命名,并由地铁站名称字⺟A-Z依次类推的形式来发布迭代版本。

  • Angel
  • Brixton
  • Camden
  • Dalston
  • Edgware
  • Finchley
  • Greenwich
  • Hoxton

但英⽂版本号太复杂了, 从 Hoxton 版本之后, Spring Cloud的版本就变成了2020.0.0 这样的⽇期版本号了

  • 2020.0.x aka Ilford
  • 2021.0.x aka Jubilee
  • 2022.0.x aka Kilburn
  • 2023.0.x aka Leyton

▐ SpringCloud和SpringBoot的关系

SpringCloud中的所有子项目都依赖SpringBoot,所以SpringBoot 和SpringCloud的版本之间也存在⼀定的对应关系。

比如SpringBoot 3.2.X对应的SpringCloud版本是2023.0.X。如果我们有⼀个SpringBoot项目, 我们希望在这个项⽬中添加SpringCloud的⼀些组件,需要根据当前项目的SpringBoot版本, 选择SpringCloud的版本(当然, 新项⽬不存在这个问题) 

▐ SpringCloud实现方案

在Spring Cloud的规范下,有很多实现,其中有以下俩个较为出名

  • Spring Cloud Netfix
  • Spring Cloud Alibaba

Spring Cloud Netfix

Spring Cloud Netflix 是 Netflix OSS(Netflix Open Source Software)在Spring Cloud规范下的实现,包含的组件及其主要功能大致如下:

  • Eureka: 服务注册和发现
  • Zuul: 服务⽹关
  • Ribbon: 负载均衡
  • Feign: 服务调⽤组件
  • Hystrix: 断路器, 提供服务熔断和限流
  • Hystrix Dashboard: 监控⾯板

在很长的⼀段时间里SpringCloud⼀度被泛指SpringCloudNetflix。SpringCloud⼀直以来把Netflix OSS 套件作为其官⽅默认的⼀站式解决⽅案,然而Netflix公司在2018年前后宣布其核⼼组件Hystrix、Ribbon、Zuul等均进⼊维护状态,Spring Cloud 也被迫宣布删除这些维护模块。

spring-cloud-netflix并没有从Spring Cloud的依赖中完全删除,只是从2020.0版本起,他只管理Eureka。

Spring Cloud Alibaba

Spring Cloud Alibaba 是阿里巴巴集团下的开源组件和云产品在Spring Cloud规范下的实现。

虽然Spring Cloud Alibaba⽬前并不是Spring Cloud官⽅推荐的默认⽅案,但是Spring Cloud Alibaba是阿里中间件团队主导的⼀个新⽣项⽬,正处于⾼速迭代中,甚⾄在Alibaba的开源组件还没有织⼊SpringCloud生态之前,就已经在各⼤公司广泛使⽤了。

如果说SpringCloudNetflix是SpringCloud的第⼀代实现,那么SpringCloudAlibaba也可以看做是SpringCloud的第⼆代实现,主要由 Nacos、Sentinel、Seata 等组件组成。

官网:Spring Cloud Alibaba 是什么-阿里云Spring Cloud Alibaba官网 (aliyun.com)

Spring Cloud Alibaba 吸收了 Spring Cloud Netflix 微服务框架的核心架构思想,并进行了高性能改进,自 Spring Cloud Netflix 进入停更维护后,Spring Cloud Alibaba 逐渐代替它成为主流的微服务框架。

▐ Spring Cloud 实现对比

Spring Cloud官方Spring Cloud NetflixSpring Cloud Alibaba
服务注册/发现EurekaEurekaNacos
服务调用OpenFeignFeignDubbo
配置中心SpringCloudConfigArchaiusNacos
服务网关SpringCloudGatewayZuulSpringCloudGateway
负载均衡SpringCloudLoadBalanceRibbonDubbo



 本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力!如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步!有相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见

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

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

相关文章

2024 “华为杯” 中国研究生数学建模竞赛(F题)深度剖析|X射线脉冲星光子到达时间建模|数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题! CS团队倾注了大量时间和心血,深入挖掘解…

稀土抗紫外屏蔽剂在涂层中的应用

稀土抗紫外屏蔽剂的主要作用是有效地吸收或阻挡紫外线,从而保护材料或表面免受紫外线的伤害,延长其使用寿命。 稀土抗紫外屏蔽剂在涂层上的应用具有以下显著优势: 1. 增强涂层的耐久性:稀土抗紫外屏蔽剂能够有效吸收和散射紫外线…

无人机集群路径规划:雾凇优化算法( rime optimization algorithm,RIME)求解无人机集群路径规划,提供MATLAB代码

一、单个无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化…

Lubuntu电源管理

lxqt-config-powermanagement 打开托盘图标 Show icon 电源管理 电源管理管理笔记本电脑电池的低电量、关闭笔记本电脑盖的操作以及计算机长时间闲置时应采取的措施。 用法 LXQt 电源管理会监控您的电池、笔记本电脑盖、空闲情况,以及当您按下电源或睡眠按钮时会发…

Linux根文件系统构建

直接参考【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81 本文仅作为个人笔记使用,方便进一步记录自己的实践总结。 Linux“三巨头”已经完成了 2 个了,就剩最后一个 rootfs(根文件系统)了,本章我们就来学习一下根文件系统的组成以及如何构建…

数模打怪(七)之回归分析

一、什么是回归分析 1、回归分析的含义 回归分析:通过研究自变量X和因变量Y的相关关系,尝试去解释Y的形成机制,进而达到通过X去预测Y的目的。 在绝大多数情况下,我们没有能力去探究严格的因果关系,只能通过回归分析…

小米 13 Ultra机型工程固件 资源预览与刷写说明 步骤解析

小米 13 Ultra机型---机型代码为ishtar 。工程固件可以辅助修复格机或者全檫除分区后的基带修复。可以用于修复TEE损坏。以及一些分区的底层修复。此款固件也可以为更换UFS后的底包。 通过博文了解 1💝💝💝-----此机型工程固件的资源分享 下载 刷写注意事项 2💝💝…

加薪非要老总批?——职责链模式

文章目录 加薪非要老总批?——职责链模式加薪代码初步职责链模式职责链的好处加薪代码重构加薪成功 加薪非要老总批?——职责链模式 老板,我要加薪! 时间:7月2日20点  地点:小菜、大鸟住所的客厅  人…

奇安信渗透2面经验分享

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

学习笔记——ViT(Vision Transformer)

谷歌团队探索了 Transformer 在图像识别中的直接应用。 Vision Transformer(ViT)是一种基于Transformer架构的深度学习模型,用于图像识别和计算机视觉任务。与传统的卷积神经网络(CNN)不同,ViT直接将图像视…

20240921解决使用PotPlayer在WIN10电脑播放4K分辨率10bit的视频出现偏色的问题

20240921解决使用PotPlayer在WIN10电脑播放4K分辨率10bit的视频出现偏色的问题 2024/9/21 10:40 缘起:常见的问题,你下载视频的时候,4K分辨率的视频播放的时候出现偏色异常,但是1080p分辨率的正常呀! 偏色的识别&…

华为地图服务 - 如何实现地图数据聚合效果? -- HarmonyOS自学20

场景介绍 本章节将向您介绍如何根据地图数据实现聚合效果。 您可以通过比例尺缩放自适应聚合效果,聚合图标可点击。聚合支持功能: 支持按距离聚合ClusterItem。支持绘制聚合Overlay的默认图标。支持绘制聚合Overlay的自定义图标。支持监听聚合Overlay…

祛“魅”霸王茶姬

“奔着员工福利可以每天喝奶茶去的,我在招聘软件上尝试约了霸王茶姬的面试,想着应该也不会太累,推荐去吗?”一位霸王茶姬的重度爱好者在社交平台发帖问。 茶饮界的“网红”“顶流”,年轻人的“新宠”,霸王…

巴蒂克图案识别系统源码分享

巴蒂克图案识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

一文掌握 Prompt:万能框架+优化技巧+常用指标

Prompt 万能框架 在编写 Prompt 时,从0到1的编写出第一版 Prompt 往往是最难的,而基于已有 Prompt 利用各种技巧进行优化则相对简单。善于解决 “数理问题” 的我们在面对这样一个偏 “文理问题” 的任务时,就像小时候写作文一样难以提笔。如…

Java程序员在编写代码时,通常会使用哪些工具和框架?

Java程序员在日常编码工作中,通常会使用一系列工具和框架来提高开发效率、保证代码质量以及实现快速迭代。以下是一些常用的工具和框架: 开发环境和IDE IntelliJ IDEA:一个强大的Java集成开发环境,提供了智能代码补全、代码分析…

攻防世界Web新手练习区题目(view_source到simple_php)WP

目录 view_source​ robots​ Training-WWW-Robots PHP2​ get_post​ backup​ cookie​ disabled_button​ simple_js​ xff_referer​ weak_auth​ command_execution​ simple_php​ view_source 获取在线场景后访问题目场景 在右键不管用的情况下&#xff0…

一招教你挑代理IP的秘诀

逛乎,一直刷到这类问题: 本质上,都是在面对市面上那么多代理IP服务提供商,挑得眼花缭乱了,而代理IP直接影响到我们数据采集任务的效率、安全性和成功率,所以我们在挑选服务提供商的时候都会谨慎一些。索性我…

华为OD机试 - 水仙花数Ⅱ - 动态规划(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…