【4】SpringCloud面试总结

287 阅读6分钟

Spring Cloud 核心组件?

组件第⼀代 Spring Cloud Netflix (SCN)第⼆代 Spring Cloud Alibaba(SCA)
注册中⼼Netflix Eureka阿⾥巴巴 Nacos
客户端负载均衡Netflix Ribbon阿⾥巴巴 Dubbo LB、SpringCloud Loadbalancer
熔断器Netflix Hystrix阿⾥巴巴 Sentinel
⽹关Spring Cloud GatewaySpring Cloud Gateway
配置中⼼Spring Cloud Config阿⾥巴巴 Nacos
服务调⽤Netflix Feign(RestTemplate+Ribbon+Hystrix)阿⾥巴巴 Dubbo RPC
消息驱动Spring Cloud Stream
链路追踪Spring Cloud Sleuth/Zipkin
..阿⾥巴巴 seata 分布式事务⽅案

Spring Cloud 与 Dubbo 对比?

  • Dubbo基于RPC调⽤
  • Spring Cloud Netflix是基于HTTP的,所以效率上没有Dubbo⾼
  • Dubbo体系的组件不全,不能够提供⼀站式解决⽅案,⽐如服务注册与发现需要借助于Zookeeper等实现,
  • ⽽Spring Cloud Netflix则是真正的提供了⼀站式服务化解决⽅案,且有Spring⼤家族背景。

rpc:

RPC全称为remote procedure call,即远程过程调用。借助RPC可以做到像本地调用一样调用远程服 务,是一种进程间的通信方式。RPC并不是一个具体的技术,而是指整个网络远程调 用过程。

Eureka和ZooKeeper区别?

  • ZooKeeper中的节点服务挂了就要选举在选举期间注册服务不可用的,选举就是改微服务做了集群,必须有一台主其他的都是从
  • Eureka各个节点是平等关系,服务器挂了没关系,只要有一台Eureka就可以保证服务可用。
  • Eureka本质上是一个工程,而ZooKeeper只是一个进程

Spring Cloud GateWay

1、介绍网关

提供统⼀的路由⽅式

基于过滤器链可以实现鉴权、流量控制、熔断、路径重写、⽇志监控等。

Spring Cloud GateWay的过滤器分为GateWayFilterGlobalFilter两种

  • GateWayFilter 应⽤到单个路由路由上
  • GlobalFilter (全局过滤器) 应⽤到所有的路由上

使用nginx 可以实现GateWay的高可用

GateWay核⼼逻辑:路由转发+执⾏过滤器链

GateWay提供很多路由规则,可以使用正则匹配、请求方式匹配、指定Header正则匹配等,还可以动态路由配置,⾃动从注册中⼼中获取服务列表并访问。

2、网关在我们项目做了什么?

实现了GlobalFilter进行鉴权

鉴权过程:

  • 1、定义不需要鉴权的url,如'/oauth','/user/login',
  • 2、从请求的header里面拿到token,没有token且不是 不需要鉴权的url 返回401
  • 3、从token里面拿到jwt对象
  • 4、从jwt获取到userId,userName
  • 5、将userId,userName放到请求的header里面,如果请求是忽略url,则过滤器直接放行了,用户信息就分发到下游的微服务
  • 6、用户端不需要鉴权,只验证jwt
  • 7、管理员端需要调用权限服务查询用户对该请求的url是否有权限

一句话: 将用户信息放到请求的header里面,忽略url直接放行,用户端只验证jwt,管理员端需要判断是否有权限。

Ribbon

Nginx与Ribbon的区别?

负载均衡⼀般分为服务器端负载均衡和客户端负载均衡

  • 服务器端负载均衡:Nginx,Nginx是反向代理同时可以实现负载均衡,请求通过nginx服务器进行转发。
  • 客户端负载均衡:Ribbon,Ribbon是Netflix发布的负载均衡器。Eureka⼀般配合Ribbon进⾏使⽤,Ribbon利⽤从Eureka中读取到服务信息,在调⽤服务提供者提供的服务时,会根据⼀定的算法进⾏负载。

Ribbon是怎么使用的?

不需要引⼊额外的Jar坐标,因为在服务消费者中我们引⼊过eureka-client,它会引⼊Ribbon相关Jar

通过 @LoadBalanced注解 开始开启客户端负载均衡。

Ribbon负载均衡策略?

  • 轮询策略
  • 随机策略
  • 重试策略
  • 最⼩连接数策略
  • 可⽤过滤策略
  • 区域权衡策略(默认策略):扩展了轮询策略除了过滤超时和链接数过多的server,还会过滤掉不符合要求的区域⾥⾯的所有节点,在⼀个区域/机房内的服务实例中轮询

Ribbon底层实现原理?

使用%取余算法获取目标服务集群索引,返回获取到的目标服务信息。

Hystrix

属于⼀种容错机制,具有服务降级,服务熔断,服务隔离,监控等一些防止雪崩的技术。

什么是微服务中的雪崩效应?

假设微服务A调⽤微服务B和微服务C,微服务B和微服务C⼜调⽤其它的微服务,这就是所谓的“扇出”。如果扇出的链路上某 个微服务的调⽤响应时间过⻓或者不可⽤,对微服务A的调⽤就会占⽤越来越多的系统资源,进⽽引起系统崩溃,所谓的“雪崩效应”。

雪崩效应解决方案

服务熔断

  • 服务熔断重点在“断”,切断对下游服务的调⽤
  • 服务熔断和服务降级往往是⼀起使⽤的,Hystrix就是这样。

服务降级

返回兜底数据,通常是在Feign组件@FeignClient注解中定义fallback回调方法

服务限流

  • 限制总并发数(⽐如数据库连接池、线程池)
  • 限制瞬时并发数(如nginx限制瞬时并发连接数)

Feign

Feign和openFeign的区别?

Feign是⼀个以Java接⼝注解的⽅式调⽤Http请求的客户端,SpringCloud对Feign进⾏了增强,使Feign⽀持了SpringMVC注解 (OpenFeign)

Feign = RestTemplate+Ribbon+Hystrix

SpringCloud有几种调用接口方式

  • Feign
  • RestTemplate:需要自己去拼接url

Sentinel

Hystrix和Sentinel的区别

  • 1、从隔离策略上来讲都是信号量隔离(根据并发线程数限流)
  • 2、从熔断降级策略上来讲都基于响应时间、异常比率,Sentinel多了异常数
  • 3、从功能上的实时统计实现来讲,Sentinel滑动窗口(LeapArray)Hystrix滑动窗口(基于 RxJava)
  • 4、动态规则配置都是支持多种数据源
  • 5、都具有扩展性和基于注解的支持
  • 6、从限流上来讲Sentinel是基于 QPS,支持基于调用关系的限流,而Hystrix只有有限的支持
  • 7、Sentinel支持流量整形支持预热模式、匀速器模式、预热排队模式(流量规则处可配置),而Hystrix不支持
  • 8、Sentinel的控制台提供开箱即用的控制台,可配置规则、查看秒级监控、机器发现等,而Hystrix只有简单的监控查看

服务注册和发现是什么意思?Spring Cloud 如何实现?

当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降,而某些位置可能会发生变化。手动更改属性可能会产生问题。Eureka服务注册和发现可以在这种情况下提供帮助。 由于所有服务都在 Eureka 服务器上注册并通过调用 Eureka 服务器完成查找,因此无需处理服务地点的任何更改和处理。

微服务rpc远程服务调用最核心的是什么?

服务的注册与发现,就是要做到高可用。试想你的注册中心只有一个服务,一旦挂了会导致整个服务不可用。搭建注册中心的集群,实现负载均衡和故障容错。