Spring Cloud Alibaba 与微服务架构是一种分布式架构,它将复杂的应用系统拆分成若干可独立部署、可重复使用的微服务,以实现模块化,可靠性,可部署性的服务架构。
Spring Cloud Alibaba 集成了阿里巴巴各大中间件团队的高可用、稳定、高性能、低成本的服务访问能力,并支持若干服务的可靠性,可运行性的实现,这些有助于降低企业架构的复杂度,提升多维度的性能。
SpringCloud 的25连环炮 https://mp.weixin.qq.com/s/S4yxJkyOAKzaYmUArXzy-w
9、网关的作用是什么?
统一管理微服务请求,权限控制、负载均衡、路由转发、监控、安全控制黑名单和白名单等
Nacos的核心特点:服务注册、服务心跳、服务同步、服务发现、服务健康检查
Nacos的命名空间和组:环境/项目/微服务
Nacos 的架构设计基于三个核心模块:命名服务(Naming)、配置服务(Configuration)和服务治理(Governance)。命名服务负责服务的注册和发现,配置服务负责配置的管理和发布,服务治理负责服务的负载均衡和流量控制。
https://www.bilibili.com/read/cv22439294
SpringCloud使用Nacos实现配置管理 微服务中读取配置
https://blog.csdn.net/JFENG14/article/details/123841467
分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。
分布式事务存在的问题?
单体应用被拆分成多个微服务应用,分别使用独立的数据源。此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证。
分布式事务在实现上分为基于补偿的方案和基于消息通知方案两种类型。
基于补偿的方案有2PC、TCC模式、Saga模式、Seata AT模式,它们都可以看成是遵守XA协议或是XA协议的。
https://www.cnblogs.com/yuyyg/p/14511641.html
本地事务(Local Transaction) 是基于单个服务单一数据库资源访问的事务。
分布式事务,就是为了保证不同数据库的数据一致性。
7、Seata分布式事务协调管理器是如何实现的?
8、Seata分布式事务一致性锁机制如何设计的?
9、Seata分布式事务回滚机制如何实现的?
14、RocketMQ在交易支付场景如何做到消息零丢失?
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
6.分布式事务的解决方案有哪些?
XA:XA是基于二阶段事务实现的一种标准协议,目前主流数据库都已支持该协议.由于是二阶段提交,缺点很明显,不适合高并发场景.
补偿机制TCC:try,commit,cancel的缩写,try阶段进行检测,commit提交执行,只要try阶段成功了commit就一定会被执行,cancel业务出现错误时执行,回滚事务,释放资源.
分布式事务的两阶段提交是把整个事务提交分为 prepare 和 commit 两个阶段。
第一阶段,事务协调者向事务参与者发送 prepare 请求,事务参与者收到请求后,如果可以提交事务,回复 yes否则回复 no。
第二阶段,如果所有事务参与者都回复了 yes,事务协调者向所有事务参与者发送 commit请求,否则发送 rollback 请求。
如果是单机情况下(单JVM),线程之间共享内存,只要使用线程锁就可以解决并发问题。但如果是分布式情况下(多JVM),线程A和线程B很可能不是在同一JVM中,这样线程锁就无法起到作用了,这时候就要用到分布式锁来解决。
分布式锁是控制分布式系统同步访问共享资源的一种方式。
链接:https://juejin.cn/post/6844904202200678414
12.什么是服务熔断,什么是服务降级?
降级一般是自身的系统出现了故障而降级。
当服务器压力剧增为了保证核心功能的可用性 ,而选择性的降低一些功能的可用性,或者直接关闭该功能。
熔断一般是指依赖的外部接口出现故障的情况断绝和外部接口的关系。
当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。
例如你的A服务里面的一个功能依赖BC服务,这时候C服务出问题了,出错了或者返回的很慢。
这种牺牲局部,保全整体的措施就叫做熔断。像这种调用链路的连锁故障,叫做雪崩。
1.开启熔断
在固定时间窗口内,接口调用超时比率达到一个阈值,会开启熔断。进入熔断状态后,后续对该服务接口的调用不再经过网络,直接执行本地的默认方法,达到服务降级的效果。
2.熔断回复
熔断不可能是永久的。当经过了规定时间之后,服务将从熔断状态回复过来,再次接受调用方的远程调用。
什么是Netflix Feign?它的优点是什么?
Feign:基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
1、使用功能区进行负载平衡。
2、获取服务实例,然后获取基本URL。
3、利用REST模板来使用服务。
Feign 调用常见问题避坑指南 https://mp.weixin.qq.com/s/iujB9AU3LYShBMt6aZ5_9Q
Feign 如何实现JWT令牌中继以传递认证信息
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.没有连接上eureka注册中心
2.能连接上注册中心但获取不到服务(未注册)注册中心提示(No servers available for service: hystrix-server)
3.能从注册中心获取到服务,但调用目标服务超时
4.调用的服务端抛了异常
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,指定降级方法
断路器最开始处于closed状态,一旦检测到的错误到达一定数量,断路器便转为open状态(断路器打开);
此时到达reset timeout时间会转移到half open状态;
尝试放行一部分请求到后端,一旦检测成功便回归到closed状态,即恢复服务
熔断是在调用服务时,在一定的时间内,调用失败的次数达到了一定的比例,调用方会认为服务处于不可用的状态,会阻止后续的请求继续发送到服务方,默认为请求失败,避免了服务器资源的过度消耗。但是这种机制不会一直持续下去,默认过一段时间会将接下来的一条请求放行(通过注解的参数设置),如果此条请求能够成功返回则表明服务可用,熔断机制结束,否则继续维持熔断状态。与之一起使用的操作有服务降级,指的是当发生熔断时,进行的后续操作,比如改变调用方式或者向上级抛出异常信息等等。
链接:https://blog.csdn.net/weixin_39518080/article/details/102941275
一般限制的指标有:请求总量或某段时间内请求总量。
熔断 安全 网关 日志 链路追踪 分布式事务
Dubbo和SpringCloud区别?服务调用方式不同,dubbo是采用rpc远程调用,srpingcloud是采用rest api远程调用.
注册中心:dubbo是采用zookeeper,springcloud是采用eureka
4、在使用微服务架构时,您面临哪些挑战?
开发一些较小的微服务听起来很容易,但开发它们时经常遇到的挑战如下。
自动化组件:难以自动化,因为有许多较小的组件。因此,对于每个组件,我们必须遵循Build,Deploy和Monitor的各个阶段。
易感性:将大量组件维护在一起变得难以部署,维护,监控和识别问题。它需要在所有组件周围具有很好的感知能力。
配置管理:有时在各种环境中维护组件的配置变得困难。
调试:很难找到错误的每一项服务。维护集中式日志记录和仪表板以调试问题至关重要。
5、负载均衡的意义是什么?
在计算中,负载均衡可以改善跨计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器等多种计算资源的工作负载分布。负载均衡旨在优化资源使用,最大吞吐量,最小响应时间并避免任何单一资源的过载。使用多个组件进行负载均衡而不是单个组件可能会通过冗余来提高可靠性和可用性。负载平衡通常涉及专用软件或硬件,例如多层交换机或域名系统服务进程。
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⽹关转发请求给对应的服务。
1.1 接口幂等
概念与应用场景,微服务之间调用下游
1.2 服务无状态
1.2.1 服务本身不存储任何和客户端相关的信息
1.2.2 无状态的服务可水平扩展
1.3 分布式事务解决方案
1.3.1 本地消息表
1.3.2 可靠消息最终一致性
1.3.3 tcc
1.3.4 最大努力通知
Dubbo和SpringCloud区别?服务调用方式不同,dubbo是采用rpc远程调用,srpingcloud是采用rest api远程调用.
注册中心:dubbo是采用zookeeper,springcloud是采用eureka
对比Dubbo 的RPC通信 和基于HTTP的REST方式?
REST对影响服务调用的性能。
REST相比RPC更为灵活,服务提供方和调用方的依赖只依靠一纸契约,不存在代码级别的强依赖
Eureka 是一个基于 REST(REpresentational State Transfer) 的服务,用于定位服务,以实现云端中间层服务器的负载均衡和故障转移。
同步通信:dobbo通过 RPC 远程过程调用、springcloud通过 REST 接口json调用 等。
异步:消息队列,如:ActiveMQ、Kafka 等。
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