微服务

什么是微服务
https://blog.csdn.net/wuxiaobingandbob/article/details/78642020

微服务的特点
1.1 接口幂等
  概念与应用场景,微服务之间调用下游
1.2 服务无状态
  1.2.1 服务本身不存储任何和客户端相关的信息
  1.2.2 无状态的服务可水平扩展
1.3 分布式事务解决方案
  1.3.1 本地消息表
  1.3.2 可靠消息最终一致性
  1.3.3 tcc
  1.3.最大努力通知

相关名词

REST 是(REpresentational State Transfer) 的缩写

4、在使用微服务架构时,您面临哪些挑战?

开发一些较小的微服务听起来很容易,但开发它们时经常遇到的挑战如下。
自动化组件:难以自动化,因为有许多较小的组件。因此,对于每个组件,我们必须遵循Build,Deploy和Monitor的各个阶段。
易感性:将大量组件维护在一起变得难以部署,维护,监控和识别问题。它需要在所有组件周围具有很好的感知能力。
配置管理:有时在各种环境中维护组件的配置变得困难。
调试:很难找到错误的每一项服务。维护集中式日志记录和仪表板以调试问题至关重要。

5、负载均衡的意义是什么?

在计算中,负载均衡可以改善跨计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器等多种计算资源的工作负载分布。负载均衡旨在优化资源使用,最大吞吐量,最小响应时间并避免任何单一资源的过载。使用多个组件进行负载均衡而不是单个组件可能会通过冗余来提高可靠性和可用性。负载平衡通常涉及专用软件或硬件,例如多层交换机或域名系统服务进程。

26、微服务之间如何独立通讯的?

同步通信:dobbo通过 RPC 远程过程调用、springcloud通过 REST 接口json调用 等。
异步:消息队列,如:ActiveMQ、Kafka 等。

CAP

CAP理论关注粒度是数据,而不是整体系统设计的策略。
CConsistency(强一致) AAvailability(可用性) PPartition tolerance(分区容错性) P是必须要保证的。
CAP理论的核心:一个分布式不能很好同时满足强一致性,可用性,分区容错性这三个需求。(只能同时满足两个)
因此,根据CAP原理将NoSQL 数据库分成了满足CA原则,CP原则,AP原则三类:
CA -单点集群,满足一致性,可用性,通常在扩展性要求低些。
CP -满足一致性,分区容忍性的系统,通常性能要求低些。
AP -满足可用性,分区容忍性的系统,通知对一致性要求低些。

分布式服务必然要面临的问题

分布式服务必然要面临的问题:
    - 服务管理
      - 如何自动注册和发现
      - 如何实现状态监管
      - 如何实现动态路由
    - 服务如何实现负载均衡
    - 服务如何解决容灾问题
    - 服务如何实现统一配置

Spring Cloud

SpringBoot 和 SpringCloud的区别? 
熔断 安全 网关 日志 链路追踪 分布式事务

Dubbo 和 SpringCloud 区别?
服务调用方式不同,dubbo是采用rpc远程调用,srpingcloud是采用rest api Http远程调用.


Spring Cloud 模块的相关介绍如下:
Eureka:服务注册中心,用于服务管理。
Ribbon:基于客户端的负载均衡组件。
Hystrix:容错框架,能够防止服务的雪崩效应。
Feign:Web 服务客户端,能够简化 HTTP 接口的调用。
Zuul:API 网关,提供路由转发、请求过滤等功能。
Config:分布式配置管理。
Sleuth:服务跟踪。
Stream:构建消息驱动的微服务应用程序的框架。
Bus:消息代理的集群消息总线。

SpringCloud由以下⼏个核⼼组件构成:
1、Eureka:各个服务启动时,Eureka Client都会将服务注册到Eureka Server,并且Eureka Client还可以反过来从Eureka Server拉取注册表,从⽽知道其他服务在哪⾥。
2、Ribbon:服务间发起请求的时候,基于Ribbon做负载均衡,从⼀个服务的多台机器中选择⼀台。
3、Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求。
4、Hystrix:发起请求是通过Hystrix的线程池来⾛的,不同的服务⾛不同的线程池,实现了不同服务调⽤的隔离,避免了服务雪崩的问题。
5、Zuul:如果前端、移动端要调⽤后端系统,统⼀从Zuul⽹关进⼊,由Zuul⽹关转发请求给对应的服务。






Spring Cloud Alibaba 介绍

Spring Cloud Alibaba 与微服务架构是一种分布式架构,它将复杂的应用系统拆分成若干可独立部署、可重复使用的微服务,以实现模块化,可靠性,可部署性的服务架构。

Spring Cloud Alibaba 集成了阿里巴巴各大中间件团队的高可用、稳定、高性能、低成本的服务访问能力,并支持若干服务的可靠性,可运行性的实现,这些有助于降低企业架构的复杂度,提升多维度的性能。

SpringCloud 的25连环炮 https://mp.weixin.qq.com/s/S4yxJkyOAKzaYmUArXzy-w








网关 Gateway

9、网关的作用是什么?

统一管理微服务请求,权限控制、负载均衡、路由转发、监控、安全控制黑名单和白名单等

Spring Cloud Gateway的核心功能有哪些?
答案:核心功能包括路由转发(根据规则将请求转发至对应微服务)、负载均衡(集成Spring Cloud LoadBalancer实现服务负载分发)、熔断降级(集成Sentinel/Resilience4j处理服务异常)、限流控制(限制请求流量,防止服务雪崩)、过滤器机制(前置/后置过滤请求,实现权限校验、日志记录等)、路径重写、跨域处理等。

Spring Cloud Gateway高频面试题
https://mp.weixin.qq.com/s/wyqT4EaGzqFIzIZaCsTrLQ

Spring Cloud Gateway的工作原理是什么?
答:客户端请求到达Gateway后,首先经过DispatcherHandler分发,通过RoutePredicateHandlerMapping匹配对应的路由(基于Predicate断言规则),匹配成功后,请求经过该路由对应的Filter链(前置过滤器→转发请求至目标服务→后置过滤器),最终将响应返回给客户端。整个过程基于异步非阻塞模型,通过Reactor实现高并发。

什么是微服务网关?网关在微服务架构中的作用?答案:微服务网关是位于客户端与微服务之间的中间层,统一接收客户端请求并分发至对应服务,是微服务架构的“入口”。作用:① 统一入口:隐藏服务地址,简化客户端调用;② 路由转发:按规则分发请求;③ 横切逻辑:集中处理权限校验、日志记录、限流等,减少服务冗余代码;④ 服务保护:熔断降级、限流,防止服务雪崩;⑤ 跨域处理:统一解决跨域问题。

Spring Cloud Gateway支持哪些通信协议?
答:主要支持HTTP、HTTPS协议,同时可通过自定义编码器/解码器扩展支持WebSocket、TCP、UDP等协议,满足实时通信、长连接等场景需求。

Spring Cloud Gateway的依赖坐标是什么?
答:需引入网关核心依赖,同时排除Spring Web(避免与WebFlux冲突)

什么是Spring WebFlux?Gateway为何基于它开发?
答:Spring WebFlux是Spring 5推出的异步非阻塞Web框架,基于Reactor模式和Netty服务器,支持响应式编程,能高效处理高并发请求。Gateway基于WebFlux开发,可充分利用异步非阻塞特性,提升网关吞吐量,避免传统同步网关的线程阻塞问题。

微服务网关的核心设计原则?
答案:① 高可用:集群部署,避免单点故障;② 高性能:异步非阻塞架构,低延迟、高吞吐量;③ 可扩展:支持自定义过滤器、路由规则,适配业务变化;④ 安全性:统一权限校验、防攻击(XSS、CSRF);⑤ 可监控:集成监控组件(Prometheus、Grafana),实时监控流量、响应时间;⑥ 易用性:配置简单,支持动态路由。

Spring Cloud Gateway的核心组件有哪些?
答案:三大核心组件:① Route(路由):网关的基本单元,包含ID、目标服务URI、Predicate集合、Filter集合;② Predicate(断言):用于匹配客户端请求的条件(如路径、参数、方法),匹配成功则转发至对应路由;③ Filter(过滤器):用于修改请求/响应,实现横切逻辑,分全局过滤器和路由过滤器。

什么是Route路由?包含哪些属性?
答案:Route是Gateway中定义的请求转发规则,是网关的核心配置。核心属性:① id:路由唯一标识;② uri:目标服务地址(可是具体URL或服务名,如lb://user-service,lb表示负载均衡);③ predicates:断言集合,用于匹配请求;④ filters:过滤器集合,用于处理请求/响应;⑤ order:路由优先级,数值越小优先级越高。

什么是Predicate断言?Gateway支持哪些常用断言?
答案:Predicate是路由匹配的条件,本质是一个函数,输入为ServerWebExchange(请求上下文),返回布尔值,匹配成功则执行该路由。常用断言:
① Path:路径匹配(如Path=/user/**);
② Method:请求方法匹配(如Method=GET,POST);
③ Query:请求参数匹配(如Query=name);
④ Header:请求头匹配(如Header=token);
⑤ Host:主机名匹配(如Host=*.example.com);
⑥ Cookie:Cookie匹配(如Cookie=sessionId,xxx)。

Gateway的断言执行顺序是什么?
答案:同一路由内的断言为“与”关系,需所有断言都匹配成功才能触发路由;多个路由之间按order属性排序,order数值越小优先级越高,优先匹配优先级高的路由,匹配成功后不再执行后续路由。

服务注册、发现

Nacos

Nacos的核心特点:服务注册、服务心跳、服务同步、服务发现、服务健康检查
Nacos的命名空间和组:环境/项目/微服务

Nacos 的架构设计基于三个核心模块:命名服务(Naming)、配置服务(Configuration)和服务治理(Governance)。命名服务负责服务的注册和发现,配置服务负责配置的管理和发布,服务治理负责服务的负载均衡和流量控制。
https://www.bilibili.com/read/cv22439294

SpringCloud使用Nacos实现配置管理 微服务中读取配置
https://blog.csdn.net/JFENG14/article/details/123841467

Eureka 是一个基于 REST的服务,用于定位服务,以实现云端中间层服务器的负载均衡和故障转移。









分布式事务

什么是分布式事务?
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。

分布式事务存在的问题?
单体应用被拆分成多个微服务应用,分别使用独立的数据源。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证。

分布式事务解决方案
分布式事务在实现上分为基于补偿的方案和基于消息通知方案两种类型。
基于补偿的方案有2PC、TCC模式、Saga模式、Seata AT模式,它们都可以看成是遵守XA协议或是XA协议的。

本地事务和分布式事务的区别
https://www.cnblogs.com/yuyyg/p/14511641.html

本地事务(Local Transaction) 是基于单个服务单一数据库资源访问的事务。
分布式事务,就是为了保证不同数据库的数据一致性

本地锁和分布式锁的区别
​如果是单机情况下(单JVM),线程之间共享内存,只要使用线程锁就可以解决并发问题。但如果是分布式情况下(多JVM),线程A和线程B很可能不是在同一JVM中,这样线程锁就无法起到作用了,这时候就要用到分布式锁来解决。
​分布式锁是控制分布式系统同步访问共享资源的一种方式。

链接:https://juejin.cn/post/6844904202200678414

19、分布式事务的处理过程是怎样的?

在这里插入图片描述

Seata 分布式事务框架

20、Seata分布式事务框架实现原理?

7、Seata分布式事务协调管理器是如何实现的?
8、Seata分布式事务一致性锁机制如何设计的?
9、Seata分布式事务回滚机制如何实现的?

在这里插入图片描述

Seata的AT模式原理
Seata的AT模式原理
三大组件:TC 事务协调者 TM 事务管理器 RM 资源管理器
1 TM定义全局事务的范围(开始 提交 回滚事务),负责向TC申请并开启一个全局事务;
2 全局事务创建成功后,生成全局唯一的XID,XID会在微服务请求链路上下文中传播;
3 RM向TC注册分支事务,并归属到XID对应的全局事务进行调度;
4 TM向TC发起相应XID的全局事务提交或回滚决议;
5 TC完成对XID管理的全部分支事务提交或回滚的调度;


Seata框架中有三个组件:
TC 事务协调器,它是独立的组件,负责维护全局事务的运行状态,接收TM指令发起全局事务的提交与回滚,负责与RM通信,协调各个分支事务的提交或回滚。
TM 事务管理器,TM需要嵌入应用程序,它负责开启一个全局事务,并定义全局事务的范围,它的目的是最终向TC发起全局提交或回滚指令。
RM 资源管理器 与TC通信,控制分支事务,负责分支注册、报告分支事务状态,并接收事务协调器TC的指令,命令分支事务完成本地事务的提交或回滚。

Seata的AT模式
https://www.cnblogs.com/zhiyong-ITNote/p/17416945.html
XA

分布式事务的解决方案有哪些?
XA是基于二阶段事务实现的一种标准协议,目前主流数据库都已支持该协议.由于是二阶段提交,缺点很明显,不适合高并发场景.

TCC

补偿机制TCC:try,commit,cancel的缩写,try阶段进行检测,commit提交执行,只要try阶段成功了commit就一定会被执行,cancel业务出现错误时执行,回滚事务,释放资源.

两阶段提交

分布式事务的两阶段提交是把整个事务提交分为 prepare 和 commit 两个阶段。
第一阶段,事务协调者向事务参与者发送 prepare 请求,事务参与者收到请求后,如果可以提交事务,回复 yes否则回复 no。
第二阶段,如果所有事务参与者都回复了 yes,事务协调者向所有事务参与者发送 commit请求,否则发送 rollback 请求。

# 14、RocketMQ在交易支付场景如何做到消息零丢失?
RocketMQ 事务消息、最终一致性
https://blog.csdn.net/qq_19636353/article/details/152605834

RocketMQ 消息重复消费 消费幂等
借助Redission













服务熔断与降级

12.什么是服务熔断,什么是服务降级?
降级一般是自身的系统出现了故障而降级。
当服务器压力剧增为了保证核心功能的可用性 ,而选择性的降低一些功能的可用性,或者直接关闭该功能。

熔断 Hystrix

熔断一般是指依赖的外部接口出现故障的情况断绝和外部接口的关系。
当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。

例如你的A服务里面的一个功能依赖BC服务,这时候C服务出问题了,出错了或者返回的很慢。
这种牺牲局部,保全整体的措施就叫做熔断。像这种调用链路的连锁故障,叫做雪崩。

1.开启熔断
在固定时间窗口内,接口调用超时比率达到一个阈值,会开启熔断。进入熔断状态后,后续对该服务接口的调用不再经过网络,直接执行本地的默认方法,达到服务降级的效果。

2.熔断回复
熔断不可能是永久的。当经过了规定时间之后,服务将从熔断状态回复过来,再次接受调用方的远程调用。

Feign

什么是Netflix Feign?它的优点是什么?
Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求

1、使用功能区进行负载平衡。
2、获取服务实例,然后获取基本URL。
3、利用REST模板来使用服务。

Feign 调用常见问题避坑指南 https://mp.weixin.qq.com/s/iujB9AU3LYShBMt6aZ5_9Q

Feign 如何实现JWT令牌中继以传递认证信息​

Hystrix

Hystrix是什么,Hystrix是一个容错组件,是Netflix开源的一个类库,实现了超时和断路器模式。
Hystrix 在 springcloud 是默认包含的吗?hystrix 在 SpringCloud 升级到2020.0.0版本之后,就被移除了

Hystrix被设计的目标是:
对通过第三方客户端库访问的依赖项(通常是通过网络)的延迟和故障进行保护和控制。
在复杂的分布式系统中阻止级联故障。
快速失败,快速恢复。
回退,尽可能优雅地降级。
启用近实时监控、警报和操作控制

Hystrix解决了什么问题:复杂分布式体系结构中的应用程序有许多依赖项,每个依赖项在某些时候都不可避免地会失败。如果主机应用程序没有与这些外部故障隔离,那么它有可能被他们拖垮。

例如,对于一个依赖于30个服务的应用程序,每个服务都有99.99%的正常运行时间,你可以期望如下:
99.9930 = 99.7% 可用,也就是说一亿个请求的0.03% = 3000000 会失败
如果一切正常,那么每个月有2个小时服务是不可用的,现实通常是更糟糕

什么情况下会发生熔断呢? Hystrix断路器 https://www.jianshu.com/p/dd6a208a5c11
1.没有连上注册中心
2.能连接上注册中心但获取不到服务(未注册)注册中心提示(No servers available for service: hystrix-server)
3.能从注册中心获取到服务,但调用目标服务超时
4.调用的服务端抛了异常

hystrix 集成 - feign

hystrix 集成 - feign
Feign使用Hystrix开发步骤,失效的检查点
1、导入依赖spring-cloud-starter-hystrix
2、消费启动类开启@EnableCircuitBreaker
3、配置 feign.hystrix.enabled=true
4、实现@FeignClient注解的接口或FallbackFactory接口
5、@FeignClient注解配置fallback参数
6、在方法上使用注解 @HystrixCommand, 配置 fallbackMethod,指定降级方法

Hystrix 断路器

断路器最开始处于closed状态,一旦检测到的错误到达一定数量,断路器便转为open状态(断路器打开);
此时到达reset timeout时间会转移到half open状态;
尝试放行一部分请求到后端,一旦检测成功便回归到closed状态,即恢复服务

HystrixCommand 注解 熔断、服务降级

HystrixCommand 的使用
https://blog.csdn.net/weixin_39518080/article/details/102941275

熔断是在调用服务时,在一定的时间内,调用失败的次数达到了一定的比例,调用方会认为服务处于不可用的状态,会阻止后续的请求继续发送到服务方,默认为请求失败,避免了服务器资源的过度消耗。但是这种机制不会一直持续下去,默认过一段时间会将接下来的一条请求放行(通过注解的参数设置),如果此条请求能够成功返回则表明服务可用,熔断机制结束,否则继续维持熔断状态。与之一起使用的操作有服务降级,指的是当发生熔断时,进行的后续操作,比如改变调用方式或者向上级抛出异常信息等等。











限流

一般限制的指标有:请求总量或某段时间内请求总量。

方法限流的次数是根据什么决定的?
答:根据业务逻辑的复杂度:1.IO瓶颈、2.计算的瓶颈。

什么是网关限流?Gateway如何实现限流?
答案:网关限流是限制客户端对微服务的请求流量,防止服务因高并发被压垮,保护服务稳定性。Gateway可通过内置RequestRateLimiter过滤器实现限流,支持基于IP、用户、路径等维度,底层可集成Redis(令牌桶算法)、InMemory(内存计数,适用于单机)等限流策略。

RequestRateLimiter过滤器的核心参数有哪些?
答案:核心参数:① redis-rate-limiter.replenishRate:令牌桶每秒填充速率(允许的平均请求速率);② redis-rate-limiter.burstCapacity:令牌桶最大容量(允许的突发请求数);③ key-resolver:限流键解析器,指定按什么维度限流(如IP、用户ID)。38. 如何实现基于IP的限流?答案:步骤:① 引入Redis依赖(RequestRateLimiter基于Redis实现分布式限流);② 定义IP限流键解析器;③ 配置路由过滤器,使用RequestRateLimiter。

如何实现基于IP的限流?
步骤:① 引入Redis依赖(RequestRateLimiter基于Redis实现分布式限流);
② 定义IP限流键解析器;
③ 配置路由过滤器,使用RequestRateLimiter。

如何实现网关的黑白名单功能?
答案:通过自定义全局过滤器实现,基于IP、用户ID等维度判断是否在黑白名单中。


Gateway如何实现热点参数限流?

熔断

限流和熔断的区别是什么?
答案:① 目的不同:限流是限制请求流量,防止服务因流量过大被压垮,是“预防”机制;熔断是当服务故障时,停止转发请求,避免故障扩散,是“容错”机制。② 触发条件不同:限流基于请求数量/速率触发;熔断基于服务失败率/超时率触发。③ 处理方式不同:限流后返回429等提示;熔断后执行降级逻辑,返回备用响应。

熔断的三种状态是什么?切换规则是什么?
答案:熔断的三种状态:① 关闭(CLOSED):正常状态,请求正常转发至服务,统计失败率;② 打开(OPEN):失败率超过阈值,触发熔断,拒绝转发请求,进入等待期;③ 半打开(HALF-OPEN):等待期结束后进入半打开状态,允许少量请求转发,若请求成功则切换至关闭状态,若失败则回到打开状态。

分布式认证

27、什么是OAuth?

OAuth 代表开放授权协议。这允许通过在HTTP服务上启用客户端应用程序(例如第三方提供商Facebook,GitHub等)来访问资源所有者的资源。因此,您可以在不使用其凭据的情况下与另一个站点共享存储在一个站点上的资源。














其他

什么是服务熔断降级 https://blog.csdn.net/qq_37312838/article/details/82966209

SpringCloud最新2023年面试题及答案,汇总版

https://gitee.com/souyunku/DevBooks/blob/master/docs/SpringCloud/SpringCloud%E6%9C%80%E6%96%B02021%E5%B9%B4%E9%9D%A2%E8%AF%95%E9%A2%98%E5%8F%8A%E7%AD%94%E6%A1%88%EF%BC%8C%E6%B1%87%E6%80%BB%E7%89%88.md#4%E5%9C%A8%E4%BD%BF%E7%94%A8%E5%BE%AE%E6%9C%8D%E5%8A%A1%E6%9E%B6%E6%9E%84%E6%97%B6%E6%82%A8%E9%9D%A2%E4%B8%B4%E5%93%AA%E4%BA%9B%E6%8C%91%E6%88%98

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐