spring cloud 面试题

参考 : https://blog.csdn.net/forezp/article/details/83999882

Spring Cloud是一个全家桶式的技术栈,包含了很多组件。也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个组件

Spring Cloud核心组件:Eureka

注册中心

Spring Cloud核心组件:Feign

各微服务之间相互调用

是如何实现的呢, Feign的一个关键机制就是动态代理, 首先你对一个service加上了@FeignClient注解, Feign就会对这个接口实现一个动态代理,接着调用这个接口就调用的动态代理,Feign会对你根据你接口中方法上定义的@RequestMapping等注解,来动态构造出你需要请求的地址,然后针对这个地址发起请求和解析响应

Spring Cloud核心组件:Ribbon

看完了Feign,现在问题又来了,分布式下如何知道请求哪服务,Ribbon就是解决问题的,它的作用是负载均衡,会均匀把请求分到各个服务器,它是如何分配的呢 默认是用的轮询算法

此外,Ribbon适合Eureka,Feign紧密结合起来

Spring Cloud核心组件:Hystrix

业务场景,一个业务流程里面要调用三个服务,其中一个服务挂了,每次都会卡上几分钟,然后抛出异常。如果系统高并发情况下,最初的一个服务没有多余的线程处理请求了,也就跟着挂了,不响应其它请求。

多服务相互调用 如果没有报错措施,一个服务挂了就会引发连锁反应,导致别的服务也挂,如果最开始挂掉的方服务我们没有那么大的强依赖,大不了可以记录错误日志或者存库,等它恢复了慢慢处理

Hystrix 是隔离 熔断 以及降级的一个框架, 

说白了 Hystrix会搞很多小的线程,服务是一个线程池,每个线程池处理它的服务的请求,服务挂了 也就它的线程卡死,其它的服务照样运行,

但是如果服务挂了,每次都卡时间, 没有意义,就可以直接熔断,比如前5分钟内的请求都挂了,那就直接熔断直接返回。

当然熔断直接返回比较暴力,就可以请求降级 数据库里面存条数据等。

Spring Cloud核心组件:Zuul

路由  也就是微服务网关

假如系统有好多的微服务,客户端不可能要知道所有微服务的地址服务名,之类的。就全部请求发送到网关来路由,根据请求地址的一些特征

有个好处是 可以做统一的 降级 限流 认证授权 安全等

 

 

 

你可能感兴趣的:(面试,springcloud,springboot)