【SpringCloud】概述 -- 微服务入门

在Java的整个学习过程中,大家势必会听见一些什么分布式-微服务、高并发、高可用这些专业术语,给人的感觉很高级,有一种高深莫测的感觉。可以看一下这篇博客对这些技术架构的演变有一个初步的认识:

服务端⾼并发分布式结构演进之路-CSDN博客文章浏览阅读950次,点赞11次,收藏9次。在进行技术学习过程中,由于大部分读者没有经历过一些中大型系统的实际经验,导致无法从服务端⾼并发分布式结构演进之路-----在进行技术学习过程中,由于大部分读者没有经历过一些中大型系统的实际经验,导致无法从全局理解一些概念,所以本文以一个"电子商务"应用为例,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,方便大家对后续知识做深入学习时有一定的整体视野。https://blog.csdn.net/qq_45875349/article/details/139639760?spm=1001.2014.3001.5501在学习Spring Cloud 之前,我们先来了解下什么是微服务,以及微服务的发展史.在架构发展的过程中,项目开发遇到了哪些问题,以及Spring Cloud是用来解决什么问题的,这些概念上的有助于对后续发开的深刻理解。其实在上面的博客中已经叙述了关于架构的发展过程。

1. 什么是微服务?

1.1 单体架构

对于一个系统来说,将前端+后端+数据库这些所有的业务都打包在一个项目中,就是单体架构。

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

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

1.2 集群和分布式架构

当我们的系统服务的用户越来越多的时候,用户量逐渐增加、我们的服务面临的压力也逐渐增加。可能会面临一些问题:

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

这时候我们一般会从两个角度进行优化:

1. 横向:添加服务器,把单台机器变成多台机器的集群。

2. 纵向:对应用的业务进行拆分,拆分为多个子项目。(垂直架构)

以单体结构规模的项目为单位进行垂直划分,也就是将一个大项目拆分成一个一个单体结构项目.项目和项目之间相对比较独立,接口多为数据同步功能.

集群

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

集群就像在一个大餐馆里设置了多个完全相同的厨房(节点)。每个厨房都可以独立处理整个菜单上的任何订单。顾客的订单被分配到不同的厨房,由每个厨房独立完成。这种方式确保如果一个厨房出了问题,其他厨房还能继续工作,保证餐馆整体的服务能力。

分布式

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

分布式则像是在一个大餐馆里,把菜单分成了多个部分,每个厨房只负责其中一部分。例如,一个厨房只做前菜,另一个厨房只做主菜,第三个厨房只做甜点。这样,每个厨房专注于自己负责的部分,所有厨房一起协作完成整个餐馆的服务。

集群和分布式区别和联系

1.从概念上.集群是多个计算机做同样的事,分布式是多个计算机做不同的事

2.从功能上.集群的每一个节点功能是相同的,并且可以替代的,分布式也是多个节点组成的系统,但是每个节点完成的业务是不同的,一个节点出现问题,这个业务就不可访问了

3.从关系上,分布式和集群在实践中,很多时候是互相配合使用的,比如分布式的某一个节点,可能由一个集群来代替,分布式架构大多是建立在集群上的,所以实际的分布式架构设计中并不会把分布式和集群单独区分,而是统称:分布式架构.

1.3 微服务架构

系统经过分布式进行业务拆分后,还会存在一些重复的功能开发。

在分布式架构下,当部署的服务越来越多,重复的代码就会越来越多,服务的调用关系也会越来越复杂,我们可以把一些通用的,会被多个上层服务调用的共享业务,提取成独立的基础服务,组成一个个微小的服务.这就是微服务.简单来说,微服务就是很小的服务.小到一个服务只对应一个单一的功能,只做一件事,这个服务可以单独部署运行

微服务之间可以采用REST和RPC协议进行通信,此处把他理解为接口的约定

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

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

2. 微服务的优势与挑战

微服务架构带来好处的同时,也面临着一些挑战,从单体服务转向微服务意味着管理更加复杂。

优势

  • 独立部署:每个服务可以独立部署和更新,不影响其他服务。这减少了发布的风险,提高了发布的灵活性。

  • 技术多样性:不同的服务可以使用不同的技术栈(编程语言、数据库等),根据具体需求选择最合适的技术。

  • 扩展性:可以针对某个服务单独进行水平扩展(增加实例数量)或垂直扩展(增加单个实例的处理能力),提高系统的弹性和资源利用率。

  • 容错性:服务之间的隔离性增强了系统的容错能力。如果一个服务失败,不会影响其他服务的运行,系统能更好地应对部分故障。

  • 团队独立性:不同的服务可以由不同的小团队负责,这样团队可以独立开发、测试和部署,提高开发效率和团队自主性。

  • 更容易的理解和维护:由于服务较小且专注于单一业务功能,代码库更易于理解和维护。新成员可以更快上手。

挑战

  • 分布式系统复杂性:微服务架构将单一应用分解成多个服务,带来了分布式系统的复杂性。服务间的通信、数据一致性、事务管理等都是新的挑战。

  • 服务间通信开销:服务间的网络通信会带来额外的开销,可能会影响性能。需要优化通信机制和策略,确保服务间通信高效可靠。

  • 数据管理:数据管理变得更加复杂。每个服务通常拥有自己的数据库,这导致分布式数据管理和跨服务的数据一致性变得困难。

  • 运维复杂性:管理和监控大量微服务实例需要更复杂的运维工具和流程。需要有效的监控、日志和告警系统来确保服务的稳定性。

  • 部署和版本控制:部署多个独立的服务需要有效的部署管道和版本控制机制,确保各服务之间的兼容性和协调。

  • 测试难度:测试微服务架构比测试单一应用复杂。需要模拟服务间的交互,并处理分布式环境下的各种测试场景。

  • 安全性:每个服务都是独立的潜在攻击点,需要确保每个服务的安全性,以及服务间通信的安全。

既然我们的java框架已经发展到这一步骤,并且已经出现了这些需求,就肯定需要解决这些困难,就算有困难也需要去使用微服务啊!我们是自己研发还是直接选取市场上比较成熟的技术来使用?

全球的互联网公司都在积极尝试自己的微服务落地方案.在Java领域,最引人注目的就是Spring Cloud。

3. 微服务解决方案:Spring Cloud

3.1 什么是Spring Cloud

Spring Cloud 提供了一些可以让开发人员快速构建分布式服务的工具,比如配置管理,服务发现,熔断,智能路由等.他们可以在任何分布式环境中很好的工作. Spring Cloud 通过集成和扩展多个开源项目,为开发人员提供了一整套解决方案,使他们能够快速构建和管理分布式服务。这些工具和库在任何分布式环境中都能很好地工作,帮助开发人员解决配置管理、服务发现、熔断、智能路由等常见问题,提高系统的稳定性、灵活性和可扩展性。

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

注意:

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

3.2 Spring Cloud版本

Spring Cloud中的所有子项目都依赖SpringBoot,所以SpringBoot和Spring Cloud的版本之间也存在-定的对应关系。⽐如SpringBoot 3.2.X对应的SpringCloud版本是2023.0.X

 3.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 也被迫宣布删除这些维护模块.

现在只有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 Alibaba 是什么 | Spring Cloud Alibaba icon-default.png?t=N7T8https://sca.aliyun.com/docs/2022/overview/what-is-sca/如果说Spring Cloud Netflix是 Spring Cloud 的第一代实现,那么Spring Cloud Alibaba 也可以看做是Spring Cloud 的第二代实现,主要由 Nacos、Sentinel、Seata 等组件组成.

 Spring Cloud 实现对比

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

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

相关文章

image媒体组件属性配合swiper轮播

图片组件&#xff08;image&#xff09; 先插入个图片试试&#xff0c;插入图片用src属性&#xff0c;这是图片&#xff1a; 代码如下&#xff1a; <template><view><swiper indicator-dots indicator-color "#126bae" indicator-active-color &…

CobaltStrike的内网安全

1.上线机器的Beacon的常用命令 2.信息收集和网站克隆 3.钓鱼邮件 4.CS传递会话到MSF 5.MSF会话传递到CS 1上线机器的Beacon的常用命令 介绍&#xff1a;CobaltStrike分为服务端和客户端&#xff0c;一般我们将服务端放在kali&#xff0c;客户端可以在物理机上面&#xff0…

tongweb 部署软航流版签一体化应用示例 提示跨域错误CORS ERROR

目录 问题现象与描述 解决办法 原理解析 什么是CORS 浏览器跨域请求限制 跨域问题解决方法 跨域请求流程 浏览器请求分类解析 http请求方法简介 问题现象与描述 重庆软航科技有限公司提供了一套针对针对word、excel等流式文件转换成PDF版式文件并进行版式文件在线签章…

Qt 加载图片的几种方式 以及加载 loading

项目中经常使用加载图片&#xff1a; 常用有两种方式&#xff1a; 1.使用 QWidget 加载图片&#xff1a; 效果&#xff1a; 样例源码&#xff1a; int pict_H ui->widgetImage->height();int pict_W ui->widgetImage->width();ui->widgetImage->setFixe…

昇思25天学习打卡营第17天|SSD目标检测

学AI还能赢奖品&#xff1f;每天30分钟&#xff0c;25天打通AI任督二脉 (qq.com) SSD目标检测 模型简介 SSD&#xff0c;全称Single Shot MultiBox Detector&#xff0c;是Wei Liu在ECCV 2016上提出的一种目标检测算法。使用Nvidia Titan X在VOC 2007测试集上&#xff0c;SSD…

利用border绘制三角技巧

绘制三角形的效果如图 <html lang"zh-cn"> <head><meta charset"UTF-8"><title>demo</title><style>* {margin: 0;padding: 0;}.box {/* 盒子宽高改成零就变成三角形 &#xff0c;需要哪个方向的三角形就设置哪个方向…

【分布式系统五】监控平台Zabbix实际监控运用(命令+截图详细版)

目录 一.Zabbix 监控 Windows 1.安装zabbix 2.Web 页面添加主机&#xff0c;关联模板 二.Zabbix 监控 Java 应用 1.安装tomcat 2.服务端安装 zabbix-java-gateway 3.Web 页面添加主机&#xff0c;关联模板 三.Zabbix 监控 SNMP 1.服务端安装 snmp 监控程序 2.修改 sn…

RT-Thread和freeRTOS启动流程

一. freeRTOS启动流程 二. RT-Thread启动流程 因为RT-Thread中我们定义了补丁函数也叫做钩子函数--$Sub$$main()--作为一个新功能函数&#xff0c;可以将原有函数劫持下来&#xff0c;并在之后的程序运行中加上$Super $ $前缀来重新调用原始函数。 所以启动流程是$Sub$$main(…

Chiasmodon:一款针对域名安全的公开资源情报OSINT工具

关于Chiasmodon Chiasmodon是一款针对域名安全的公开资源情报OSINT工具&#xff0c;该工具可以帮助广大研究人员从各种来源收集目标域名的相关信息&#xff0c;并根据域名、Google Play应用程序、电子邮件地址、IP地址、组织和URL等信息进行有针对性的数据收集。 该工具可以提…

Nginx-简介

介绍 nginx是一款HTTP和反向代理服务器、邮件代理服务器和通用TCP/IP代理服务器&#xff0c;在俄罗斯广泛使用&#xff0c;用于代理高负载站点。 版本 nginx开源版nginx plus企业版openresty将nginx和lua脚本结合 tengine更稳定、高性能 正向代理 客户端和代理服务是一伙的…

【vue动态组件】VUE使用component :is 实现在多个组件间来回切换

VUE使用component :is 实现在多个组件间来回切换 component :is 动态父子组件传值 相关代码实现&#xff1a; <component:is"vuecomponent"></component>import componentA from xxx; import componentB from xxx; import componentC from xxx;switch(…

生产力工具|viso常用常见科学素材包

一、科学插图素材网站 一图胜千言&#xff0c;想要使自己的论文或重要汇报更加引人入胜&#xff1f;不妨考虑利用各类示意图和科学插图来辅助研究工作。特别是对于新手或者繁忙的科研人员而言&#xff0c;利用免费的在线科学插图素材库&#xff0c;能够极大地节省时间和精力。 …

【代码随想录】【算法训练营】【第58天】 [卡码110]字符串接龙 [卡码105]有向图的完全可达性 [卡码106]岛屿的周长

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 59&#xff0c;周五&#xff0c;继续ding~ 题目详情 [卡码110] 字符串接龙 题目描述 卡码110 字符串接龙 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 […

昇思25天学习打卡营第13天|linchenfengxue

Diffusion扩散模型 关于扩散模型&#xff08;Diffusion Models&#xff09;有很多种理解&#xff0c;本文的介绍是基于denoising diffusion probabilistic model &#xff08;DDPM&#xff09;&#xff0c;DDPM已经在&#xff08;无&#xff09;条件图像/音频/视频生成领域取得…

小蜜蜂WMS与小蜜蜂WMS对接集成根据条件获取客户信息列表(分页)连通新增客户信息(小蜜蜂读写测试)

小蜜蜂WMS与小蜜蜂WMS对接集成根据条件获取客户信息列表&#xff08;分页&#xff09;连通新增客户信息(小蜜蜂读写测试) 接通系统&#xff1a;小蜜蜂WMS 天津市小蜜蜂计算机技术有限公司&#xff08;acbee&#xff0c;TianJinACBEEComputerTechnologyCo.,Ltd&#xff09;成立于…

基于图像处理的滑块验证码匹配技术

滑块验证码是一种常见的验证码形式&#xff0c;通过拖动滑块与背景图像中的缺口进行匹配&#xff0c;验证用户是否为真人。本文将详细介绍基于图像处理的滑块验证码匹配技术&#xff0c;并提供优化代码以提高滑块位置偏移量的准确度&#xff0c;尤其是在背景图滑块阴影较浅的情…

模拟,CF 570C - Replacement

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 570C - Replacement 二、解题报告 1、思路分析 1、长为cnt的连续串的最小操作次数为cnt - 1 2、每次将一个非. 替换为. f要么增加1要么增加2 只有前后都是 . 的时候会增加2 同理&#xff0c;当我们将一…

STM32外扩SRAM及用法

一.概述 一般单片机有片内的RAM&#xff0c;但都不多&#xff0c;比如&#xff1a;STM32F407ZGT6 自带了 192K 字节的 RAM&#xff0c;对一般应用来说&#xff0c;已经足够了&#xff0c;不过在一些对内存要求高的场合&#xff0c;比如做华丽效果的 GUI&#xff0c;处理大量数据…

swagger的接口文档导入到yapi上

一、访问swagger接口 swagger集成到项目后&#xff0c;通过http:\\ip:port/swagger-ui.html 访问。 说明&#xff1a;这里的路径是基于swagger2。如果用swagger3&#xff0c;需要用swagger3的路径进行访问。 访问如图&#xff1a; 这就是swagger接口首页。如果想导入到yapi上…

AI绘画Stable Diffusion 新手入门教程:万字长文解析Lora模型的使用,快速上手Lora模型!

大家好&#xff0c;我是设计师阿威 今天给大家讲解一下AI绘画Stable Diffusion 中的一个重要模型—Lora模型&#xff0c;如果还有小伙伴没有SD安装包的&#xff0c;可以看我往期入门教程2024最新超强AI绘画Stable Diffusion整合包安装教程&#xff0c;零基础入门必备&#xff…