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

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




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

相关文章:

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

目录 一.认识微服务架构 ??微服务带来的挑战 二.微服务解决方案SpringCloud ??SpringCloud的版本 ??SpringCloud和SpringBoot的关系 ??SpringCloud实现方案 Spring Cloud Netfix Spring Cloud Alibaba ??Spring Cloud 实现对比 在入门Spring Cloud 之前&…...

基于ssm的校园跑腿管理系统+vue

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统共有管理员、用户两个角色 管理员主要的功能用户信息管理、任务信息管理、任务类型管理、接单信息管理、公告信息管理、投诉信息管理、公告类型管…...

5个GitHub热点开源项目!!

1.自托管 Moonlight 游戏串流服务:Sunshine 主语言:C,Star:14.4k,周增长:500 这是一个自托管的 Moonlight 游戏串流服务器端项目,支持所有 Moonlight 客户端。用户可以在自己电脑上搭建一个游戏…...

docker通用技术介绍

docker通用技术介绍 1.docker介绍 1.1 基本概念 docker是一个开源的容器化平台,用于快速构建、打包、部署和运行应用程序。它通过容器化技术将应用及其依赖环境(如代码、库、系统工具等)打包成一个标准化、轻量级的独立单元,实…...

#渗透测试#批量漏洞挖掘#某图创图书馆集群管理系统updOpuserPw SQL注入(CVE-2021-44321)

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...

智能合约安全 | 合约无效化攻击

目录: 智能合约安全 合约无效化攻击 合约自毁函数 selfdestruct 攻击实现 漏洞防御 总结 智能合约安全 合约无效化攻击 合约无效化攻击类同于web安全中的逻辑漏洞中的一种 我们这里拿一个典型的例子来讲解 有这样一份智能合约, 每个人可以向其中发送1 eth 第七个…...

RabbitMQ 的介绍与使用

一. 简介 1> 什么是MQ 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已。 其主要用途:不同进程Process/线程T…...

【手撕算法】K-Means聚类全解析:从数学推导到图像分割实战

摘要 聚类算法是探索数据内在结构的利器!本文手撕K-Means核心公式,结合Python代码实现与图像分割案例,详解: ✅ 欧氏距离计算 ✅ 簇中心迭代更新 ✅ 肘部法则优化 目录 摘要 目录 一、算法核心思想 二、数学原理详解 2.1 …...

【SQL技术】不同数据库引擎 SQL 优化方案剖析

一、引言 在数据处理和分析的世界里,SQL 是不可或缺的工具。不同的数据库系统,如 MySQL、PostgreSQL(PG)、Doris 和 Hive,在架构和性能特点上存在差异,因此针对它们的 SQL 优化策略也各有不同。这些数据库…...

RabbitMQ系列(二)基本概念之Publisher

在 RabbitMQ 中,Publisher(发布者) 是负责向 RabbitMQ 服务器发送消息的客户端角色,通常被称为“生产者”。以下是其核心功能与工作机制的详细解析: 一、核心定义与作用 消息发送者 Publisher 将消息发送到 RabbitMQ 的…...

OAK相机的抗震性测试

在工业环境中,双目视觉相机必须具备与工作环境同等的坚固性。鉴于部分客户会将我们的相机应用于恶劣环境(例如安装在重型机械上),我们依据EN 60068-2-6:2008标准对相机进行了振动耐受性测试。 测试涉及的相机型号包括&#xff1a…...

2025最新Nginx高频面试题

2025最新Nginx高频面试题 摘要:本文整理了2025年企业高频Nginx面试题,覆盖核心原理、配置优化、安全防护及云原生场景实战,助你轻松应对技术面试! 核心原理篇 1. Nginx的Master-Worker架构优势是什么? 答案&#xf…...

【Kubernetes】API server 限流 之 maxinflight.go

这个文件实现了一个基于信号量(Channel)的简单限流器。 基础知识 总共有四种channel 带缓冲的channel nonMutatingChan、mutatingChan 都是带缓冲的channel ,这类channel 的特点是: 这允许最多 mutatingLimit /nonMutatingLimit 个请求同时获取令牌并执…...

推荐算法工程师的技术图谱和学习路径

推荐算法工程师的技术图谱和学习路径可以从多个维度进行概述,可以总结如下: 一、技术图谱 推荐算法工程师需要掌握的技术栈主要分为以下几个方面: 数学基础: 微积分、线性代数、概率论与统计学是推荐算法的基础,用于理解模型的数学原理和优化算法。高等数学、最优化理论…...

Milvus高性能向量数据库与大模型结合

Milvus | 高性能向量数据库,为规模而构建Milvus 是一个为 GenAI 应用构建的开源向量数据库。使用 pip 安装,执行高速搜索,并扩展到数十亿个向量。https://milvus.io/zh Milvus 是什么? Milvus 是一种高性能、高扩展性的向量数据…...

轮式机器人在复杂地形中如何选择合适的全局路径规划算法?

已思考完成 收起 嗯,用户问的是轮式机器人在复杂地形中如何选择合适的全局路径规划算法。首先,我需要理解复杂地形可能带来的挑战,比如崎岖的路面、动态障碍物、非结构化环境等等。轮式机器人在这里的运动控制需要考虑地形通过性、稳定性&…...

Metal学习笔记九:光照基础

光和阴影是使场景流行的重要要求。通过一些着色器艺术,您可以突出重要的对象、描述天气和一天中的时间并设置场景的气氛。即使您的场景由卡通对象组成,如果您没有正确地照亮它们,场景也会变得平淡无奇。 最简单的光照方法之一是 Phong 反射模…...

【字符串】最长公共前缀 最长回文子串

文章目录 14. 最长公共前缀解题思路:模拟5. 最长回文子串解题思路一:动态规划解题思路二:中心扩散法 14. 最长公共前缀 14. 最长公共前缀 ​ 编写一个函数来查找字符串数组中的最长公共前缀。 ​ 如果不存在公共前缀,返回空字符…...

Linux提权之详细总结版(完结)

这里是我写了折磨多提权的指令的总结 我这里毫无保留分享给大家哦 首先神魔是提权 我们完整的渗透测试的流程是(个人总结的) 首先提升权限是我们拿到webshell之后的事情,如何拿到webshell,怎末才能拿到webshell,朋友们等我更新,持续更新中,下一篇更新的是windows提权 好了 废…...

week 3 - More on Collections - Lecture 3

一、Motivation 1. Java支持哪种类型的一维数据结构? Java中用于在单一维度中存储数据的数据结构,如arrays or ArrayLists. 2. 如何在Java下创建一维数据结构?(1-dimensional data structure) 定义和初始化这些一…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...