SpringCloud 题库
这篇文章是关于 SpringCloud 面试题的汇总,包括微服务的概念、SpringCloud 的组成及相关技术,如服务注册与发现、负载均衡、容错等,还涉及 Nacos 配置中心、服务注册表结构等原理,以及微服务架构中的日志采集、服务网关、相关概念和预防服务雪崩的措施等。
1、什么是微服务?
微服务是一种软件架构风格,是将复杂的应用拆分成一个个功能单一的服务。微服务使得开发、运维和部署更加灵活和高效。针对不同的业务类型的服务,可以用不同的技术和语言选型。各个微服务之间使用RPC进行网络通信,相比单体服务会带来网络开销。
2、SpringCloud有哪些组成?
1)服务注册与发现:一个系统可能有上百个微服务,这些微服务的配置以及状态都需要管理,SpringCloud有配置中心和注册中心
2)负载均衡:Ribbon是基于HTTP和TCP协议的负载均衡器。OpenFeign支持RPC调用
3)服务容错:Sentinel支持限流、熔断和降级
4)网关:SpringCloud Gateway可进行服务转发、过滤和负载均衡
5)分布式事务:要保证多个微服务之间数据一致性,需要分布式事务
3、Nacos作为配置中心的原理?
1)配置信息注册:服务启动了,Nacos客户端向服务端注册配置信息,服务将其保存下来并生成对应的版本号
2)配置信息存储:Nacos服务端将配置信息一般存储在数据库中,可以通过Nacos配置文件指定
3)配置信息获取:服务运行期间,Nacos客户端通过调用API拿到配置信息
4)配置信息变化监听:配置信息变化时,Nacos服务端会通知已经注册的客户端,并触发相应的回调方法
4、微服务架构中如何进行日志采集? 可以通过使用ELK方案进行采集
1)LogStash:是用于采集、过滤和转发日志数据的工具,可以采集微服务的日志信息
2)ElasticSearch:是用于存储和索引大量日志信息的工具,也提供了快速查询的功能
3)Kibana:日志数据可视化工具,从ElasticSearch中查询出日志数据后在界面展示
5、Nacos的服务注册表结构?
Nacos采用数据的分级存储模型,最外层的是namespace,用来隔离环境;然后是group,用来实现服务分组;接下来是服务(service),一个服务可以有多个实例,并且可能服务节点不在一个区域,所以服务下面还有集群(cluster),集群下还有多个实例(instance)。
6、Nacos的namespace的作用?
namespace用来隔离不同的环境(开发、测试和生产环境)和不同的服务的配置信息和服务信息,避免发生冲突。在Nacos中每个namespace都有自己的配置和服务注册表,意味着多个服务注册到Nacos中,这些服务是可以放到不同的namespace中的,每个namespace有唯一ID用于标识。
7、Nacos是强一致性的还是最终一致性的?
Nacos既可以是强一致性,也可以是最终一致性,是通过配置参数nacos.consistency.mode进行配置nacos.consistency.mode=AP nacos.consistency.mode=CP AP表示最终一致性,CP表示强一致性。
8、在SpringCloud中,如何做到负载均衡?
一般使用Ribbon进行负载均衡。Ribbon是客户端侧的负载均衡,在调用接口前,先到注册中心拿到可用的服务列表,并且缓存到本地,然后通过负载均衡算法选择出服务端节点。负载均衡还有一种常见的方式,就是服务端侧负载均衡,例如Nginx,就是请求快到服务端时,先经过Nginx,由Nginx选择合适的节点。
9、Http和RPC的区别?
HTTP是应用层的网络通信协议,RPC是远程调用,运用于微服务间通信。RPC的底层有可能是HTTP协议,也有可能是其他协议。
10、Ribbon和Feign调用服务的区别是什么?
Ribbon是基于HTTP和TCP协议的负载均衡组件,主要实现客户端侧负载均衡,需要在代码中手动设置调用目标服务。Feign是内置了Ribbon,用来实现负载均衡,而且Feign主要是通过注解定义接口,然后调用接口去调用注册中心的服务。
11、为什么Feign第一次调用耗时长?
这个与Feign内置了Ribbon有关。第一次调用,需要启动Ribbon,去注册中心拿到可用的服务列表,建立起连接池,所以比较耗时。往后的调用,服务列表已经存在本地,就不需要访问注册中心了。如果想要节省第一次调用的时间,最好是程序启动时进行一次预热,先自动调用一次。
12、什么是服务雪崩?
一个系统往往由多个微服务组成,一个功能可能需要调用多个微服务,例如A调用B,B调用C,C调用D等等。如果服务C宕机了,导致功能不可用,随着请求越来越多,可能会导致系统全面崩盘,这就是服务雪崩。可以通过以下几个方面预防服务雪崩:
1)服务的高可用部署:搭建集群
2)服务限流、降级和缓存,通过限流和缓存的方式保护服务,减少服务压力,在必要时采用服务降级的方式,即牺牲一些边缘功能来保证核心功能可用。
3)服务熔断,服务负载过大时,直接熔断,避免过多的请求涌入。
13、什么是服务降级?
服务降级是微服务中一种保护核心功能的机制,目的是在系统资源紧张的时候保证核心功能可用。例如可以将一些边缘的功能暂时关闭,或者在服务调用失败时,默认返回一个值来处理失败的情况,或者在申请某个资源失败时,返回一个预先准备的资源。
14、什么是服务熔断?
在微服务架构中,系统的服务相互调用,有的服务出现宕机现象,如果此时不处理,可能会导致整个系统崩溃。为了避免这种现象,要对服务进行熔断处理。也就是说关闭此服务的调用,避免发生系统崩溃。直到服务正常或者到达最大等待时间才恢复正常。
15、什么是服务限流?
服务限流可以看做是服务降级的一种,限流是通过限制系统请求的输入和输出,从而保护系统。限流是因为服务的吞吐量是可以预估的,为了保证系统正常,设置流量阈值。限流的方案有很多,比如限流算法,延迟解决,以及拒绝解决等等。
16、为什么需要服务网关?
在微服务架构中,存在服务相互调用,而服务的调用链路可能相当复杂,服务的部署和变化非常频繁,为了减少修改源代码,就是用了服务网关。服务网关是服务调用链路上的中间件,实现服务调用入口和出口的统一管理。 服务网关常用功能如下:
1)路由转发:服务网关可以通过路由转发的方式,将请求分发到不同的服务实例上
2)安全鉴权:可以将安全鉴权功能放在网关进行,这样就避免了每个微服务代码中都有安全鉴权的代码
3)日志监控:因为网关可以统一管理服务的出口和入口调用,很方便进行日志监控和请求统计
4)提高性能:通过服务网关,可以缓存些静态资源
5)服务保护:网关可以实现鉴权、负载均衡、流量控制等,从一定程度上保护了服务,提高服务的稳定性
17、SpringCloud Gateway的核心概念?
1)路由:路由是网关实现的核心功能,通过配置路由的方式,将请求转发到后端的服务实例上。路由规则可以根据请求的路径、方法、请求头等方式进行匹配,最后转发到指定目标的URI。
2)过滤器:这个主要针对请求进行处理和转换。比如协议转换,鉴权,日志统计等
3)断言:主要用于请求条件的匹配,如果请求满足断言的条件,那么就会应用所配置的过滤器。SpringCloud Gateway提供了多种断言机制,比如路径匹配、请求方法匹配等
原文地址:https://blog.csdn.net/chuige2013/article/details/144393744
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!