【狂神说】SpringCloud常见面试题
1. 什么是微服务
- 微服务是一种架构风格;
- 微服务就是把一个项目拆分成独立的多个服务,每个服务可以独立的开发、部署、运维,每个服务都会占用线程。
2. 微服务之间是如何独立通信的
- 基于HTTP的REST调用、或基于TCP的RPC调用;
- SpringCloud一般是基于HTTP协议的REST调用;
- Dubbo一般是基于Dubbo协议的RPC调用。
3. SpringCloud和Dubbo有哪些区别
- SpringCloud比Dubbo更强大,涵盖面更广,它能够与SpringFramework、SpringBoot、SpringData等Spring框架完美融合;
- 使用Dubbo构建的微服务架构就像组装电脑,各个环节自由度很高;使用SpringCloud构建的微服务架构就像品牌机,性能更稳定;
- SpringCloud使用Feign远程调用方式,基于成熟的HTTP协议,受限于协议本身特点,请求和响应格式臃肿,其通信效率相对差;Dubbo采用Dubbo自定义的协议远程调用,是一种典型的RPC调用方案,该协议自定义了Java序列化和反序列化方式、数据传输格式,因此数据传输性能优于HTTP协议。
4. SpringBoot和SpringCloud,谈谈理解
- SpringCloud是一系列框架的集合,它借助SpringBoot的开发便利性简化了分布式系统基础设施的开发;
- SpringCloud并没有重复造轮子,它是将各个公司已有的、经过考验的框架集合起来,借助SpringBoot的开发风格进行再封装,屏蔽了复杂的配置和实现原理,为开发者提供了一套简单易懂的开发工具包。
5. 什么是服务熔断,什么是服务降级
-
服务熔断:
熔断就像保险丝,当电流达到一定额度时,保险丝就会融化,这时电路就会断开,起到了保护电器的作用;
在微服务里也是一样,当下游的目标服务因为访问压力过大或者其他某种原因突然变得不可用或者响应变慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源;直至目标服务情况好转则恢复调用。 -
服务降级:
服务降级是从整个系统的负荷情况出发和考虑的,对某些负荷会比较高的情况,为了预防某些服务出现负荷过载或者响应慢的情况,在其内部暂时舍弃对一些非核心接口和数据的请求,而直接返回一个提前准备好的fallback(退路)错误处理信息。这样虽然提供的是有损服务,但保证了整个系统的稳定性和可用性。 -
熔断vs降级:
触发原因不同
服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑。
6. 微服务的优缺点
-
优点:
1.技术栈不受限;
2.系统耦合性低;
3.模块启动快; -
缺点:
4.系统结构复杂,运维难度大;
5.网络调用成本大;
6.接口修改成本高。
7. 你所知道的微服务技术栈
- Eureka:服务注册与发现;
- Ribbon:负载均衡;
- Feign:服务调用;
- Hystrix:服务熔断与降级;
- Zuul:服务网关;
- SpringCloud Config:分布式配置中心。
8. Eureka和Zookeeper都可以提供服务注册与发现,区别在哪
著名的CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)、P(容错性)。
由于分区容错性P再分布式系统中是必须要保证的,因此我们只能在A和C之间进行权衡。
- Zookeeper保证的是CP;
- Eureka保证的是AP。
- Zookeeper有Leader和Follower角色,Eureka各节点平等;
- Zookeeper在选举期间服务瘫痪,虽然会最终恢复,但选举期间服务不可用;Eureka各节点平等,只要有一台Eureka就可保证服务可用,但数据不是最新的。