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

“微服务” 架构 与 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 版本兼容,以 兼容为第一要务

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot 使用logback(多环境配置)

Logback是由log4j创始人设计的又一个开源日志组件。可用于项目日志功能。官网地址 第1步&#xff1a;添加坐标依赖 <!--logback--> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version…

ESP-01S刷固件ESP8266_NonOS_AT_Bin_V1.7.5_1 笔记240510

ESP-01S刷固件ESP8266_NonOS_AT_Bin_V1.7.5_1 笔记240510 固件下载地址 ESP-AT固件页面: https://www.espressif.com.cn/zh-hans/products/sdks/esp-at/resource 直接下载ESP8266 NonOS AT Bin V1.7.5.zip: https://www.espressif.com.cn/sites/default/files/ap/ESP8266_No…

Baidu Comate:释放编码潜能,革新软件开发

Baidu Comate Baidu Comate&#xff0c;智能代码助手&#xff0c;凭借着文心大模型的强大支撑&#xff0c;结合了百度多年的编程实战数据和丰富的开源资源&#xff0c;形成了一款崭新的编码辅助利器。它不仅具备着高智能、多场景、价值创造的特质&#xff0c;更可广泛应用于各…

sklearn之线性回归——以上证红利指数为例

文章目录 线性回归概念使用sklearn实现上证中立指数预测内置数据集的加载与处理 外部数据集的加载和处理数据内容数据加载和处理 开始预测分割数据集导入线性回归模型查看线性回归模型的系数绘制预测结果预测效果评估 最终代码 线性回归 线性回归&#xff08;Linear Regressio…

flutter开发实战-人脸识别相机使用

flutter开发实战-人脸识别相机使用 当需要拍摄的时候&#xff0c;需要检测到人脸再进行后续的操作&#xff0c;这里使用的是face_camera 一、引入face_camera 在工程的pubspec.yaml中引入插件 # 检测人脸face_camera: ^0.0.8iOS端需要设置相关权限 在info.plist文件中&…

数据库出现死锁的解决方法参考

死锁引起的原因一般是多个用户并发访问数据库导致的问题&#xff0c;或是因为某个进程挂死以后资源未释放导致的。通过onstat –p可查看deadlks项大于0即表示历史总计死锁次数。对于被锁的表进行操作的时候会出现-143 ISAM error: deadlock detected的错误。当其他会话访问此表…

YOLOv5 V7.0 - rknn模型的验证 输出精度(P)、召回率(R)、mAP50、mAP50-95

1.简介 RKNN官方没有提供YOLOv5模型的验证工具&#xff0c;而YOLOv5自带的验证工具只能验证pytorch、ONNX等常见格式的模型性能&#xff0c;无法运行rknn格式。考虑到YOLOv5模型转换为rknn会有一定的精度损失&#xff0c;但是需要具体数值才能进行评估&#xff0c;所以需要一个…

【目标检测论文解读复现NO.37】基于改进的 YOLOv8 变电设备红外图像检测

前言 此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0c…

Python 将Excel转换为多种图片格式(PNG, JPG, BMP, SVG)

目录 安装Python Excel库 使用Python将Excel工作表转换为PNG&#xff0c;JPG或BMP图片 使用Python将Excel特定单元格区域转换为PNG&#xff0c;JPG或BMP图片 使用Python将Excel工作表转换为SVG图片 有时&#xff0c;你可能希望以图片形式分享Excel数据&#xff0c;以防止他…

【C++】string底层的实现原理(简单详细)

前言 本篇文章我将按照C文档库中的模块顺序来实现和讲解其实现原理&#xff0c;我们只讲各板块中常用的 目录 一&#xff0c;Member functions&#xff08;成员函数&#xff09; 二、Iterators&#xff08;迭代器&#xff09; 三、Capacity&#xff08;容器&#xff09; 常…

ElasticSearch集群环境

ElasticSearch集群环境 1、Linux单机 下载地址&#xff1a;LINUX X86_64 (elastic.co) 下载之后进行解压 tar -zxf elasticsearch-7.8.0-linux-x86_64.tar.gz 名字太长了改个名字改成es mv elasticsearch-7.8.0 es因为安全问题&#xff0c;Elasticsearch 不允许 root 用户…

基于单片机的空气质量检测系统设计(51+4G版)-设计说明书

设计摘要&#xff1a; 本设计是基于单片机的空气质量检测系统设计涉及以下主要功能&#xff0c;旨在监测甲烷和一氧化碳的浓度&#xff0c;并在浓度过高时采取相应措施&#xff0c;以确保室内空气质量的安全。该系统使用传感器对甲烷和一氧化碳的浓度进行检测。传感器将收集到…

虚拟化技术 安装和配置StartWind iSCSI目标服务器

一、实验内容 安装StartWind iSCSI目标服务器配置StartWind iSCSI目标服务器 二、实验主要仪器设备及材料 安装有64位Windows操作系统的台式电脑或笔记本电脑&#xff0c;建议4C8G或以上配置已安装vSphere Client已创建虚拟机并在其上安装CentOS6.5StarWind安装介质starwind.…

主机和ubuntu连接

在这里插入图片描述 提示&#xff1a;文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问&#xff1a; 本文目标&#xff1a; 一、背景 最近在hw使用Clion连接服务器&#xff0c;就想把自己的电脑配置好&#xff0c;翻出来正点原子的教程&#xff0c;【正点原子】…

Springboot集成Netflix-ribbon、Enreka实现负载均衡-12

Netflix Ribbon简介 Netflix Ribbon是Netflix发布的云中间层服务开源项目&#xff0c;主要功能是提供客户端的软件负载均衡算法&#xff0c;将Netflix的中间层服务连接在一起。 具体来说&#xff0c;Ribbon是一个客户端负载均衡器&#xff0c;可以在配置文件中列出所有的服务…

Golang | Leetcode Golang题解之第84题柱状图中最大的矩形

题目&#xff1a; 题解&#xff1a; func largestRectangleArea(heights []int) int {n : len(heights)left, right : make([]int, n), make([]int, n)for i : 0; i < n; i {right[i] n}mono_stack : []int{}for i : 0; i < n; i {for len(mono_stack) > 0 &&am…

PMOS和NMOS

一. MOS管简介 MOS管是场效应管的一种&#xff0c;主要有两种结构形式&#xff1a;N沟道和P沟道&#xff0c;又根据场效应原理的不同&#xff0c;分为耗尽型&#xff08;当栅压为零时有较大漏极电流&#xff09;和增强型&#xff08;当栅压为零&#xff0c;漏极电流也为零&…

通过物联网管理多台MQTT设备-基于米尔T527开发板

本篇测评由电子工程世界的优秀测评者“JerryZhen”提供。 本文将介绍基于米尔电子MYD-LT527开发板的网关方案测试。 一、系统概述 基于米尔-全志 T527设计一个简易的物联网网关&#xff0c;该网关能够管理多台MQTT设备&#xff0c;通过MQTT协议对设备进行读写操作&#xff0c;…

CMakeLists.txt语法规则:改变行为的变量说明一

一. 简介 前面一篇文章学习了 CMakeLists.txt语法中的 部分常量变量&#xff0c;具体学习提供信息的变量&#xff0c;文章如下&#xff1a; CMakeLists.txt语法规则&#xff1a;提供信息的变量说明一-CSDN博客 CMakeLists.txt语法规则&#xff1a;提供信息的变量说明二-CSD…

【JavaEE网络】HTTPS详解:从对称与非对称加密到证书认证

目录 HTTPSHTTPS 是什么“加密” 是什么HTTTPS 的工作过程引入对称加密引入非对称加密引入证书完整流程总结 HTTPS HTTPS 是什么 HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现…