第六节 微服务框架面试题

亮子 2022-08-11 13:41:27 13013 0 0 0

S1、集群与分布式有啥区别?

(1)相同点:
分布式和集群都是需要有很多节点服务器通过网络协同工作完成整体的任务目标。

(2)不同点:
分布式是指将业务系统进行拆分,即分布式的每一个节点都是实现不同的功能。而集群每个节点做的是同一件事情。

S2、什么是微服务?

(1)微服务是一种架构风格。

  • 微:小
  • 服务:能够独立部署,运行,提供功能的系统服务。

(2)思想:

  • 大的系统模块拆分成一个个的小功能模块,独立部署,共同组合成一个大的系统。
  • 微服务是一种特殊的分布式架构,架构思想相同,微服务的拆分力度更细,可以说微服务架构是分布式架构的子集。

S3、微服务架构有啥有点?

(1)灵活,扩展性极强。
(2)易于协同开发,责任划分明确。
(3)符合“高内聚,低耦合” 的编程思想。
(4)不受技术栈限制,方便系统迭代。

S4、微服务架构的缺点

(1)运维成本增加。(容器docker)
(2)跟踪问题复杂了。(统一的日志,链路追踪)

S5、微服务的拆分原则

(1)维度:时间,空间,成本,地域,业务….

(2)简单实用:横向提取,纵向切割。

  • 横向(水平):将系统中公共独立的功能提取出来。
  • 纵向(垂直):将系统按照业务功能模块切分,每个模块就是一个微服务。

S6、远程调用中RESTful和RPC有啥区别?

(1)目前主流的远程调用技术有基于HTTP的RESTful接口以及基于TCP的RPC协议。
(2)RESTful通讯协议HTTP,经常写的RestController就是RESTful风格,特点是比较灵活,通常用于微服务架构。
(3)RPC通讯协议一般使用TCP,性能较好,不如RESTful灵活,通常用于SOA架构。

S7、RestTemplate有啥用?

Spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接,我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优雅的调用RESTful服务的方式。

S8、说说你对CAP理论的理解?

  • 特点

(1)Consistency(一致性)
数据一致更新,所有数据的变化都是同步的
(2)Availability(可用性)
在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求
(3)Partition tolerance(分区容忍性)

  • 原理

(1)CAP目标:某个节点的故障,并不影响整个系统的运行
(2)CAP原理:任何分布式系统只可同时满足二点,没法三者兼顾,既然一个分布式系统无法同时满足一致性、可用性、分区容错性三个特点, 所以我们就需要抛弃一样;

CAP原理

  • 选择

CAP选择

S9、SpringCloud有哪些常用组件?

(1)Eureka(注册中心)、Nacos
(2)Zuul(网关)、Gateway
(3)Fegin(远程调用)、OpenFeign
(4)Ribbon(负责均衡)
(5)Hystrix(熔断器)

S10、SpringCloud Alibaba组件?

(1)Nacos(配置中心与注册中心)
(2)Sentinel(熔断与限流)
(3)Seata(分布式事务)

S10、服务熔断和服务降级有什么区别?

  • 相同点

(1)目的是一致的:都是从可用性和可靠性出发,为了防止系统崩溃;
(2)用户体验类似:最终都让用户体验到的是某些功能暂时不可用;

  • 不同点

触发原因不同:
(1)服务熔断一般是某个服务(下游服务)故障引起;所以熔断是被动的。
(2)服务降级一般是从整体负荷考虑,并发太大,先保证整体的可用;所以降级是主动。

S11、Zuul和Gateway的区别?

  • Zuul:
    使用的是阻塞式的 API,不支持长连接,比如 websockets。
    底层是servlet,Zuul处理的是http请求
    没有提供异步支持,流控等均由hystrix支持。
    依赖包spring-cloud-starter-netflix-zuul。

  • Gateway:
    Spring Boot和Spring Webflux提供的Netty底层环境,不能和传统的Servlet容器一起使用,也不能打包成一个WAR包。
    依赖spring-boot-starter-webflux和/ spring-cloud-starter-gateway
    提供了异步支持,提供了抽象负载均衡,提供了抽象流控,并默认实现了RedisRateLimiter。

  • 相同点

(1)底层都是servlet
(2)两者均是web网关,处理的是http请求

  • 不同点

(1)内部实现不同

  • gateway对比zuul多依赖了spring-webflux,在spring的支持下,功能更强大,内部实现了限流、负载均衡等,扩展性也更强,但同时也限制了仅适合于Spring Cloud套件
  • zuul则可以扩展至其他微服务框架中,其内部没有实现限流、负载均衡等。

(2)是否支持异步

  • zuul仅支持同步
  • gateway支持异步。理论上gateway则更适合于提高系统吞吐量(但不一定能有更好的性能),最终性能还需要通过严密的压测来决定

理解思路

  • 出生不一样:zuul是奈菲公司开源,gateway是spring官方开源
  • zuul是阻塞模型,使用了线程池,所以高并发时,可能导致转发失败,是同步
  • gateway使用的多路IO服用模型,是非阻塞,可以应对高并发,是异步

S12、SpringBoot的常用注解有哪些?

  • @Controller
  • @RestController
  • @Service
  • @RequestMapping
  • @RequestBody
  • @PathVariable
  • @RequestParam
  • @ResponseBody
  • @Autowired
  • @Component
  • @Bean