🥳🥳Welcome Huihui's Code World ! !🥳🥳
接下来看看由辉辉所写的关于SpringCloud的相关操作吧
目录
[🥳🥳Welcome Huihui's Code World ! !🥳🥳](#🥳🥳Welcome Huihui's Code World ! !🥳🥳)
[一.Spring Cloud是什么](#一.Spring Cloud是什么)
[二.Spring Cloud的详解](#二.Spring Cloud的详解)
[结合说明Spring Cloud](#结合说明Spring Cloud)
[三.Spring Cloud的核心组件](#三.Spring Cloud的核心组件)
[四.Spring Cloud 关系](#四.Spring Cloud 关系)
[1.Spring Cloud Netflix 第一代](#1.Spring Cloud Netflix 第一代)
[2.Spring Cloud Alibaba 第二代](#2.Spring Cloud Alibaba 第二代)
一.Spring Cloud是什么
Spring Cloud是基于Spring框架的一套用于快速构建分布式系统的开发工具集。它提供了常用的分布式系统模式,如服务注册与发现、配置中心、负载均衡、断路器、网关等,同时也支持各种云平台的集成,例如AWS、Azure、Google Cloud等。
Spring Cloud主要关注以下几个方面:
服务注册和发现:Spring Cloud提供了服务注册和发现的功能,使得微服务能够动态地注册自己的服务实例,并能够自动发现和调用其他服务。
配置管理:Spring Cloud提供了集中式的配置管理功能,可以方便地管理微服务的配置信息,支持动态刷新配置。
负载均衡:Spring Cloud集成了负载均衡的功能,可以将请求均匀地分发到多个服务实例上,提高系统的可用性和性能。
断路器:Spring Cloud提供了断路器模式的实现,用于处理微服务之间的故障和延迟,提高系统的容错性。
链路追踪:Spring Cloud支持分布式链路追踪,可以跟踪并记录微服务之间的调用关系,方便排查和解决问题。
通过使用Spring Cloud,开发人员可以更方便地构建和管理分布式系统,降低系统之间的耦合度,提高系统的可伸缩性和可维护性
二.Spring Cloud的详解
如果单说Spring Cloud的定义以及它的组件的话,好像都不是很好理解,感觉都太官方了,所以我这里按照自己的理解,给大家举一个通俗易懂的例子
生活例子
假设你有一个大型餐厅 ,每天会有很多顾客光顾。
为了提供更好的服务和管理,你决定将餐厅分为几个部分:
点餐台
厨房
结账台
以上每个部分都有自己的任务和职责。
- 在这里,点餐台可以看作是一个服务,负责接受顾客的点餐请求。
- 而厨房是另一个服务,负责根据点餐台的请求来烹饪食物。
- 结账台也是一个服务,负责收银和处理支付。
每个服务都有自己的工作,但是它们需要相互协作才能完成整个服务流程。
现在,如果有一个新的顾客来到餐厅,他会去点餐台进行点餐,并将点餐信息传递给厨房。厨房根据点餐信息准备食物,并将完成的食物送回给点餐台。最后,顾客去结账台结账并完成支付
例子分析
- 大型的餐厅就好比于我们的一个大型的项目
- 其中有很多顾客光顾餐厅就相当于有很多的用户会访问我们的项目
- 将餐厅分为几个部分,就相当于我们把一个项目分成好几个模块
- 需要相互协作才能完成整个服务流程,也相当于我们项目中处理用户请求一样,每个模块都会发挥到自己的作用
我们在餐厅吃饭的时候,可能会遇到这样的情况,假设我们点好菜,但是菜一直没有上齐,我们又很想快点吃到饭,那我们这个时候是不是需要催一下厨房,让它赶快把菜炒好。但是我们顾客也不知道这个餐厅的厨房到底在哪里,所以这个时候我们一般都会请求服务员来帮助我们去催一下厨房。
同样的,我们把项目分成了几个模块,是不是也需要一个地方来管理这些模块呢?Spring Cloud就起到了这个的作用。它提供了服务注册与发现,就像是一个餐厅的导航板,告诉顾客每个服务的位置。同时,它还提供了负载均衡的功能,就像是餐厅内有多个点餐台和厨房窗口,可以平均分配顾客的请求,提高服务效率。此外,Spring Cloud还提供了断路器的机制,就像是餐厅突然出现了问题,会自动切换到备用方案,避免整个服务流程崩溃
首先,我们将餐厅拆分为三个服务:点餐台、厨房和结账台。每个服务都有自己的任务和职责。
结合说明Spring Cloud
点餐台服务负责接受顾客的点餐请求,处理顾客的点餐信息,并将点餐信息传递给厨房。这个服务需要保证高可靠性和高并发性,因为每天会有很多顾客在这里进行点餐。
厨房服务负责根据点餐台的请求来烹饪食物,并将完成的食物送回给点餐台。这个服务需要保证高吞吐量和高性能,因为它需要快速地响应点餐台的请求,同时还需要保证食物的质量和口感。
结账台服务负责收银和处理支付,将顾客的支付信息传递给支付平台。这个服务需要保证高安全性和高可靠性,因为它需要处理顾客的敏感信息,同时还需要保证支付的准确性和可追溯性。
接下来,我们使用Spring Cloud来构建这些服务。首先,我们使用服务注册与发现模式来注册每个服务的地址,让其他服务可以通过注册中心查询并调用它。这样,我们就可以将每个服务拆分成多个实例,并通过负载均衡机制来平均分配请求,提高系统的吞吐量和可用性。
其次,我们使用配置中心来动态修改服务的配置,比如修改菜单价格、添加新的菜品等。这样,我们就可以在不重启服务的情况下,快速地更新服务的配置信息。
最后,我们使用断路器来避免服务故障和系统崩溃。当某个服务出现故障时,断路器会自动切换到备用方案,保证整个服务流程的顺利进行。
总之,Spring Cloud提供了一套完整的分布式系统解决方案,可以帮助我们更加轻松地构建分布式系统,并提供了常用的分布式系统模式,使得整个系统更加稳定、可靠。【也就是里面提供了很多的组件,供我们来完成需求】
三.Spring Cloud的核心组件
1、注册中心组件
Spring Cloud Netflix Eureka(服务治理)
Eureka是微服务架构中的注册中心,专门负责服务的注册与发现。比如订单服务想要调用库存服务、仓储服务,或者是积分服务,怎么调用? 订单服务压根儿就不知道人家库存服务在哪台机器上啊!他就算想要发起一个请求,都不知道发送给 谁,有心无力!
这时候注册中心这个组件就能发挥到作用了
- 它提供服务注册服务,各个节点启动后,会在 Eureka Server 中进行注册,这样 Eureka Server 的服务注册表将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到;
- Eureka Server 之间通过复制的方式完成数据的同步,Eureka 还提供了客户端缓存机制,即使所有的 Eureka Server 都挂掉,客户端依然可以利用缓存中的信息消费其他服务的 API;
- 在应用启动后,Eureka Client 将会向 Eureka Server 发送心跳,默认周期为 30 秒,如果 Eureka Server 在多个心跳周期内(默认 90 秒)没有接收到某个节点的心跳,Eureka Server 将会进入自我保护机制;
2、负载均衡组件
Spring Cloud Netflix Ribbon,各个微服务进行分摊,提高性能
Netflix Ribbon的作用是是负载均衡,会帮你在每次请求时选择一台机器,均匀的把请求分发到各个机器上。可以想象一家电商网站,每天都有大量的用户访问该网站来查找商品、下订单等。如果所有的请求都发送到同一个服务器上处理,当访问量增加时,这个服务器可能会超负荷运行,导致网站响应变慢甚至崩溃。
为了解决这个问题,可以使用到Spring Cloud中的负载均衡组件
负载均衡:Ribbon可以根据预定义的负载均衡策略(如轮询、随机、加权等)将请求分发到后端的多个服务实例上。这样可以避免某个服务实例过载,提高整个系统的性能和可扩展性。
故障转移:当某个服务实例不可用或出现故障时,Ribbon可以自动将请求转发到其他可用的服务实例上,确保系统的稳定性和可靠性。
服务发现:Ribbon可以与Netflix的服务发现工具Eureka等集成,实现动态的服务发现。它可以从服务注册中心获取可用的服务实例列表,并根据负载均衡策略选择合适的服务实例。
定制化配置:Ribbon提供了一系列的配置选项,可以根据应用的需求进行灵活的定制。开发人员可以配置负载均衡策略、超时设置、重试机制等,以满足具体的业务需求。
3、熔断器组件(断路器)
**Spring Cloud Netflix Hystrix,**保护系统,控制故障范围
假设有一个电商网站,它通过微服务架构实现了用户服务、订单服务和支付服务等多个服务。其中,订单服务调用了支付服务来完成支付操作。在高峰期或异常情况下,支付服务出现了故障或响应延迟变得很高。此时如果没有使用熔断器,那么可能导致订单服务无法及时响应,其他依赖该服务的服务(如库存服务)也将受到影响。这可能导致整个系统的故障蔓延,使得用户无法下单,库存无法更新等。
使用了熔断器组件就会是不一样的结果了:
故障隔离:Hystrix使用断路器模式来实现故障隔离。当一个服务发生故障或超时时,Hystrix可以将请求快速失败并返回一个备选的响应,而不会影响到其他服务的正常运行。这样可以防止故障在整个系统中的传播,提高系统的稳定性。
降级策略:Hystrix提供了降级功能,可以在主服务不可用时提供备选的响应。开发人员可以定义降级逻辑,例如返回默认值、调用缓存数据或执行简化的逻辑,以确保在主服务不可用时仍能够提供一定程度的功能。
超时控制:Hystrix允许开发人员为每个服务调用设置超时时间,并在超时发生时进行处理。通过设置适当的超时时间,可以避免长时间的阻塞,提高系统的响应性能。
实时监控和指标收集:Hystrix提供了丰富的实时监控和指标收集功能,可以帮助开发人员了解系统的健康状况和性能表现。通过监控Hystrix的统计数据,开发人员可以及时发现潜在的问题,并采取相应的措施加以处理。
4、网关服务组件
Zuul,Spring Cloud Gateway;api网关,路由,负载均衡等多种作用
假设有一个电子商务平台,它基于微服务架构构建。在该平台中,有多个微服务,包括用户服务、商品服务和订单服务。每个微服务都有自己的API,用于处理相关的业务逻辑。
在没有网关路由的情况下,客户端需要直接与每个微服务进行通信。例如,当客户端想要获取商品信息时,它必须向商品服务发送请求。同样地,当客户端想要创建订单时,它必须向订单服务发送请求。但是,这种直接通信的方式存在一些问题:客户端需要了解每个微服务的地址和API细节。对于一个复杂的系统来说,客户端可能需要维护大量的连接和请求逻辑,增加了客户端的复杂性 。没有统一的入口,各个微服务可能都需要进行独立的认证和授权。这样会导致安全策略分散,难以集中管理和更新 。如果有新的微服务加入或旧的微服务被替换,客户端需要相应地更新和调整连接和请求逻辑**【缺乏灵活性】。**
如果使用了网关服务的组件,就能够很好的解决这些问题
统一入口:网关路由作为系统的统一入口,集中处理所有的外部请求。它可以将所有的请求转发到适当的微服务,使得客户端无需直接与每个微服务进行通信。这简化了客户端的调用方式,并减少了客户端的负担。
请求路由和负载均衡:网关路由组件可以根据请求的路径、参数或头部信息等进行路由,将请求转发给相应的微服务实例。它还可以结合负载均衡算法,将请求均匀地分发给多个微服务实例,以提高系统的可扩展性和负载能力。
安全性:网关路由可以作为安全层,对外部请求进行认证、授权和加密处理。它可以集成各种安全机制,如OAuth、JWT和SSL/TLS等,确保只有经过授权的请求才能访问后端的微服务。
缓存和数据聚合:网关路由可以缓存一些常用的响应结果,避免重复计算或查询后端的微服务。它还可以根据需要从多个微服务中聚合数据,提供更高效的响应和用户体验。
监控和日志:网关路由可以集成监控和日志系统,对请求进行跟踪和记录。这样可以方便开发人员进行系统性能分析、故障排查和日志审计等工作。
API 管理和版本控制:网关路由可以提供API管理功能,包括API文档生成、版本控制和订阅管理等。它可以帮助开发人员更好地管理和维护不同版本的API,并提供友好的接口文档给客户端使用
5、配置中心
Spring Cloud Config,将配置文件组合起来,放在远程仓库,便于管理
假设我们有一个电子商务平台,其中包含多个微服务,例如用户服务、商品服务和订单服务。每个微服务都需要一些配置信息,如数据库连接信息、API密钥和日志级别。
在没有配置中心的情况下,这些配置信息可能被硬编码在各个微服务的代码中。当需要修改某个配置时,我们必须逐个修改每个微服务的代码,并重新部署每个微服务,这是非常繁琐且容易出错的
现在,我们引入一个配置中心组件,例如使用Spring Cloud Config。我们将所有的配置信息集中存储在配置中心中,例如Git仓库或数据库
集中管理配置信息:配置中心允许将系统的配置信息集中存储在一个地方,而不是分散在各个微服务或应用程序中。这样做可以简化配置的管理和维护,提高配置的可见性和一致性。
动态刷新配置:配置中心可以提供动态刷新配置的机制。当配置中心的配置信息发生变化时,可以自动通知到相关的微服务或应用程序,并实现实时的配置更新。这样,系统无需重启或重新部署,就能够应对配置的变化,提高系统的灵活性和可扩展性。
提高安全性:配置中心可以加强对敏感配置信息的保护。通过配置中心,可以对不同的配置进行权限控制,只有经过授权的用户或应用程序才能够获取到相应的配置信息。这样可以避免敏感信息泄露的风险,提升系统的安全性。
版本管理:配置中心可以支持配置的版本管理。每次配置的修改都可以被记录下来,并且可以回滚到之前的版本。这对于排查问题、恢复误操作或者跟踪配置变更历史非常有帮助。
简化部署流程:使用配置中心可以简化应用程序的部署流程。在部署新的实例时,只需要从配置中心获取相应的配置信息即可,而无需手动修改和配置。这样可以提高部署的效率和一致性。
6.声明式HTTP客户端
假设我们有一个微服务架构,其中有两个服务:订单服务和用户服务。订单服务需要调用用户服务获取用户信息。在没有Feign的情况下,我们需要手动编写HTTP客户端代码,发送HTTP请求到用户服务,然后解析响应结果。这样做的过程繁琐而容易出错,并且需要大量的重复性工作
简化服务间调用:Feign让服务间调用变得更加简单和直观,开发者只需要定义接口并注解描述服务间调用的参数、路径、HTTP方法和返回值等信息,然后Feign会自动生成具体的客户端实现代码。这样服务间调用就像调用本地方法一样,不需要自己编写HTTP客户端代码,减少了工作量和出错的风险。
提高可维护性:使用Feign,开发者可以将服务间调用的契约描述集中到接口定义中,使得服务间调用的规范和约束更加明确和统一,便于维护和修改。例如,如果服务提供者的API发生变化,只需要修改接口定义即可,而不需要修改所有的客户端代码。
支持负载均衡:Feign内置了Ribbon负载均衡器,支持对服务提供者进行负载均衡。开发者可以通过配置不同的Ribbon策略来实现不同的负载均衡算法,如轮询、随机等。
支持拦截器:Feign支持自定义拦截器,开发者可以通过实现RequestInterceptor接口来添加自己的拦截逻辑,例如添加请求头、身份认证等。
支持多种协议:Feign支持HTTP、HTTPS和HTTP2等多种协议,可以根据具体的需求进行选择。同时,它也支持对请求和响应的压缩和解压缩,减少网络传输的数据量。
四.Spring Cloud 关系
Spring Cloud 包含很多子项目: Netflix 和 Alibaba 两个标准使用最多
1.Spring Cloud Netflix 第一代
针对多种 Netflix 组件提供的开发工具包,其中包括 Eureka、Ribbon、Feign、Hystrix、Zuul、 Archaius 等。
Netflix Eureka:一个基于 Rest 服务的服务治理组件,包括服务注册中心、服务注册与服务发现机 制的实现,实现了云端负载均衡和中间层服务器的故障转移。
- Netflix Ribbon:客户端负载均衡的服务调用组件。
- Netflix Hystrix:容错管理工具,实现断路器模式,通过控制服务的节点,从而对延迟和故障提供 更强大的容错能力。
- Netflix Feign:基于 Ribbon 和 Hystrix 的声明式服务调用组件。
- Netflix Zuul:微服务网关,提供动态路由,访问过滤等服务。
- Netflix Archaius:配置管理 API,包含一系列配置管理 API,提供动态类型化属性、线程安全配置 操作、轮询框架、回调机制等功能。
2.Spring Cloud Alibaba 第二代
同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案。 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的 必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。 依托 Spring Cloud Alibaba,只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微 服务解决方案,通过阿里中间件来迅速搭建分布式应用系统
(1)阿里开源组件
- Nacos:阿里巴巴开源产品,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平 台。
- Sentinel:面向分布式服务架构的轻量级流量控制产品,把流量作为切入点,从流量控制、熔断降 级、系统负载保护等多个维度保护服务的稳定性。
- RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的 消息发布与订阅服务。
- Dubbo:Apache Dubbo™ 是一款高性能 Java RPC 框架,用于实现服务通信。
- Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
(2)阿里商业化组件
- Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产 品。
- Alibaba Cloud OSS:阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供 的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和访 问任意类型的数据。
- Alibaba Cloud SchedulerX:阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、 高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
- Alibaba Cloud SMS:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速 搭建客户触达通道。
好啦,今天的分享就到这了,希望能够帮到你呢!😊😊