一 SpringCloud简介
1.1 SpringCloud是什么
SpringCloud,基于SpringBoot提供了一套微服务解决方案,包括服务注册与发现,配置中心,全链路监控,服务网关,负载均衡,熔断器等组件,除了基于NetFlix的开源组件做高度抽象封装之外,还有一些选型中立的开源组件。
SpringCloud利用SpringBoot的开发便利性,巧妙地简化了分布式系统基础设施的开发,SpringCloud为开发人员提供了快速构建分布式系统的一些工具,包括配置管理,服务发现,断路器,路由,微代理,事件总线,全局锁,决策竞选,分布式会话等等,他们都可以用5pringBoot的开发风格做到一键启动和部署。
SpringBoot并没有重复造轮子,它只是将目前各家公司开发的比较成熟,经得起实际考研的服务框架组合起来,通过SpringBoot风格进行再封装,屏敝掉了复杂的配置和实现原埋,最终给开发者留出了一套简单易懂,易部署和易维护的分布式系统开发工具包。
SpringCloud 是分布式微服务架构下的一站式解决方案,是各个微服务架构落地技术的集合体,俗称微服务全家桶。
1.2 SpringCloud的核心理念与优势
SpringCloud的核心理念是通过标准化的API和易于使用的组件,加速微服务的开发和部署过程。它的优势包括:
- 简化开发过程:提供了一整套组件和服务,降低了开发人员在不同技术间的切换成本。
- 增强可维护性:通过统一的接口和抽象层,使得服务的管理和维护变得更加简单。
- 提高可扩展性:灵活的架构设计让服务可以方便地进行水平扩展和故障恢复。
1.3 springCloud和SpringBoot关系
- SpringBoot专注于快速方便的开发单个个体微服务。
- SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供:配置管理,服务发现,断路器,路由,微代理,事件总线,全局锁,决策竟选,分布式会话等等集成服务。
- SpringBoot可以离开SpringCloud独立使用,开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系。
- SpringBoot专注于快速、方便的开发单个个体微服务,SpringCloud关注全局的服务治理框架。
二 基础概念
2.1 服务发现与注册
服务发现是微服务架构中的关键组件,它允许某个服务知道其他服务所在的位置。
服务注册是服务将自己注册到一个注册中心的过程,以便其他服务可以发现它。
2.2 断路器
用于防止系统雪崩效应,当某个服务不稳定或不可用时,断路器可以提供回退机制。
2.3 路由
在微服务架构中,API网关作为单一入口点,可以根据请求的规则路由到不同的服务。
2.4 负载均衡
在多个服务实例之间分配请求,以优化资源使用、最大化吞吐量、减少延迟和防止任何单个资源的过载
2.5 微服务架构
微服务架构可以说是SOA架构的⼀种拓展,这种架构模式下它拆分粒度更⼩、服务更独⽴。把应⽤拆分成为⼀个个微⼩的服务,不同的服务可以使⽤不同的开发语⾔和存储,服务之间往往通过Restful等轻量级通信。微服务架构关键在于微⼩、独⽴、轻量级通信。微服务是在SOA上做的升华粒度更加细致,微服务架构强调的⼀个重点是“业务需要彻底的组件化和服务化。
三 Spring Cloud主要功能
SpringCloud的核心思想是将系统中的各个服务模块化,每个模块对外提供一组API接口,其他模块可以通过这些API接口来调用该模块提供的服务,在保证互不影响的同时完成各自的任务。Spring Cloud的主要功能如下:
3.1 配置中心
通过配置中心集中管理配置信息,实现动态调整分布式系统的配置,避免了重启服务的麻烦,使得分布式系统中的配置可以在不重启服务的情况下进行动态调整。
3.2 服务网关
作为整个系统的入口,统一处理外部请求,实现路由和过滤等功能。
3.3 服务注册与发现
允许服务在启动时注册自己的信息,并通过服务注册中心发现其他服务的位置,实现服务之间的通信。
3.4 路由
实现智能路由功能,根据条件将请求路由到不同的服务实例。
3.5 服务间调用
支持服务之间的相互调用。
3.6 负载均衡
在多个服务实例之间均衡地分发请求,提高系统性能和可靠性。
3.7 断路器
在微服务架构中,由于服务之间的调用可能会出现故障或超时,为了防止故障在系统间蔓延,断路器模式可以在服务出现故障时进行熔断,保护整个系统。
3.8 分布式消息队列
实现异步消息通信,解耦服务间的依赖,实现解耦和削峰填谷等功能。
微服务架构是Spring Cloud的背景之一。微服务架构将一个大型应用程序划分成一组小的服务,每个服务都可以独立部署和扩展,通过轻量级的通信机制相互协调和配合,从而提供最终价值给用户。Spring Cloud正是针对这种架构模式提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。
三 SpringCloud常用组件
Spring Cloud是一套基于Spring Boot的微服务框架,它提供了许多用于构建分布式系统的工具和组件。在Spring Cloud中,有几个常用的组件,它们各自扮演着不同的角色,共同支撑起整个微服务架构。以下是这些常用组件及其作用:
3.1 服务注册与发现
服务注册与发现是微服务架构中的基础组件,用于管理服务实例的注册与发现。通过服务注册与发现,服务提供者将自己的服务实例注册到注册中心,而服务消费者则从注册中心获取可用的服务实例列表,实现动态的服务发现和负载均衡。Spring Cloud中常用的服务注册与发现组件包括Nacos、Eureka、Consul等。
3.2 熔断器
熔断器是微服务架构中用于处理分布式系统中的故障和异常的组件。当某个服务出现故障或延迟过高时,熔断器能够快速地中断流量,防止故障的进一步扩散。在Spring Cloud中,常用的熔断器组件是Hystrix。
3.3 负载均衡
负载均衡是微服务架构中用于分配请求流量的组件。通过负载均衡,可以将请求分发到多个服务实例上,实现负载均衡和高可用性。Spring Cloud中常用的负载均衡组件包括Ribbon和Nginx等。
3.4 API网关
API网关是微服务架构中用于统一管理和对外暴露微服务接口的组件。通过API网关,可以将多个微服务的接口统一管理和调度,实现路由、安全、限流等功能。Spring Cloud中常用的API网关组件包括Zuul和Spring Cloud Gateway等。
这些组件在微服务架构中的作用是不可或缺的。它们各自承担着不同的职责,共同保障了微服务架构的稳定性和可用性。在实际开发中,可以根据具体的业务需求选择合适的组件,以实现最佳的性能和可扩展性。同时,也需要不断学习和掌握新的技术和工具,以适应不断变化的业务需求和技术环境。
四 SpringCloud实践
4.1 创建springboot项目
如果在这边创建springboot的时候,提示无法连接到http://start.spring.io,可以把该地址改成国内镜像地址https://start.aliyun.com/,
然后创建2个模块,user-consumer与user-provider
创建完后,如下:
其中,根目录下的build.gradle如下
buildscript {ext {springBootVersion = '2.3.2.RELEASE'}repositories {maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }maven { url 'https://plugins.gradle.org/m2/' }}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")classpath "io.spring.gradle:dependency-management-plugin:1.0.10.RELEASE"}
}
//所有模块/项目的通用配置
allprojects {group 'com.example'version '1.0-SNAPSHOT'apply plugin: 'idea'apply plugin: 'org.springframework.boot'apply plugin: "io.spring.dependency-management"
}//子模块/项目的统一配置
subprojects {apply plugin: 'java'apply plugin: "idea"java {sourceCompatibility = JavaVersion.VERSION_11}//指定编码格式[compileJava, compileTestJava, javadoc]*.options*.encoding = 'UTF-8'repositories {mavenLocal()maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }mavenCentral()jcenter()maven { url "https://repo.spring.io/snapshot" }maven { url "https://repo.spring.io/milestone" }}//包依赖管理dependencyManagement {dependencies {//spring boot 版本dependency("org.springframework.boot:spring-boot-starter-web:$springBootVersion")// JSONdependency("com.alibaba:fastjson:1.2.83")//commons-codecdependency("commons-codec:commons-codec:1.15")}}//全局依赖包dependencies {// Log4j2implementation("org.springframework.boot:spring-boot-starter-log4j2:$springBootVersion")implementation 'org.apache.logging.log4j:log4j-spring-boot:2.17.2'implementation 'org.apache.logging.log4j:log4j-api:2.17.2'implementation 'org.apache.logging.log4j:log4j-core:2.17.2'implementation 'org.apache.logging.log4j:log4j-jul:2.17.2'implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2'implementation 'com.lmax:disruptor:3.4.4'}configurations {//移除spring boot 默认logger依赖all*.exclude module: 'spring-boot-starter-logging'}
}
子模块user-consumer的build.gradle如下
plugins {id 'java'id 'application'id 'io.spring.dependency-management'id 'org.springframework.boot'
}
group 'cn.qzzg'
version '1.0-SNAPSHOT'
mainClassName = 'cn.qzzg.patient.PatientInWebApplication'dependencies {implementation("com.alibaba:fastjson")implementation("org.apache.commons:commons-lang3")implementation("org.springframework.boot:spring-boot-starter-web")
}