SpringCloud Alibaba 面试题 微服务相关

Spring Cloud Alibaba 介绍

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

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

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

Gateway

9、网关的作用是什么?
统一管理微服务请求,权限控制、负载均衡、路由转发、监控、安全控制黑名单和白名单等

Nacos

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

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

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

Seata

什么是分布式事务?

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

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

分布式事务解决方案

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

本地事务和分布式事务的区别

https://www.cnblogs.com/yuyyg/p/14511641.html

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

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

在这里插入图片描述

20、Seata分布式事务框架实现原理?在这里插入图片描述
7、Seata分布式事务协调管理器是如何实现的?
8、Seata分布式事务一致性锁机制如何设计的?
9、Seata分布式事务回滚机制如何实现的?
14、RocketMQ在交易支付场景如何做到消息零丢失?
XA

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

TCC

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

熔断 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.没有连接上eureka注册中心
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 注解 熔断、服务降级

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

限流

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

1、SpringBoot 和 SpringCloud的区别?

熔断 安全 网关 日志 链路追踪 分布式事务

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14988.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库对象与数据备份和还原详解

目录 一、视图 1. 什么是视图 2. 视图与数据表的区别 3. 视图的优点 4. 创建视图 二、索引 1. 什么是索引 2. 为什么要使用索引 3. 索引优缺点 4. 何时不使用索引 5. 索引何时失效 6. 索引分类 6.1 普通索引 6.2 唯一索引 6.3 主键索引 6.4 组合索引 三、数据的…

【深度学习】AIGC ,ControlNet 论文,原理,训练,部署,实战,教程(三)

文章目录 源码资源下载Python环境试玩controlnet训练数据准备选一个Stable diffusion模型开始训练 第一篇:https://qq742971636.blog.csdn.net/article/details/131531168 源码资源下载 目前 ControlNet 1.1 还在建设,本文这里使用源码 https://github…

MyBatis 与 Hibernate 有哪些不同?

ORM框架的选择与适用场景 MyBatis和Hibernate都是Java领域中流行的面向关系型数据库的ORM(对象关系映射)框架。它们的共同目标是简化开发人员操作数据库的工作,提供便捷的持久化操作。然而,两者在设计理念和适用场景上有所不同。…

Centos7安装wordpress图文教程

宝塔面板安装WordPress有两种方法: 自己手动安装(推荐)宝塔后台一键部署跳转提示 推荐使用手动安装,因为一键部署的WordPress版本不是最新的,而且自己上传的文件比较放心。 第一步,上传WordPress安装包 …

Redis消息队列

消息队列:字面意思就是存放消息的队列。使用队列的好处在于解耦 。最简单的消息队列模型包括3个角色: 消息队列:存储和管理消息,也被称为消息代理(Message Broker) 生产者:发送消息到消息队列 …

蚂蚁内容安全平台天鉴入选“北京市人工智能行业赋能典型案例”

近日,“2023全球数字经济大会”人工智能高峰论坛在京召开。会议发布了一批人工智能行业赋能典型案例,为行业提供重要的示范效应,以推动大模型应用加速赋能千行百业。其中,蚂蚁集团旗下数字藏品平台“鲸探”及内容安全平台“天鉴”…

el-breadcrumb面包屑详解

el-breadcrumb面包屑详解 封装面包屑组件 <template><div class"crumb"><el-breadcrumb separator"/"><template v-for"(item,index) in levelList"><el-breadcrumb-item :key"item_ index">{{item.na…

实现分类标签展示的魔力——gradio库中的Label模块

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

前端面试刷题整理

第一题&#xff1a;es6 class语法 题目&#xff1a;现有三种菜单&#xff0c;button属性&#xff0c;select属性&#xff0c;model属性 class Mune{constructor(title,icon){this.title titlethis.icon icon}isDisabled(){return false}exec(){} } class Button extends Mun…

3.3.内存的学习,pinnedmemory,内存效率问题

目录 前言1. Memory总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习精简 CUDA 教程-内存模型&#xff0c;pinned memory&am…

双非本大二上岸大厂——念念不忘,必有回响

⭐️前言⭐️ 博主就读于一所普通的学校&#xff08;双非本&#xff09;&#xff0c;在大二下学期3月份开始网上投递简历&#xff0c;历时近百余天&#xff0c;投递简历500&#xff0c;面试近40余场&#xff0c;最终在6月份学期末&#xff0c;斩获了两个大厂offer&#xff08;北…

windows环境安装robotframework-ride

在Windows环境下&#xff0c;可以通过以下步骤安装Robot Framework RIDE&#xff1a; 安装Python 首先&#xff0c;需要在Windows环境下安装Python。建议使用Python 3.x版本&#xff0c;可以从官方网站下载并安装&#xff1a;https://www.python.org/downloads/windows/ 安装w…