第九章 SpringCloud框架

简介: Nacos支持服务注册发现与配置管理,基于心跳机制实现健康监测,提供分级存储模型(命名空间、组、DataId)实现多环境隔离。相比Eureka,Nacos具备更优的实时推送、更短心跳周期,并融合配置中心功能。OpenFeign结合LoadBalancer实现服务调用负载均衡,支持轮询、随机等策略。Sentinel提供流量控制、熔断降级,通过滑动窗口算法精准限流。Spring Cloud Gateway作为网关核心,实现路由匹配、断言过滤与请求处理,支持限流、鉴权、监控等功能,提升微服务架构稳定性与可维护性。(239字)

1、Nacos相关
1.1、Nacos服务注册流程

流程如下:
● 服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心
● 调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署)
● 调用者自己对实例列表负载均衡,挑选一个实例
● 调用者向该实例发起远程调用
当服务提供者的实例宕机或者启动新实例时,调用者如何得知呢?
● 服务提供者会定期向注册中心发送请求,报告自己的健康状态(心跳请求)
● 当注册中心长时间收不到提供者的心跳时,会认为该实例宕机,将其从服务的实例列表中剔除
● 当服务有新实例启动时,会发送注册服务请求,其信息会被记录在注册中心的服务实例列表
● 当注册中心服务列表变更时,会主动通知微服务,更新本地服务列表
1.2、Nacos的分级存储模型是什么意思

在 Nacos 中,分级存储模型指的是对配置数据进行按照环境、集群、命名空间等维度进行分级管理和存储的机制。这种分级存储模型可以帮助开发团队更好地管理和使用配置信息,提高配置管理的灵活性和可维护性。
在 Nacos 中,分级存储模型主要包括以下几个概念:

  1. 命名空间(Namespace)
    命名空间是 Nacos 中用来隔离配置信息的最小单位,每个命名空间都有独立的配置信息存储空间。通过命名空间,可以实现不同环境(如开发、测试、生产)或不同业务线的配置信息隔离存储。
  2. 组(Group)
    在命名空间内部,可以使用组来进一步划分配置信息。同一个命名空间内的不同组可以存储不同业务模块的配置信息,便于管理和维护。
  3. 配置集(DataId)
    配置集是 Nacos 中存储配置信息的最小单元,它由命名空间、组和配置键(DataId)唯一确定一条配置信息。通过配置集,可以对每个具体的配置项进行管理。
  4. 分级存储
    Nacos 支持在命名空间、组和配置集三个维度上进行配置信息的存储和管理。通过合理地组织命名空间、组和配置集的关系,可以实现灵活的配置信息管理,并且方便不同环境和不同业务需求下的配置隔离和管理。
    通过 Nacos 的分级存储模型,开发团队可以更加灵活地管理和使用配置信息,支持多环境、多集群的配置管理,同时也为微服务架构下的配置管理提供了良好的支持。
    1.3、Eureka服务注册流程
  5. 服务提供者注册
    ● 服务提供者启动时,会向 Eureka 服务器发送注册请求,包括自身的实例信息(如 IP 地址、端口、服务名称等)。
    ● Eureka 服务器接收到注册请求后,将服务提供者的实例信息注册到服务注册表中。
  6. 服务续约
    ● 服务提供者会定时向 Eureka 服务器发送心跳续约请求,以确认自身仍然存活。
    ● 如果 Eureka 服务器在一定时间内没有收到服务提供者的续约请求,将会将该实例从服务注册表中剔除。
  7. 服务发现
    ● 服务消费者在需要调用服务提供者时,会向 Eureka 服务器发送服务发现请求,获取可用的服务实例列表。
    ● Eureka 服务器会返回可用的服务实例信息给服务消费者,服务消费者根据负载均衡策略选择合适的实例进行调用。
  8. 服务下线
    ● 当服务提供者需要下线时,会向 Eureka 服务器发送取消注册请求。
    ● Eureka 服务器收到取消注册请求后,将该服务实例从服务注册表中移除,不再向其他服务消费者返回该实例信息。
    1.4、Nacos与Eureka的区别
    Eureka和Nacos的相似点有:
    ● 都支持服务注册发现功能
    ● 都有基于心跳的健康监测功能
    ● 都支持集群,集群间数据同步默认是AP模式,即最全高可用性
    Eureka和Nacos的区别有:
    ● Eureka的心跳是30秒一次,Nacos则是5秒一次
    ● Eureka如果90秒未收到心跳,则认为服务疑似故障,可能被剔除。Nacos中则是15秒超时,30秒剔除。
    ● Eureka每隔60秒执行一次服务检测和清理任务;Nacos是每隔5秒执行一次。
    ● Eureka只能等微服务自己每隔30秒更新一次服务列表;Nacos即有定时更新,也有在服务变更时的广播推送
    ● Eureka仅有注册中心功能,而Nacos同时支持注册中心、配置管理
    ● Eureka和Nacos都支持集群,而且默认都是AP模式
    2、Openfegin相关
    2.1、OpenFeign的服务调用流程
    ● 获取请求中的serviceId
    ● 根据serviceId负载均衡,找出一个可用的服务实例
    ● 利用服务实例的ip和port信息重构url
    ● 向真正的url发起请求

2.2、常见的Ribbon/Spring LoadBalancer的负载均衡策略
自SpringCloud2020版本开始,已经弃用Ribbon,改用Spring自己开源的Spring Cloud LoadBalancer了。
Ribbon 负载均衡策略:

  1. RoundRobinRule(轮询策略):按照顺序依次选择可用的服务实例,逐个进行调用。
  2. RandomRule(随机策略):随机选择一个可用的服务实例进行调用。
  3. WeightedResponseTimeRule(加权响应时间策略):根据服务实例的响应时间和权重来动态计算一个权重值,从而决定调用哪个服务实例。
  4. RetryRule(重试策略):在一定的重试次数内,尝试多次调用不同的服务实例,直到找到一个可用的实例。
    Spring Cloud LoadBalancer 负载均衡策略:
    Spring Cloud LoadBalancer 是基于 Reactor 实现的负载均衡组件,它提供了以下常用的负载均衡策略:
  5. RoundRobinLoadBalancer:轮询策略,按照顺序依次选择可用的服务实例进行调用。
  6. RandomLoadBalancer:随机策略,随机选择一个可用的服务实例进行调用。
  7. NacosLoadBalancer:根据服务的集群名和权重来动态计算选择服务实例。
    3、限流相关
    3.1、Hystrix和Sentinel有什么异同
    Hystrix 和 Sentinel 都是流行的服务容错和限流组件,用于提高微服务架构的稳定性和可靠性。
    相同点:
    ● 服务保护:Hystrix 和 Sentinel 都可以实现服务熔断、限流等功能,保护系统在面对异常情况下的稳定性。
    ● 监控:两者都提供了监控和统计功能,可以帮助开发人员实时了解服务的运行状况。
    区别:
    ● 实现方式:Hystrix 主要基于线程池和信号量来实现服务隔离和容错。Sentinel 则基于"流量控制、熔断降级、系统负载保护"来实现服务保护和限流。
    ● 功能特点:Hystrix 主要提供服务熔断、线程隔离、超时控制等功能。
    3.2、如何利用Sentinel配置限流
    ● 启动Sentinel控制台;
    ● 项目中引入Sentinel依赖;
    ● 先访问要限流的资源;
    ● 访问Sentinel控制台,设置按照qps或者线程数等限流规则
    3.3、滑动窗口算法
    在限流中,滑动窗口算法通常用于实现基于时间的限流策略,例如限制一定时间窗口内的请求数量。
    滑动时间窗口算法中只包含1个固定跨度的窗口,但窗口是可移动动的,与时间区间无关。
    具体规则如下:
    ● 窗口时间跨度Interval大小固定,例如1秒
    ● 时间区间跨度为Interval / n ,例如n=2,则时间区间跨度为500ms
    ● 窗口会随着当前请求所在时间currentTime移动,窗口范围从currentTime-Interval时刻之后的第一个时区开始,到currentTime所在时区结束。

4、Gateway相关-路由断言、过滤器
4.1、网关作用
作用:路由与鉴权,以外有如下:
限流:实现微服务访问流量计算,基于流量计算分析进行限流,可以定义多种限流规则。
缓存:数据缓存。
日志:日志记录。
监控:记录请求响应数据,api耗时分析,性能监控。
鉴权:权限身份认证。
灰度:线上灰度部署,可以减小风险。
路由:路由是API网关很核心的模块功能,此模块实现根据请求,锁定目标微服务并将请求进行转发。
4.2、实现原理

  1. 初始化阶段:Spring Cloud Gateway 启动时会加载配置文件中定义的路由规则,创建对应的 RouteDefinition 对象。
  2. 路由匹配:当接收到一个请求时,Gateway 会依次匹配定义的路由规则,找到符合条件的路由。
  3. 过滤器链:针对匹配到的路由,依次执行该路由配置的过滤器链,对请求进行处理。
  4. 执行过滤器:每个过滤器可以修改请求和响应,记录日志,进行权限校验等操作。
  5. 转发请求:经过所有过滤器处理后,将请求转发给目标服务。
  6. 返回响应:将目标服务的响应返回给客户端。
    4.3、路由断言类型
    在 Spring Cloud Gateway 中,断言(Predicate)用于匹配传入的 HTTP 请求,并决定是否要将请求路由到特定的目标服务。断言可以根据请求的不同属性(如路径、请求头、请求参数等)来进行条件匹配,从而实现灵活的路由规则。常见类型有如下:
    名称 说明 示例
    After 是某个时间点后的请求 - After=2037-01-20T17:42:47.789-07:00[America/Denver]
    Before 是某个时间点之前的请求 - Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai]
    Between 是某两个时间点之前的请求 - Between=2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/Denver]
    Cookie 请求必须包含某些cookie - Cookie=chocolate, ch.p
    Header 请求必须包含某些header - Header=X-Request-Id, \d+
    Host 请求必须是访问某个host(域名) - Host=.somehost.org
    ,
    .anotherhost.org
    Method 请求方式必须是指定方式 - Method=GET,POST
    Path 请求路径必须符合指定规则 - Path=/red/{segment},/blue/**
    Query 请求参数必须包含指定参数 - Query=name, Jack或者- Query=name
    RemoteAddr 请求者的ip必须是指定范围 - RemoteAddr=192.168.1.1/24
    Weight 权重处理 - Weight=group1, 2
    XForwarded Remote Addr 基于请求的来源IP做判断 - XForwardedRemoteAddr=192.168.1.1/24
    4.4、过滤器实现方式
    在 Spring Cloud Gateway 中,过滤器(Filter)用于对传入的 HTTP 请求或传出的 HTTP 响应进行处理,可以实现日志记录、请求转发、权限校验、请求修改等功能。Spring Cloud Gateway内置了许多常用的过滤器,同时也支持自定义过滤器来满足特定的业务需求。以下是一些常用的内置过滤器及其功能:
  7. AddRequestHeader:向请求头中添加指定的键值对。
  8. AddRequestParameter:向请求参数中添加指定的键值对。
  9. RewritePath:重写请求路径。
  10. StripPrefix:去除请求路径中的n段前缀。
  11. SetStatus:设置响应的状态码。
  12. AddResponseHeader:向响应头中添加指定的键值对。
相关文章
|
3月前
|
NoSQL Java 数据库连接
第七章 SpringBoot框架
SpringBoot简化了Spring应用开发,核心功能包括:starter起步依赖简化配置、自动配置根据条件加载Bean、内嵌服务器支持jar包运行。通过@SpringBootApplication实现自动化配置,自定义starter可封装通用功能,配置优先级为:命令行参数 > 系统属性 > properties > yml/yaml文件。
320 0
|
1月前
|
监控 数据可视化 应用服务中间件
ELK 搭建实战:从 0 到 1 打通日志收集、分析与可视化
ELK日志分析平台实战指南 本文针对分布式系统日志管理痛点,详细介绍了ELK(Elasticsearch+Logstash+Kibana)开源日志分析平台的搭建与使用。文章从ELK三大组件的核心原理入手,包括Elasticsearch的倒排索引机制、Logstash的数据管道处理流程和Kibana的可视化功能。重点讲解了单机版ELK的环境准备、安装配置步骤,以及Nginx日志收集分析的具体实现方案。通过实战案例展示了如何创建索引模式、制作可视化图表和仪表盘。
484 1
|
3月前
|
Java 开发工具 数据安全/隐私保护
项目《中州养老》
《中州养老》是一个面向养老院的后台管理系统,涵盖员工管理端与家属小程序端。系统功能包括预约参观、入住退住、计费管理、健康监测等模块。项目采用Vue3+TS+TDesign构建前端,后端基于SpringBoot(SSM),集成Redis缓存、Nginx部署、阿里云OSS与IoT平台。支持RBAC权限控制、智能设备数据实时监控、微信登录、定时任务处理及多线程高效通信,实现养老业务全流程数字化管理。(238字)
|
3月前
|
存储 算法 BI
xxljob本地运行
本文介绍XXL-JOB分布式任务调度的部署与使用。包含源码获取、数据库导入、服务端配置启动、客户端注册及执行器配置。详细说明各数据表作用、路由策略类型,并演示任务创建、参数设置与执行日志查看,助你快速上手XXL-JOB。
|
3月前
|
数据可视化 Java 关系型数据库
01-认识Activiti
工作流指如请假、报销等需审批的业务流程,通过可视化引擎实现多节点审批,广泛应用于CRM、WMS等系统。主流技术包括BPMN、Activiti和Flowable,其中Activiti为Java系开源引擎,支持复杂流程自动化,推动企业流程数字化。
|
3月前
|
NoSQL Redis Docker
第十章 常用组件
本简介涵盖Nginx代理机制、负载均衡与限流,分布式事务中的CAP/BASE理论及Seata模式,分布式锁实现方案,Redis数据类型、持久化与集群策略,MQ异步解耦与消息可靠传输,Elasticsearch倒排索引与搜索优化,Docker容器化与网络模式,Git分支管理与冲突解决,以及Maven项目构建与生命周期等内容,全面解析主流中间件与开发工具的核心原理与实践应用。(239字)
|
3月前
|
存储 NoSQL 关系型数据库
MongoDB索引知识
MongoDB索引通过B树结构提升查询效率,避免全表扫描。支持单字段、复合、地理空间、文本及哈希索引,适用于等值、范围、排序及全文搜索,显著提升大数据量下的查询性能。
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
1709 70
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
11月前
|
XML JSON API
如何从 Swagger 导出 API 文档
Swagger 使这项任务相对简单,允许开发者以各种格式(如 JSON 和 YAML)导出 API 文档。在这篇博文中,我们将详细探讨如何从 Swagger 导出 API 文档。
如何从 Swagger 导出 API 文档

热门文章

最新文章