当前位置: 首页 > article >正文

【图文详解】什么是微服务?什么是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 Netflix

Spring Cloud Alibaba

服务注册/发现

Eureka

Eureka

Nacos

服务调用

OpenFeign

Feign

Dubbo

配置中心

SpringCloudConfig

Archaius

Nacos

服务网关

SpringCloudGateway

Zuul

SpringCloudGateway

负载均衡

SpringCloudLoadBalance

Ribbon

Dubbo




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


http://www.kler.cn/a/568575.html

相关文章:

  • Python请求微店商品详情数据API接口
  • SCConv模块在YOLOv8中的多维特征重构与轻量化研究
  • 墨刀:Axure托管插件登录/注册时出现空白页
  • FPGA开发,使用Deepseek V3还是R1(9):FPGA的全流程(详细版)
  • JavaAdv01——字节流和字符流
  • 一个使用ALIGNN神经网络对材料性能预测的深度学习案例解读
  • 【XSS】DVWA靶场XSS攻击
  • 从矩阵乘法探秘Transformer
  • 【算法系列】经典的堆排序算法
  • 快速排序算法详解
  • Jordan标准型的意义和应用
  • Java实现pdf文件压缩(aspose-pdf实现压缩、itextpdf去除aspose-pdf版权水印)
  • TVbox蜂蜜影视:智能电视观影新选择,简洁界面与强大功能兼具
  • 云服务培训五-数据库服务
  • 【JAVA面试题】JDK、JRE、JVM 三者区别和联系
  • 软件高级架构师 - 设计模式
  • Transformer 代码剖析9 - 解码器模块Decoder (pytorch实现)
  • LLMs之DeepSeek:DeepSeek-V3/R1推理系统的架构设计和性能统计的简介、细节分析之详细攻略
  • Electron+Vite+React+TypeScript开发问题手册
  • 利用 LangChain 和一个大语言模型(LLM)构建一个链条,自动从用户输入的问题中提取相关的 SQL 表信息,再生成对应的 SQL 查询