职场面试题总结(07)---SpringCloud组件底层原理、Eureka、Consul、Eureka与Nacos、Feign远程调用的协议

241 阅读6分钟

1、 SpringCloud组件底层原理?

(1)服务发现——Netflix Eureka Eureka Client:负责将这个服务的信息注册到 Eureka Server 中。 Eureka Server:注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号。

(2)客服端负载均衡——Netflix Ribbon Ribbon 的负载均衡策略: 1)随机 (Random) 2)轮询 (RoundRobin) 3)一致性哈希 (ConsistentHash) 4)哈希 (Hash) 5)加权(Weighted) Ribbon 的负载均衡默认使用的最经典的 Round Robin 轮询算法。 首先 Ribbon 会从 Eureka Client 里获取到对应的服务注册表,也就知道了所有的服务都部署在了哪些机器上,在监听哪些端口号。然后 Ribbon 就可以使用默认的 Round Robin 算法,从中选择一台机器。Feign 就会针对这台机器,构造并发起请求。

(3)断路器——Netflix Hystrix 发起请求是通过 Hystrix 的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。 Hystrix 是隔离、熔断以及降级的一个框架。

服务隔离: 1)业务之间不可互相影响,不同业务需要有独立的运行空间。 2)最彻底的,可以采用物理隔离,不同的机器部署在不同地方。 3)采用进程隔离,一个机器多个 Tomcat。 4)请求隔离。 5)由于 Hystrix 框架所属的层级为代码层,所以实现的是请求隔离,线程池或信号量。

服务熔断: 服务熔断的作用类似于我们家用的保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂时停止对该服务的调用。

服务降级: 服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些功能(业务场景)出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样,虽然提供的是一个有损的服务,但却保证了整个系统的稳定性和可用性。

(4)服务网关——Netflix Zuul Zuul,微服务网关,负责网络路由。 所有请求都往网关走,网关会根据请求中的一些特征,将请求转发给后端的各个服务。 而且有一个网关之后,还有很多好处,比如可以做统一的降级、限流、认证授权、安全,等等。

(5)分布式配置——Spring Cloud Config Spring Cloud Config为分布式系统中的外部配置提供服务器和客户端支持。 Spring Cloud Config具有中心化、版本控制、支持动态更新和语言独立等特性。其特点是: 1)提供服务端和客户端支持(Spring Cloud Config Server和Spring Cloud Config Client); 2)集中式管理分布式环境下的应用配置; 3)基于Spring环境,实现了与Spring应用无缝集成; 4)可用于任何语言开发的程序; 5)默认实现基于Git仓库(也支持SVN),从而可以进行配置的版本管理。

(6)服务调用——Netflix Feign 基于 Feign 的动态代理机制,根据注解和选择的机器,拼接请求 URL 地址,发起请求。 首先,如果你对某个接口定义了 @FeignClient 注解,Feign 就会针对这个接口创建一个动态代理。 接着你要是调用那个接口,本质就是会调用 Feign 创建的动态代理,这是核心中的核心。 Feign的动态代理会根据你在接口上的 @RequestMapping 等注解,来动态构造出你要请求的服务的地址。 最后针对这个地址,发起请求、解析响应。

2、Eureka 自我保护机制

默认情况下,如果 Eureka Server 在一定的 90s 内没有接收到某个微服务实例的心跳,会注销该实例。但是在微服务架构下服务之间通常都是跨进程调用,网络通信往往会面临着各种问题,比如微服务状态正常,网络分区故障,导致此实例被注销。 固定时间内大量实例被注销,可能会严重威胁整个微服务架构的可用性。为了解决这个问题,Eureka 开发了自我保护机制,那么什么是自我保护机制呢? Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 即会进入自我保护机制。

3、Consul、Eureka与Nacos的区别

Eureka 1)应用内/外:直接集成到应用中,依赖于应用自身完成服务的注册与发现。 2)ACP原则:遵循AP(可用性+分离容忍)原则,有较强的可用性,服务注册快,但牺牲了一定的一致性。 3)版本迭代:目前已经不进行升级。 4)集成支持:只支持SpringCloud集成。 5)访问协议:HTTP。 6)雪崩保护:支持雪崩保护。

Consul 1)应用内/外:属于外部应用,侵入性小。 2)ACP原则:遵循CP原则(一致性+分离容忍) 服务注册稍慢,由于其一致性导致了在Leader挂掉时重新选举期间真个consul不可用。 3)版本迭代:目前仍然进行版本迭代。 4)集成支持:支持SpringCloud、K8S集成。 5)访问协议:HTTP/DNS。 6)雪崩保护:不支持雪崩保护。

Nacos 1)应用内/外:属于外部应用,侵入性小。 2)ACP原则:通知遵循CP原则(一致性+分离容忍) 和AP原则(可用性+分离容忍)。 3)版本迭代:目前仍然进行版本迭代。 4)集成支持:支持Dubbo 、SpringCloud、K8S集成。 5)访问协议:HTTP/动态DNS/UDP。 6)雪崩保护:支持雪崩保护。

4、Feign远程调用的协议

Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求。Spring Cloud引入 Feign并且集成了Ribbon实现客户端负载均衡调用。Feign封装了Http调用流程,更适合面向接口化的变成习惯。 Feign远程调用流程图: 在这里插入图片描述

5、SQL优化步骤

(1)通过show status命令了解各种SQL的执行频率。 (2)定位执行效率较低的SQL语句。 (3)通过EXPLAIN分析较低SQL的执行计划。 (4)通过show profile分析SQL。 (5)通过trace分析优化器如何选择执行计划。 (6)确定问题并采取相应的优化措施。