【Spring Cloud】Spring Cloud 概述

news2024/11/17 21:26:55

Spring Cloud 概述

  • 1. 认识微服务
    • 1.1 单体架构
    • 1.2 集群和分布式架构
      • 集群和分布式
    • 1.3 微服务架构
      • 分布式架构&微服务架构
    • 1.4 微服务带来的挑战
      • 优势
      • 挑战
  • 2. 微服务解决⽅案- Spring Cloud
    • 2.1 什么是Spring Cloud
    • 2.2 Spring Cloud版本
      • Spring Cloud和SpringBoot的关系
    • 2.3 Spring Cloud实现⽅案
      • Spring Cloud Netflix
      • Spring Cloud Alibaba
      • Spring Cloud 实现对⽐

1. 认识微服务

下图表⽰了服务架构从单体应⽤逐渐转变为微服务应⽤的过程

在这里插入图片描述

1.1 单体架构

很多创业公司早期或者传统企业会把业务的所有功能实现都打包在⼀个项⽬, 这就是单体架构

业务的所有功能实现都打包在⼀个war包或者Jar包中, 这种⽅式就称为单体架构

⽐如Spring课程中的博客系统,前端+后端+数据库实现, 都在⼀个项⽬中, 这种架构就称为单体架构

以⼤家都很熟悉的电商系统为例, 电商系统包括: ⽤⼾管理, 商品管理, 订单管理, ⽀付管理, 库存管理, 物流管理等等, 项⽬早期我们会把这些模块都写在⼀个web项⽬中, 然后统⼀部署到⼀个Web服务器中

在这里插入图片描述
这种架构开发简单, 部署简单, ⼀个项⽬就包含了所有的功能, 省去了多个项⽬之间的交互和调⽤消耗.直接部署在⼀个服务器即可

1.2 集群和分布式架构

当⽹站的⽤⼾量越来越⼤, 需求也会越来越多, 流量也会越来越⼤, 服务可能就会⾯临以下问题:

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

我们从两个⽅⾯进⾏优化:

  • 横向: 添加服务器, 把单台机器变成多台机器的集群.
  • 纵向: 把⼀个应⽤, 按照业务进⾏拆分, 拆分为多个项⽬. 此架构也称为垂直架构.

在这里插入图片描述
以单体结构规模的项⽬为单位进⾏垂直划分. 也就是将⼀个⼤项⽬拆分成⼀个⼀个单体结构项⽬. 项⽬和项⽬之间相对⽐较独⽴, 接⼝多为数据同步功能

集群和分布式

  • 集群(cluster)是将⼀个系统完整的部署到多个服务器上, 每个服务器都能提供系统的所有服务, 多个服务器通过负载均衡调度完成任务. 每个服务器称为集群的节点(node)

  • 分布式是将⼀个系统拆分为多个⼦系统,多个⼦系统部署在多个服务器上,多个服务器上的⼦系统协同合作完成⼀个特定任务.

在这里插入图片描述

集群和分布式区别和联系

  1. 从概念上. 集群是多个计算机做同样的事, 分布式是多个计算机做不同的事
  2. 从功能上. 集群的每⼀个节点功能是相同的, 并且可以替代的. 分布式也是多个节点组成的系统, 但是每个节点完成的业务是不同的, ⼀个节点出现问题, 这个业务就不可访问了.
  3. 从关系上. 分布式和集群在实践中, 很多时候是互相配合使⽤的. ⽐如分布式的某⼀个节点, 可能由⼀个集群来代替. 分布式架构⼤多是建⽴在集群上的. 所以实际的分布式架构设计中并不会把分布式和集群单独区分, ⽽是统称: 分布式架构.

1.3 微服务架构

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

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

在这里插入图片描述
简单来说, 微服务就是很⼩的服务. ⼩到⼀个服务只对应⼀个单⼀的功能, 只做⼀件事. 这个服务可以单独部署运⾏

微服务之间可以采⽤REST和RPC协议进⾏通信.

从这个⻆度来看, 微服务架构是分布式架构的⼀种拓展, 这种架构模式下它拆分粒度更⼩, 服务更独⽴.可以理解为: 微服务是⼀种经过良好架构设计的分布式架构⽅案.

分布式架构&微服务架构

分布式: 服务拆分, 拆了就⾏.

微服务: 指⾮常微⼩的服务, 更细粒度的垂直拆分, 通常指不能再拆的服务

分布式架构侧重于压⼒的分散, 强调的是服务的分散化. 微服务侧重于能⼒的分散, 更强调服务的专业化和精细分⼯. 从实践的⻆度来看, 微服务架构通常是分布式服务架构, 反之则未必成⽴. 所以, 选择微服务通常意味着需要解决分布式架构的各种难题

1.4 微服务带来的挑战

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

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

优势

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

挑战

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

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

在这里插入图片描述
选择微服务架构的话, 以上这些问题都需要我们解决, 我们是⾃⼰研发还是选择市场上⽐较成熟的技术拿来⽤呢?

全球的互联⽹公司都在积极尝试⾃⼰的微服务落地⽅案. 在Java领域, 最引⼈注⽬的就是Spring Cloud了

2. 微服务解决⽅案- Spring Cloud

2.1 什么是Spring Cloud

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

简单来说, Spring Cloud 就是分布式微服务架构的⼀站式解决⽅案, 是微服务架构落地的多种技术的集合

⽐如:

  • Distributed/versioned configuration 分布式版本配置
  • Service registration and discovery 服务注册和发现
  • Routing 路由
  • Service-to-service calls 服务调⽤
  • Load balancing 负载均衡
  • Circuit Breakers 断路器
  • Distributed messaging 分布式消息

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

2.2 Spring Cloud版本

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

为了管理主项⽬和⼦项⽬的依赖关系, 以及为了避免和⼦项⽬版本的冲突, 主项⽬版本命名并没有采⽤和⼦项⽬数字版本化的形式, ⽽是采⽤了英⽂名称

这个英⽂版本名称也⽐较有趣, Spring Cloud 采⽤了英国伦敦地铁站的名称来命名,并由地铁站名称字⺟A-Z依次类推的形式来发布迭代版本

在这里插入图片描述
但英⽂版本号太复杂了, 从 Hoxton 版本之后, Spring Cloud的版本就变成了2020.0.0 这样的⽇期版本号了

在这里插入图片描述

Spring Cloud和SpringBoot的关系

Spring Cloud中的所有⼦项⽬都依赖SpringBoot, 所以SpringBoot 和Spring Cloud的版本之间也存在⼀定的对应关系

在这里插入图片描述
⽐如SpringBoot 3.2.X对应的SpringCloud版本是2023.0.X

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

2.3 Spring Cloud实现⽅案

在Spring Cloud的规范下, 有很多实现, 其中最为出名的是

  • Spring Cloud Netflix
  • Spring Cloud Alibaba

Spring Cloud Netflix

Spring Cloud Netflix是 Netflix OSS(Netflix Open Source Software)在Spring Cloud规范下的实现

包含的组件及其主要功能⼤致如下:

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

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

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

Spring Cloud Netflix 在很多公司都有⼤规模使⽤, ⼀旦停⽌更新, 短期看影响不⼤, 但⻓期显然是不合适的, Spring Cloud官⽅也提供了⼀些替换建议

在这里插入图片描述

Spring Cloud Alibaba

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

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

如果说Spring Cloud Netflix 是 Spring Cloud 的第⼀代实现, 那么Spring Cloud Alibaba 也可以看做是Spring Cloud 的第⼆代实现, 主要由 Nacos、Sentinel、Seata 等组件组成

在这里插入图片描述
Spring Cloud Alibaba 吸收了 Spring Cloud Netflix 微服务框架的核⼼架构思想, 并进⾏了⾼性能改进. ⾃ Spring Cloud Netflix 进⼊停更维护后, Spring Cloud Alibaba 逐渐代替它成为主流的微服务框架

Spring Cloud 实现对⽐

在这里插入图片描述

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

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

相关文章

Linux部署RabbitMQ

目录 一、环境 二、开始安装 1、安装Erlang 2、安装RabbitMQ 3、修改配置文件 先复制覆盖配置文件,根据自己的版本进行路径更改 打开配置文件,53行 去掉注释%%和逗号 4、安装插件并启动服务 web管理界面工具 重新启动 RabbitMQ 服务 查看节点…

java日志门面之JCL和SLF4J

文章目录 前言一、JCL1、JCL简介2、快速入门3、 JCL原理 二、SLF4J1、SLF4J简介2、快速入门2.1、输出动态信息2.2、异常信息的处理 3、绑定日志的实现3.1、slf4j实现slf4j-simple和logback3.2、slf4j绑定适配器实现log4j3.2、Slf4j注解 4、桥接旧的日志框架4.1、log4j日志重构为…

什么是原生IP?

代理IP的各个类型称呼有很多,且它们在网络使用和隐私保护方面扮演着不同的角色。今天将探讨什么是原生IP以及原生IP和住宅IP之间的区别,帮助大家更好地理解这两者的概念和实际应用,并选择适合自己的IP类型。 一、什么是原生IP? 原…

流程、程序和政策之间的差异

流程、程序和政策是公司遵循的指导方针,以确保公司以有效和安全的方式运营。 每个企业都需要它们,但有时可能会让人搞不清一个从哪里开始,另一个从哪里结束。 企业经常混淆它们的用法,或者在真正含义上指错一个。 从高层次来看…

“数字武当”项目荣获2024年“数据要素×”大赛湖北分赛文化旅游赛道一等奖

9月26日,由国家数据局、湖北省人民政府指导的首届湖北省数据要素创新大会暨2024年“数据要素”大赛湖北分赛颁奖仪式在湖北武汉举行。由大势智慧联合武当山文化旅游发展集团有限公司参报的武当山“数字武当”项目,荣获文化旅游赛道一等奖。 据悉&#x…

《Linux从小白到高手》理论篇(三):vi/vim编辑器和Linux文件处理“三剑客”(sed/grep/awk)

List item 本篇介绍vi/vim编辑器和Linux文件处理“三剑客”(sed/grep/awk),这5个工具命令可能是Linux最最常用的,而且功能超级强大。 vi/vim vi和vim的基本介绍 所有的 Linux 系统都会内建 vi 文本编辑器。Vim 具有程序编辑的…

【frp】frp重启、frp启动、frp后台启动、frps dashboard等等

我写的关于frp配置的文章:frp配置 服务端frps 1. 创建服务文件 sudo nano /etc/systemd/system/frps.service2. 添加服务配置 在打开的文件中添加以下内容: [Unit] DescriptionFRPS Server Afternetwork.target[Service] Typesimple ExecStart/root…

LeetCode[简单] 136. 只出现一次的数字

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。 思路 当 A 与 B 不同时,按…

代理模式简介:静态代理VS与动态代理

代理模式:静态代理VS动态代理 1、定义2、分类2.1 静态代理2.2 动态代理 3、使用场景4、总结 💖The Begin💖点点关注,收藏不迷路💖 1、定义 代理模式是一种设计模式,通过代理对象控制对目标对象的访问。简而…

Stable Diffusion 使用详解(13)--- 3D纹理增强

目录 背景 Normal Map 描述 原理 使用心得 例子 描述 原图 参数设置 底模 ​编辑 正负相关性提示词 其他参数 controlnet 效果 还能做点啥 调整 效果 背景 实际上,在stable diffusion 中,你获取发现很多controlnet 其实功能有点类似&…

【优化】Vite手动分包

前言 每次打包完成后,默认情况下会将第三方库和自己的代码统统打包到一个JS文件中 打包后的 JS 对应一个指纹,当修改了自己的业务代码并重新打包后,还会将第三方库重新打包,继而生成一个新指纹,浏览器发现指纹变了&am…

从4道入门题目里面看Java和C的差别

目录 1.如何在IDEA进行循环输入 1.1题目概述 1.2循环输入 1.3println和print 2.如何调用数学函数 3.如何生成随机数字 4.字符串比较的方法 4.1错误案例分析 4.3正确比较方法 1.如何在IDEA进行循环输入 1.1题目概述 这个也是牛客上面的一个题目引发的思考:…

MySQl查询分析工具 EXPLAIN ANALYZE

文章目录 EXPLAIN ANALYZE是什么Iterator 输出内容解读EXPLAIN ANALYZE和EXPLAIN FORMATTREE的区别单个 Iterator 内容解读 案例分析案例1 文件排序案例2 简单的JOIN查询 参考资料:https://hackmysql.com/book-2/ EXPLAIN ANALYZE是什么 EXPLAIN ANALYZE是MySQL8.…

Linux进程的学习(持续更新)

冯诺依曼体系结构 概念: 冯・诺依曼体系结构是一种计算机体系结构,由美籍匈牙利科学家约翰・冯・诺依曼提出。它奠定了现代计算机的基本结构。 计算机分为以上五大部件组成: 输入设备:键盘,鼠标,网卡&…

【前端框架对比和选择】React 与 Vue 框架设计思路对比

框架总览 前端框架繁多,在学习的时候也会陷入困惑,我们应该抓住最主流的内容 Vue/React,深入底层,尝试揣摩框架作者的设计思路,开阔前端培训自己的视野,大家也不要把自己限制在框架之中,认为工…

Python | Leetcode Python题解之第442题数组中重复的数据

题目: 题解: class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:ans []for x in nums:x abs(x)if nums[x - 1] > 0:nums[x - 1] -nums[x - 1]else:ans.append(x)return ans

气膜健身馆:提升运动体验与健康的理想选择—轻空间

近年来,气膜健身馆作为一种新兴的运动场所,正逐渐受到越来越多健身爱好者的青睐。这种独特的建筑形式不仅提供了良好的运动环境,更在健康和运动表现上展现出诸多优势。 优越的空气质量 气膜结构的核心技术通过内外气压差形成稳定的气膜&#…

Mysql调优之索引优化(四)

一、mysql索引结构B树原理 B树开始就是n树,不是二叉树 B树的非叶子结点存储了数据,导致层级会很深,每一层又有数据又有索引。 B树只有叶子结点存储数据,其余都是存储索引,增加了每层存取索引的数量(3层结构…

Linux开源网络:高性能数据平面

数据平面的性能在很大程度上取决于网络 I/O 的性能,而网络数据包从网卡到用户空间的应用程序需要经历多个阶段,本文从数据平面基础到NFV,NFC基础设施再到OVS-DPDK VPP进行概论上的描述。 部分内容来源于《Linux开源网络全栈详解:从…

助力商用车远程检测维修,贝锐向日葵携手上海星融打造标杆案例

商用车是一个成熟且复杂的领域,伴随着数字化与信息化的不断发展,商用车领域的上下游厂商也正在积极的拥抱数字化,应用信息化工具所带来的“红利”,来提供更高质量的产品与服务,其中比较典型的代表,就是在商…