admin 管理员组文章数量: 1086019
2024年4月30日发(作者:cp命令复制文件夹)
springcloud
说说SpringBoot和SpringCloud的区别?
1、SpringCloud就是一个框架的整合集;
2、SpringCloud中最强的是SpringCloudAlibaba和Netflix(奈飞);
3、SpringBoot是用来快速开发Spring项目的;
4、SpringBoot和SpringCloud的关系是:由SpirngCloud将各类不同的框架整合,再由
SpringBoot进行简化开发。
SpringCloud和Dubbo对比
1、SpringCloud与Dubbo都是实现微服务有效的工具;
2、Dubbo只是实现了服务治理,而SpringCloud子项目分别覆盖了微服务架构下的众多部件;
3、Dubbo使用RPC通讯协议(传输层,基于TPC协议),SpirngCloud使用RESTful完成通信
(应用层,基于HTTP协议),Dubbo效率略高于SpringCloud。
注:
RPC是TCP层(传输层)协议,底于底层协议效率更高,但功能不够丰富;
RESTful是HTTP协议(应用层),功能丰富,操作更简单,但效率相对较低。
Cloud ALibaba跟SpringCloud在使用上有什么区别?
伴随着在2018-12-12号Netflix 宣布停止开发Spring Cloud的相关服务:Ribbon、Feign、
Eureka、Hystrix。因此阿里对外开源了一套用于管理springboot的微服务云框架Spring
Cloud Alibaba。其采用阿里中间件作为基础,实现了 Spring Cloud 的微服务规范。
内部也有很多的组件,如通过Nacos替换Eureka,通过Nacos替换Spring Cloud Config,通
过Sentinel替换Hystrix。将Dubbo 将会作为 Spring Cloud Alibaba 的 RPC 组件,并与
Spring Cloud 原生的 Feign 以及 RestTemplate 进行无缝整合。
但是由于Spring Cloud Alibaba还没有纳入到Spring Cloud的主版本管理中,所以在使用的
时候,还需要额外去引入它的依赖信息。
5大核心组件⭐
1、服务发现—Netflix Eureka
2、客服端负载均衡—Netflix Ribbon
3、断路器—Netflix Hystrix
4、服务网关—Spring Cloud Gateway
5、分布式配置—Spring Cloud Config
Eureka
Eureka是Netfilix公司公源的一个服务注册与发现的组件。
Eureka和其他Netfilix公司的服务组件(例如负载均衡、熔断器、网关等)一起被
SpringCloud社区整合为Spring-Cloud-Netflix模块。
Eureka包含两个组件:EurekaServer(注册中心)和EurekaClient(服务提供者、服务消费者)。
不过Eureka目前已经停止更新了,现在一般用的是Nacos。
什么是Eureka的自我保护机制?
如果一个Eureka服务器上面注册了多个微服务,其中一个微服务器已经死机,按理说,我们
Eureka服务器会把这个微服务给剔除,但是Eureka一旦开启自我保护机制(默认开启),这
种死掉的机器也不会被剔除。
自我保护机制是防止微服务假死或者网络波动而导致暂时的死亡,宁可保留也不选择剔除。
Ribbon?
Ribbon是Netflix提供的一个基于HTTP和TCP的客户端负载均衡工具。(如果导入了Eureka
的jar包,就不需要再导Ribbon的jar包)
Ribbo两大主要功能:
1、简化远程调用——通过服务名称,找到服务,自动进行URL自动拼接
2、负载均衡——创建代理对象
Ribbon的负载均衡策略有哪些?
Ribbon负载均衡策略(七种):
1、随机:RandomRule
2、轮询:RoundRobinRule 【默认】
3、最小并发(访问最闲的,由Eureka判断):BestAvaliableRule
4、过滤(过滤掉并发太高,或者坏掉的):AvailabilityFilteringRule
5、响应时间(发一个包,判断响应快慢):WeightedResponseTimeRule
6、轮询重试(再加一轮轮询):RetryRule
7、性能可用性(综合判断性能):ZoneAvoidanceRule
Feign?
Feign是一个声明式的REST客户端,它用了“基于接口”的注解方式,很方便实现客户端配置。
Feign是对Ribbon的封装,所以也可以作负载均衡。本质作用还是实现两个服务之间的远程
调用。
使用Feign进行远程调用,不需要再去写URL。
Feign的底层就是http协议。
说说Feign和Dubbo的区别是什么?
相同点:都依赖注册中心、负载均衡。
不同点:
Dubbo:
支持多传输协议(Dubbo、Rmi、http、redis等等),可以根据业务场景选择最佳的方式。非常
灵活。
默认的Dubbo协议:利用Netty,TCP传输,单一、异步、长连接,适合数据量小、高并发和
服务提供者远远少于消费者的场景。
Feign:
基于Http传输协议,短连接,不适合高并发的访问。
Hystrix
Hystrix主要用于出现级联失败(也就是雪崩),也就是防止一个失败而导致的一连串的失败
(区分“缓存雪崩”,两者不同)。
Hystrix在微服务的外面进行保护,主要功能有:
隔离
线程池隔离(操作线程):总线程池针对不同的服务,各自分配一定数量的线程数,从而防止
一个服务失败,占用所有线程。
信号量隔离(操作变量):设置不同服务的线程阈(yu)值,达到阈值则不再给该服务分配线
程,理由如上。
降级:服务失败后,失败的服务方执行降级方案,并回一个失败信息。调用方收到信息后,设
置对失败服务调用的降级方案。(两头都会进行设置,降级方案见下)
熔断:如果服务一直失败,调用方会进行熔断,拒绝所有调用失败服务的请求;如果失败的服
务恢复了,调用方又会自动重新连接上服务。
限流:限制请求访问频率,每次固定数量。
Hystrix的降级机制
作用:当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有
策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作
或高效运作。
方式:
——快速失败:
表示消费方对该服务的方法调用都直接返回null值,不发起远程调用。用来屏蔽不重
要服务不可用时对调用方的影响。
——安全失败:
表示消费方对该服务的方法调用在失败后,再返回null值,不抛异常。用来容忍不重
要服务不稳定时对调用方的影响。
使用Hystrix的降级机制时,如果出现超时或异常,Hystrix一定会
降级吗?
不一定。Hystrix在外部接收所有请求,Feign只是内部微服务调用。
如果是在与浏览器之间的请求发生异常或超时,就会直接被Hystrix降级,显示的是Hystrix
的降级消息;
如果是对外连接成功,在内部进行微服务的调用时,发生异常或超时,会被Feign(底层Ribbo)
降级,显示的是Feign的降级消息。
Hystrix的熔断机制
Hystrix熔断机制,用于监控微服务调用情况,当失败的情况达到预定的阈值(5秒失败20
次),会自动打开断路器,拒绝所有请求(不论是否降级);断路器开启时间达到默认时间5
秒时,断路器会变为半开状态,当调用成功次数达到阈值,说明服务恢复正常,断路器会自动
关闭,否则仍会打开断路器。
Gateway
网关本质上就是一个服务器,封装了应用程序的内部结构,为客户端提供统一服务,
一些与业务本身功能无关的公共逻辑可以在这里实现,如:认证、鉴权、监控、缓存、
负载均衡、流量管控、路由转发等。
解决以下问题:
客户端多次请求不同的微服务,增加客户端的复杂性
认证复杂,每个服务都要进行认证
http请求不同服务次数增加,性能不高:每个请求都要三次握手,四次挥手。
Gateway有哪些重点路由配置?
路由(routes)最重要的三个配置就是:id、uri、predicates (/'predɪkət/)
Id:唯一标识。默认是一个UUID;
Uri:转发路径
Predicates:条件,用于请求网关的匹配规则(比如:Path=/goods/**)
Gateway有几种过滤器?
两种:
局部过滤器:针对单个路由;
全局过滤器:针对所有路由。
什么是面向服务架构—SOA?
SOA:(Service-Oriented Architecture,面向服务的架构)是一个组件模型,它将应
用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口
和契约联系起来。——即服务与服务之间不直接进行调用。
SOA架构为了解决分布式架构中的服务提供方一改全改的问题,引进了ESB概念(总
线调控),不同服务之间的通信由ESB调控。
什么是微服务架构?
微服务架构是在SOA上做的升华,微服务架构强调的一个重点是“业务需要彻底的组件
化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。
这些小应用之间通过服务完成交互和集成。
特点:
服务实现组件化:开发者可以自由选择开发技术。也不需要协调其他团队。
服务之间交互一般使用REST API——REST风格
去中心化:每个微服务有自己私有的数据库持久化业务数据。
自动化部署:把应用拆分成为一个一个独立的单个服务,方便自动化部署、测试、运
维。
正向代理和反向代理有什么区别?
正向:主动发起,知道最终要访问谁。
反向:主动发起,但不知道最终要访问谁,只知道能从代理服器中获取。
Cloud Alibaba
SpringCloudAlibaba包括哪些常用组件?
Sentinel(使用):把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保
护服务的稳定性。
Nacos(使用):一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠
的消息发布与订阅服务。
Dubbo:Apache Dubbo™(使用)是一款高性能 Java RPC 框架。
Seata(使用):阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中
心产品。
Alibaba Cloud OSS(使用): 阿里云对象存储服务(Object Storage Service,简称 OSS),
是阿里云提供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、
任何地点存储和访问任意类型的数据。
Alibaba Cloud SchedulerX(收费,用XXL-Job替换): 阿里中间件团队开发的一款分布式任务
调度产品,提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
Alibaba Cloud SMS(使用): 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,
帮助企业迅速搭建客户触达通道。
为什么使用Nacos而不使用Eureka?
1、Eureka在2018年就停止更新了;
2、Nacos=Spring cloud注册中心+Spring CLoud配置中心,使用Nacos,就不用再使用
Config了。
Nacos配置文件动态刷新怎么做的?
在需要动态获取配置信息的类上添加@RefreshScope 进行自动刷新。
为什么@RefreshScope可以实时更新远程配置?
这个类中的属性对nacos配置进行监听,一旦nacos重新发布新的属性值则自动创建一
个新的AppConfig对象替换旧对象实现自动更新。
Nacos服务注册发现步骤是什么?
(1) 服务提供者将注册信息写入到Nacos注册中心的服务注册表中。(写)
(2) 服务注册中心将服务提供者的实例交给Service Holder(服务持有容器)处理,服务实
例将会挂载在Service Holder的空间下。(放)
(3) 服务注册成功后,提供者将与服务中心维持心跳,未能及时发送心跳的服务将会被剔除。
(连)
(4) 服务发现支持两种场景。(收)
1、消费者可以直接向注册中心发送获取某个服务实例的请求,这种情况下注册中心将返回所
有可用的服务实例给消费者,但是一般不推荐这种情况。
2、【使用】服务的消费者向注册中心订阅某个服务,并提交一个监听器,当注册中心中服务
发生变更时,监听器会收到通知,这时消费者更新本地的服务实例列表,以保证所有的服务均
是可用的。
Seata的使用流程是怎么样子的?
使用四步:
1、加依赖
2、改配置
2、注意datasource数据源只能替换用druid
3、加注解,启动Seata服务器
Seata的结构有了解吗?
Transaction Coordinator (TC):事务协调器,维护全局事务的运行状态,负责协调并驱动全
局事务的提交或回滚。
Transaction Manager (TM):控制全局事务的边界,负责开启一个全局事务,并最终发起全局
提交或全局回滚的决议。
Resource Manager (RM):控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指
令,驱动分支(本地)事务的提交和回滚。
Seata的实现原理有了解吗?
Seata将一个本地事务做为一个分布式事务分支,所以若干个分布在不同微服务中的本地事务
共同组成了一个全局事务,结构如下。
TM先向TC申请开启一个全局事务,TM同意后会给分布式事务开启全局唯一事务ID,每个成
员事务会找TC注册自己的事务分支,TC会将唯一ID给每一个分支事务,所有分支收到ID后,
TM会向TC发起全局提交或全局回滚的决议,TC就会向所有RM发送最终提交还是回滚的指令
(undo log实现),所有RM接受指令执行。
版权声明:本文标题:springcloud面试问题总结 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1714427113a679805.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论