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

“微服务” 架构 与 Spring Cloud

在这里插入图片描述

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

该文章参考学习教材为:
《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 版本兼容,以 兼容为第一要务

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 07:04:11       171 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 07:04:11       189 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 07:04:11       157 阅读
  4. Python语言-面向对象

    2024-05-13 07:04:11       170 阅读

热门阅读

  1. Elasticsearch 8.1官网文档梳理 -综述

    2024-05-13 07:04:11       33 阅读
  2. 抽象类与接口

    2024-05-13 07:04:11       29 阅读
  3. C++简易贪吃蛇

    2024-05-13 07:04:11       47 阅读
  4. linux中passwd --stdin命令含义

    2024-05-13 07:04:11       42 阅读
  5. TCP实现文件传输以及下载

    2024-05-13 07:04:11       43 阅读
  6. 一 MySQL、SQL Server、Oracle三者的区别

    2024-05-13 07:04:11       47 阅读
  7. NIUKE SQL:进阶挑战 (中)

    2024-05-13 07:04:11       37 阅读