SpringCloud

五大组件

  • 注册/配置中心 nacos
  • 远程调用 Feign
  • 负载均衡 Ribbon
  • 服务保护 sentinel(实现限流、降级、熔断)
  • 网关 gateway

注册中心

Eureka
  • 服务注册:服务提供者把自己的信息注册到Eureka,由Eureka来保存这些信息

  • 服务发现:消费者向Eureka拉取服务列表信息,若服务提供者有集群,则消费者会根据负载均衡算法,选择一个发起调用

  • 服务监控: 服务提供者会每隔30s向Eureka发送心跳,报告健康状态,若90秒没接收到心跳,则将服务提供者从Eureka中删除

Nacos与Eureka的区别

共同点:

  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康监测

不同点:

  • Nacos支持服务端主动监测服务提供者的状态:临时实例采用心跳模式(默认),非临时实例采用主动检测模式
  • 临时实例心跳不正常时会被剔除,非临时实例不会
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  • Nacos集群默认AP,非临时实例时CP模式,Eureka默认AP
  • Nacos支持配置中心

负载均衡

Ribbon的负载均衡策略
  • 轮询
  • 按照权重:响应时间越长,权重越小
  • 随机选择一个可用的服务器
  • 以区域可用的服务器为基础进行选择,再对区域内的做轮询(默认)
如何自定义负载均衡策略
  • 创建类实现IRule接口(全局)
  • 通过配置文件配置某个服务的负载均衡策略(局部)
项目中是如何实现负载均衡

Feign远程调用的过程中,底层负载均衡LoadBalance就是使用了Ribbon

服务雪崩

服务雪崩:指一个服务失败,导致整条链路的服务都失败的情形

解决办法
  • 服务降级:服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃,一般在实际开发中与feign接口整合,编写降级逻辑(尽可能的把系统资源让给优先级高的服务)
  • 服务熔断:默认关闭,需要手动打开,如果检测到 10 秒内请求的失败率超过 50%,就触发熔断机制。之后每隔 5 秒重新尝试请求微服务,如果微服务不能响应,继续走熔断机制。如果微服务可达,则关闭熔断机制,恢复正常请求(某个微服务不可用)

网关

工作流程
  1. 路由判断:客户端的请求到达网关后,先经过 Gateway Handler Mapping 处理,这里面会做断言(Predicate)判断,看下符合哪个路由规则,这个路由映射后端的某个服务。
  2. 请求过滤:请求到达 Gateway Web Handler,这里面有很多过滤器,组成过滤器链(Filter Chain),这些过滤器可以对请求进行拦截和修改,比如添加请求头、参数校验等等。然后将请求转发到实际的后端服务。
  3. 服务处理:后端服务对请求进行处理
  4. 响应过滤:后端处理完结果后,返回给 Gateway 的过滤器再次做处理
  5. 响应返回:响应经过过滤后返回给客户端
断言

就是对一个表达式进行if判断,结果为真或假,如果为真则做这件事,否则做那件事。

如果客户端发送的请求满足了断言的条件,则映射到指定的路由器,就能转发到指定的服务上进行处理。

SpringCloud Gateway实现动态路由

通过 Nacos Server 和 Spring Cloud Alibaba Nacos Config 即可实现配置的动态变更

Spring Cloud Gateway 可以从注册中心获取服务的元数据(例如服务名称、路径等),然后根据这些信息自动生成路由规则。

自定义全局异常

实现ErrorWebExceptionHandler并重写其中的handle方法。

相关推荐
猪猪拆迁队16 分钟前
虚拟工厂仿真引擎的架构设计:让一条产线可编程、可观测、可干预
后端·ai编程
字节跳动数据库41 分钟前
文章分享——相似函数处理方法
人工智能·后端·程序员
云技纵横41 分钟前
@Transactional 失效的 7 种场景:第 5 种最难排查
后端
用户6757049885021 小时前
你知道 Go 结构体和结构体指针调用的区别吗?一文带你彻底搞懂!
后端·go
程序员cxuan1 小时前
读懂 Claude Code 架构分析系列,第一篇,开始!
人工智能·后端·架构
用户6757049885021 小时前
面试官问“装饰器模式”,这样回答薪资多要 3000!
后端
tntxia1 小时前
Geo Scene域名修改引起的一些问题
后端
用户298698530141 小时前
Java 实现 Word 文档加密与权限解除
java·后端
vanuan2 小时前
给你的A2A-Agent加把锁-认证鉴权实战指南
后端
Yeats_Liao2 小时前
14:Servlet中的页面跳转-Java Web
java·后端·架构