Spring Cloud | “微服务“ 架构 与 Spring Cloud

news2024/12/24 11:32:58

“微服务” 架构 与 Spring Cloud

目录:

  • "微服务" 架构 与 Spring Cloud
    • 1. 认识架构
      • "单体" 架构
      • "SOA" 架构
      • "微服务" 架构
    • 2. "微服务架构" 的功能 :
      • ① 微服务架构的 "自动化部署"
      • ② 服务 "集中化管理"
      • ③ 支持 "熔断机制"
    • 3. 初识 Spring Cloud
      • 3.1 Spring Cloud 概述
      • 3.2 Spring Cloud 特点
      • 3.3 Spring Cloud 微服务架构 的 "组件" :
        • (1) Spring Cloud Confg
        • (2) Spring Cloud Netflix
        • (3) Spring Cloud Bus
        • (4) Spring Cloud Stream
        • (5) Spring Cloud Sleuth
      • 3.4 Spring Cloud 的版本号
      • 3.5 Spring Cloud与 Spring Boot 的兼容性

在这里插入图片描述

作者简介 :一只大皮卡丘,计算机专业学生,正在努力学习、努力敲代码中! 让我们一起继续努力学习!

该文章参考学习教材为:
《Spring Cloud微服务架构开发》 黑马程序员 / 编著
文章以课本知识点 + 代码为主线,结合自己看书学习过程中的理解和感悟 ,最终成就了该文章

文章用于本人学习使用 , 同时希望能帮助大家。
欢迎大家点赞👍 收藏⭐ 关注💖哦!!!

(侵权可联系我,进行删除,如果雷同,纯属巧合)


  • 互联网的飞速发展给人们的工作和生活带来了翻天覆地的变化,人们在享受互联网带来的便捷同时,也对互联网产品提出了 更为严格的要求。而 传统架构下互联网产品面对复杂的业务需求,在 降低业务之间 耦合性快速部署项目轻松持续改进项目 上都已 显得力不从心。为了解决上述问题,微服务架构 应运而生。
  • Spring Cloud 是一套完整微服务架构解构解决方案

1. 认识架构

“单体” 架构

  • 一个典型的单体架构就是将所有业务场景 表示层 业务逻辑层 数据访问层 放在一个 “project工程” 中,最终经过 编译打包部署一台 服务器上

    例如,开发一个进销存的系统,我们可以 将项目打包成war包部署服务器。这样的 一个 war 包涵盖了很多模块如下图所示

    在这里插入图片描述

    如上图所示的 单体架构随着业务越来越复杂应用程序需要增加 功能越来越多单体架构代码量越来越大代码可读性可维护性扩展性下降。同时,使用 单体架构 带来的 隐患会比较多,同时由于 系统过于庞大以及 关联较多,应用中的任何一个 Bug ( 漏洞、错误 )都有可能导致整个系统宕机

“SOA” 架构

  • 针对传统的单体架构存在问题,人们设计出了一种 SOA 架构

    ( SOA 架构 : 是一种 “面向服务” 的架构方式,将原来 "单体架构" 按照"功能" 细分为不同的 “子系统” )

  • SOA 架构 是一个 面向服务架构。它是一个 组件模型SOA架构应用程序不同功能单元( 称为 服务 ) 进行 拆分,这些 服务 通过 定义良好的接口契约联系起来接口 是采用 中立的方式进行 定义的,它 独立于实现服务硬件平台操作系统编程语言。这使构建在 各种各样的系统 中的 服务 可以 使用一种统一通用 的方式进行 交互

  • SOA 架构 将原来的 单体架构 “按照功能细分”不同的子系统SOA架构如下图所示

    在这里插入图片描述

    上图可知一个完整的项目会分为多个模块数据库 分为 主库从库 两种,并且 “主库” 与 “从库”数据同步 的。这样的 SOA架构 “解决”单体式架构所遗留下问题

    S0A架构本身也存在一些缺点。S0A架构一般使用某种集中式管理,比如会有审查委员会主架构师架构委员会等部门来严格定义每个系统组件应当做什么如何执行相同类型的功能可能会在多个组件中分别定义记录每个组件使用的语言或者工具集可以是统一的也可以不是
    SOA架构中,系统和服务界定比较模糊,而且 服务的接口协议不固定,且 种类繁多不利于系统维护

“微服务” 架构

  • 学习了 单体架构SOA架构,我们可以知道,系统中的模块与模块之间直接相互访问某个模块本身的错误都有可能影响整个系统的使用。在大数据以及高并发的环境下,系统架构面对更加严苛的挑战为解决这些问题微服务架构 就诞生了。

  • 微服务架构基本思想在于考虑围绕着业务领域组件创建应用这些应用可独立地进行开发管理部署。在分散的组件中使用微服务云架构平台,使部署、管理和服务功能交互变得更加简单

  • 微服务架构是一种将单一应用程序作为一套小型服务开发的方法。每种应用程序在其自己的进程中运行,并与轻量级机制 [通常是HTTP资源应用程序接口 (Application Programming Imterface,API)] 进行通信。这些服务是围绕业务功能构建的,可以通过全自动部署机制进行独立部署

    相比单体架构SOA架构,如何理解微服务架构集中化管理? 因为 微服务架构每个业务功能都是一个独立的项目各个项目之间的 耦合性很低,所以开发人员可以使用不同的编程语言编写程序使用不同的存储系统计算存储数据。前面提到的进销存系统,如果使用微服务架构来开发,可以采用下图所示的结构 :

    在这里插入图片描述

    上图可以看出微服务架构每个服务都有自己独立数据库数据库之间 没有任何联系 。这样的 好处 是,随着业务的不断扩张不同服务与服务之间 不需要提供数据库集成,而是提供 API相互调用独立的数据库使系统的维护变得简单性能明显提高迁移也比较方便。在微服务架构中,数据的存储不仅可以使用关系型数据库,还可以使用非关系型数据库。一个典型的微服务架构系统,每个服务对应的数据库可能各不相同,建议大家根据业务需求选择合适的数据库。

    微服务架构直接通过 HTTP 进行通信的,也可以采用消息队列通信,如采用 RabbitMQKafka 等进行通信。微服务采用不同的编程语言,使用不同的存储技术,进行自动化部署减少了人为控制降低了出错概率

2. “微服务架构” 的功能 :

  • 微服务 的概念源于 2014年3月 Martin Fowler( 马丁·福勒)所写的一篇文章“Microservices” (微服务 )。文中表达了一种观念,微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调互相配合为用户提供最终价值
  • 微服务架构是一种架构风格,一个大型复杂软件应用多个微服务架构组成。系统中的 各个微服务架构被独立部署 ,各个微服务架构之间是松耦合的。每个微服务架构仅关注于完成一项任务并很好地完成该任务。在所有情况下,每项任务代表着一个小的业务能力微服务架构的功能如下

① 微服务架构的 “自动化部署”

  • 微服务架构中,系统会被拆分为 若干个微服务架构每个微服务架构又是一个 独立的应用程序单体架构中的应用程序只需要部署一次,而微服务架构有多少 服务需要部署多少次。随着服务数量的增加部署的难度就会增加。业务的 粒度划分得越细,微服务 架构数量就越多。因此就出现了 自动化部署技术,例如 Docker 容器自动化部署技术方便了微服务架构项目下 各模块在服务器上部署

② 服务 “集中化管理”

  • 微服务架构系统是按照 "业务单元" 来 划分的,服务数量越多管理起来 越复杂。在这里,微服务架构提供了集中化管理组件Spring Cloud Config ,可以在 Spring Cloud Config 配置文件中统一配置服务 , 这个操作很大程度上方便了对项目的集中化管理

③ 支持 “熔断机制”

  • 微服务架构 就是 分布式的。在分布式系统中,服务之间相互依赖的,如果一个服务出现了故障或者网络延迟,在高并发的情况下,就会导致线程阻塞,在很短的时间内该服务的线程资源会消耗殆尽最终使得该服务不可用
  • 由于服务相互依赖,这样可能会导致整个服务的不可用,这就是“雪崩”效应熔断机制是应对“雪崩”效应的一种微服务架构链路保护机制。我们在各种场景下都会接触到熔断这两个字。高压电路中,如果某个地方的电压过高,熔断器就会熔断,对电路进行保护 ; 股票交易中,如果股票指数过高,就也会采用熔断机制,暂停股票的交易。同样,在微服务架构中,熔断机制也是起着类似的作用。当一条链路某个微服务架构不可用或者响应时间太长时,会进行 服务的降级,进而调用熔断该节点的微服务架构,快速返回错误 响应信息 ;当检测到该节点微服务架构调用响应正常后恢复调用链路

3. 初识 Spring Cloud

3.1 Spring Cloud 概述

  • Spring Cloud 是一个基于 Spring Boot 实现的 “微服务开发” 架构。它利用 Spring Boot开发便利性巧妙地简化分布式系统开发
    例如 配置管理服务发现断器使用智能路由控制总线等操作,都可以使用
    Spring Boot
    做到 一键启动部署
  • 可以说,Spring CloudSpring Boot 框架进行 再封装屏蔽掉复杂的配置实现原理,最终给开发者留出了一套 简单易懂易部署易维护分布式系统开发工具包

3.2 Spring Cloud 特点

① 组件丰富,功能齐全

Spring Cloud 拥有 Spring 这个强大后盾,框架的源码也是开源的,而且开发者在不断完善 Spring Cloud 下的组件,其中包括 Eureka服务注册发现中心,主要负责完成微服务架构中服务管理功能 ; Spring Cloud Confg分布式配置中心,可以实现动态修改配置文件 ; Hystrix熔断器,通过熔断机制控制服务第三方库的节点,从而对延迟和故障提供更强大的容错能力。这些组件基本覆盖了日常开发的各个方面

② 开箱即用,快速启动

Spring Cloud基于 Spring Boot 开发的,Spring Boot 具有 快速构建 Spring应用直接嵌入服务器自动化配置 的优点,Spring Cloud 继承 了 Spring Boot 快速构建 和 自动化配置的优点有开箱即用、快速启动的特点。

③ 模块部署方便,项目维护难度降低

Spring Cloud 采用 模块化开发,按照项目功能将项目拆分为不同的模块每个模块独立开发运行模块之间不会互相影响。模块开发完成后,每个模块部署时可以使用 Docker 进行 自动化部署,使得项目部署更加方便。维护时只需要维护具体的模块,不需要改动其他模块的代码,从而降低了模块后期维护的成本。

④ 项目扩展性和稳定性较好

基于 Spring Cloud微服务架构中,每个模块基本都是一个 Spring Boot 项目,它们都有独立的数据库模块下的功能是横向开发的。如果需要扩展新的功能,就可以新建该功能对应的独立数据库以及新的模块,不需要在之前的模块上修改,这样项目 扩展更方便项目稳定性更好

⑤ 具有容错处理机制

项目实际开发中会因为网络连接失败超时服务器硬件故障等原因 导致其中某个模块无法正常运行,从而 导致整个项目发生异常,所以 容错机制变得尤为重要。SpringCloud 提供了Hystrix 组件,该组件专门用于 处理容错,从而能保证某个模块出错后系统有其他备用模块或者善后处理

3.3 Spring Cloud 微服务架构 的 “组件” :

  • Spring Cloud一系列框架有序集合,为开发人员构建微服务架构提供了完整的解决方案Spring Cloud 根据分布式服务协调治理的需求 成立了许多 “子项目”每个项目通过特定的组件去实现

  • 基于 Spring Cloud微服务架构 如下图所示

    在这里插入图片描述

  • Spring Cloud 包含的 常用组件以及模块具体内容如下所示

(1) Spring Cloud Confg

Spring Cloud Confg : 分布式配置中心,负责把配置 放到远程服务器上,集中化管理集群配置。目前支持 ① 本地存储② Git③ Subversion

(2) Spring Cloud Netflix

Spring Cloud Netflix : 核心组件,负责 对多个 Netflix 0SS 开源套件进行整合

  • Eureka : 服务注册发现中心,基于REST服务分布式中间件,主要用于服务管理
  • Hystrix : 熔断器容错管理工具,旨在通过 熔断机制控制服务第三方库的节点 , 从而延迟故障提供 更强大的容错能力’'
  • Ribbon : 云端负载均衡器。支持多种 负载均衡策略,可配合服务发现熔断器使用,在客户端 实现负载均衡
  • Feign : 一个 REST 客户端,基于 RibbonHystrix声明式服务调用组件
  • Zuul : 服务网关,为微服务架构集群提供代理过滤路由等功能
(3) Spring Cloud Bus

Spring Cloud Bus : 事件消息总线,用于在 集群 (例如配置变化事件) 中传播状态变化,可 与 Spring Cloud Confg 联合实现热部署

(4) Spring Cloud Stream

Spring Cloud Stream : 数据流操作开发包,可与 RedisRabbitMOKalka等架构进行消息发送与接收

(5) Spring Cloud Sleuth

Spring Cloud Sleuth : 服务追踪框架,可以与 ZipkinApache HtraceELK 等数据分析、服务跟踪系统进行整合,为跟踪服务解决问题提供了便利

3.4 Spring Cloud 的版本号

  • Spring Cloud版本号 :

    SNAPSHOT : 快照版本可能会被修改。
    M( MileStone ) : 里程碑版本M1 表示第一个里程碑版本。一般同时标注 PRE,表示预览版本。

    SR (Service Release ) : 正式版本。如果正式版有多个,就使用数字标识不同的正式版本,例如SR1表示第一个正式版本,同时一般会标记 GA(GenerallyAvailable) ,表示 稳定版本

3.5 Spring Cloud与 Spring Boot 的兼容性

  • 通过前面的学习知道 Spring Cloud基于Spring Boot开发的。Spring Boot 专注于 快速、方便集成 单个微服务架构,而 Spring Cloud关注全局的服务治理框架SpringCloud 依赖于 Spring Boot

  • 由于 Spring CloudSpring Boot发布了多个版本,选择这些版本时 需要考虑兼容性两者的兼容关系下表所示

    Spring Cloud版本Spring Boot版本
    Greenwich版本兼容 Spring Boot 2.1.x
    Finchley 版本兼容 Spring Boot 2.0.x
    Dalston版本 和 Edgware 版本兼容 Spring Boot 1.5.x
    Camden 版本兼容 Spring Boot 1.4.x
    Brixton 版本兼容 Spring Boot 1.3.x
    Angel版本兼容 Spring Boot 1.2.x

    实际操作中,选择Spring Boot与 Spring Cloud 版本时,没有限制必须使用某一版本,一般标注 GA (稳定)的 版本都可以使用。但有 一点要注意Spring Cloud 版本一定要 与 Spring Boot 版本兼容,以 兼容为第一要务

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

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

相关文章

PostgreSQL的学习心得和知识总结(一百四十三)|深入理解PostgreSQL数据库之Support event trigger for logoff

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…

转载:ubuntu18.04 安装wine以及添加mono和gecko打开简单.net应用的方法

https://www.cnblogs.com/jinanxiaolaohu/p/12191576.html 1. 今天突然想试试能不能用ubuntu跑一下公司的.net的智能客户端(SmartClient). 想到的办法就是 安装wine 但是过程略坑..这里简单说一下总结之后的过程. 2. 第一步安装wine相关内容 查了下有winehq和wine两种. …

凸优化理论学习二|凸函数及其相关概念

系列文章目录 凸优化理论学习一|最优化及凸集的基本概念 文章目录 系列文章目录一、凸函数(一)凸集(二)凸函数的定义及举例(三)凸函数的证明1、将凸函数限制在一条直线上2、判断函数是否为凸函数的一阶条件…

iphone进入恢复模式怎么退出?分享2种退出办法!

iPhone手机莫名其妙的进入到了恢复模式,或者是某些原因需要手机进入恢复模式,但是之后我们不知道如何退出恢复模式怎么办? 通常iPhone进入恢复模式的常见原因主要是软件问题、系统升级失败、误操作问题等导致。那iphone进入恢复模式怎么退出&…

【工具篇】-什么是.NET

“.NET":.NET Core是由Microsoft开发,目前在.NET Foundation(一个非营利的开源组织)下进行管理。.NET Core是用C#和C编写的,并采用MIT协议作为开源协议。 简单来说:就是开发框架。 .NET 又称 .NET 平台或 .NET 框架&#xf…

Centos 7.9 安装 tigervnc-server

环境:当前使用的 Centos 7.9 的光盘作为的本地源。 1 检查是否已安装 tigervnc [rootlocalhost /]# rpm -q tigervnc tigervnc-server 未安装软件包 tigervnc tigervnc-server-1.8.0-21.el7.x86_64 如果安装过卸掉 卸载: rpm -e [rootlocalhost /]# rpm -e tige…

Django项目运行报错:ModuleNotFoundError: No module named ‘MySQLdb‘

解决方法: 在__init__.py文件下,新增下面这段代码 import pymysql pymysql.install_as_MySQLdb() 注意:确保你的 python 有下载 pymysql 库,没有的话可以使用 pip install pymysql安装 原理:用pymysql来代替mysqlL…

【Qt 学习笔记】Qt常用控件 | 容器类控件 | Group Box的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 容器类控件 | Group Box的使用及说明 文章编号&#xff…

力扣例题(用栈实现队列)

目录 链接. - 力扣(LeetCode) 描述 思路 push pop peek empty 代码 链接. - 力扣(LeetCode) 描述 思路 push 例如我们将10个元素放入栈中,假设最左边为栈顶,最右侧为栈底 则为10,9,8,7,6,5,4,3,…

JavaScript之数据类型(3)——object进阶

前言&#xff1a; 利用基础知识来构建对象会发现十分复杂&#xff0c;我们可以结合其他的知识点来为我们object的构建进行优化。 <1>工厂法&#xff1a; 基本格式&#xff1a; function creatObject(属性值1,属性值2,属性值3,...,属性值n) {var 对象名 new Object();对…

VR全景技术在养老院的应用优势浅析

随着时代的快速发展&#xff0c;人口老龄化越来越严重&#xff0c;如何利用VR技术提升养老服务的质量&#xff0c;成为了社会各界关注的焦点。为养老院拍摄制作VR全景&#xff0c;不仅能够为养老院的老人子女们跨越空间限制&#xff0c;实现与家人的情感连接&#xff0c;还可以…

Debian安装Redis、RabbitMQ、Nacos

安装Redis&#xff1a; 启动Redis、开机自启动 sudo systemctl start redis-server #启动sudo systemctl enable redis-server #开机自启 Redis状态(是否在运行) sudo systemctl status redis-server #查看运行状态 redis-cli ping # 客户端尝试连接 安装RabbitMQ&#xff0c;…

Zynq开发-使用PYNQ快速入门摄像头MIPI驱动(OV5640)

目录 1. 简介 2. 配置代码 2.1 初始化寄存器 2.2 分辨率寄存器 2.3 白平衡寄存器 2.4 配置寄存器代码 2.5 顶层代码 3. 细节指引 4. 总结 1. 简介 PYNQ是一种基于Python的开发环境&#xff0c;专门设计用于快速、简便地在Xilinx的Zynq平台上进行开发。在《Zynq开发之…

STM32睡眠模式

文章目录 前言PWR介绍电源框图上电复位和掉电复位可编程电压检测器低功耗模式模式选择电源控制寄存器 睡眠模式停止模式待机模式 前言 在单片机产品中&#xff0c;例如遥控这类产品&#xff0c;长时间处于待机状态下&#xff0c;所以对于这类产品在待机时就应该尽可能的减少不…

您的文件和驱动器上的“密码保护”有多安全?

某些行业&#xff08;例如医疗保健、法律和公司&#xff09;的人们在通过电子邮件发送文件时通常依赖密码保护&#xff0c;认为它可以提供足够的安全性来防止窥探。然而&#xff0c;对 PDF 或 Excel 文件进行简单的密码保护并不像看起来那样万无一失。 使用密码保护文件而不加…

01.Net基础知识

.Net的用途 Web、移动、云、桌面、游戏开发、物联网 &#xff08;IDE&#xff1a;集成开发环境&#xff09; .Net学习资源 Microsoft Learn、GitHub、G码云&#xff08;Gitee&#xff09; Visual Studio初步使用 1&#xff09;可创建的项目种类&#xff08;主要学习以下四…

前后端完全开源!功能丰富的在线教室项目:Agora Flat

Agora Flat&#xff1a;高效集成的在线教室解决方案&#xff0c;重塑互动学习新体验。- 精选真开源&#xff0c;释放新价值。 概览 Agora Flat是在GitHub平台上公开分享的一个全面开源项目&#xff0c;它精心设计为一个高性能的在线教室解决方案&#xff0c;旨在便捷地搭建支持…

JavaEE技术之MySql主从复制及mycat[了解,不讲]

文章目录 1. 主从复制1.1. 主从同步的原理1.2. 检查数据库远程访问权限1.3. 主从配置1.3.1. master配置1.3.2. slave配置1.3.3. 主库创建同步用户1.3.4. 从库配置主从关系1.3.5. 重置主从关系 1.4. 测试主从复制 2. Mycat2.1. Mycat简介2.2. MyCat读写分离原理2.3. 不废话&…

pikachu靶场(xss通关教程)

&#xff08;注&#xff1a;若复制注入代码攻击无效&#xff0c;请手动输入注入语句&#xff0c;在英文输入法下&#xff09; 反射型xss(get型) 1.打开网站 发现有个框&#xff0c;然后我们在框中输入一个“1”进行测试&#xff0c; 可以看到提交的数据在url处有显示&#xf…

[Linux][网络][数据链路层][二][MTU][ARP协议]详细讲解

目录 1.MTU1.认识MTU2.MTU对IP协议的影响3.MTU对UDP协议的影响4.MTU对TCP协议的影响 2.ARP协议0.情景铺垫1.ARP协议的作用2.能不能根据路由器 该报文的目标IP&#xff0c;确认清楚这个IP一定在它的子网当中&#xff1f;3.以太网协议(MAC帧)与ARP协议之间有什么关系&#xff1f…