面试 - Spring Cloud

原创
2020/04/29 11:01
阅读数 154

微服务技术栈
服务开发:SpringBoot,SpringMVC
服务配置与管理:Netfix公司的Archaiusm,阿里的Diamond
服务注册与发现:Eureka,Zookeeper
服务调用:Rest,RPC,gRpc
服务熔断器:Hystrix
服务负载均衡:Ribbon,Nginx
服务接口调用:Fegin
消息队列:Kafka,RabbitMQ,ActiveMQ
服务配置中心管理:SpringCloudConfig
服务路由(API网关):Zuul
事件消息总线:Spring Cloud Bus

REST和RPC对比?
RPC主要的缺陷是服务提供方和调用方式之间的依赖太强,需要对每一个微服务进行接口的定义,并通过持续继承发布,严格版本控制才不会出现冲突。
REST是轻量级的接口,服务的提供和调用不存在代码之间的耦合,只需要一个约定进行规范。

Spring Cloud如何实现服务的注册?
1.服务发布时,指定对应的服务名,将服务注册到注册中心(Eureka、Zookeeper)
2.注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient,然后用Ribbon或Feign进行服务直接的调用发现。

作为服务注册中心,Eureka比Zookeeper好在哪里?
1.Eureka保证的是可用性和分区容错性,Zookeeper保证的是一致性和分区容错性。
2.Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障。而不会像Zookeeper那样使整个注册服务瘫痪。

Eureka和Zookeeper区别?
1.Eureka取CAP的AP,注重可用性,Zookeeper取CAP的CP注重一致性。
2.Zookeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,但选举期间不可用。
3.Eureka的自我保护机制,会导致一个结果就是不会再从注册列表移除因长时间没收到心跳而过期的服务。依然能接受新服务的注册和查询请求,但不会被同步到其他节点。不会服务瘫痪。
4.Zookeeper有Leader和Follower角色,Eureka各个节点平等。
5.Zookeeper采用过半数存活原则,Eureka采用自我保护机制解决分区问题。
6.Eureka本质是一个工程,Zookeeper只是一个进程。

Eureka自我保护机制是什么?
当Eureka Server节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保护模式。

什么是Ribbon?
Ribbon是一个负载均衡客户端,可以很好的控制Http和TCP的一些行为。Feign默认集成了Ribbon。

什么是Feigin?
1.Feign采用的是基于接口的注解。
2.Feign整合了Ribbon,具有负载均衡的能。
3.整合了Hystrix,具有熔断的能力。

Ribbon和Feign的区别?
1.Ribbon都是调用其他服务的,但方式不同。
2.启动类注解不同,Ribbon是@RibbonClient,Feign的是@EnableFeignClients
3.服务指定的位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
4.调用方式不同,Ribbon需要自己构建http请求,模拟Http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。Feign需要将调用的方法定义成抽象方法即可。

什么是Spring Cloud Bus?
Spring Cloud Bus将分布式的节点用轻量的消息代理连接起来,它可以用于广播配置文件的更改或者服务直接的通讯,也可用于监控。
如果修改了配置文件,发送一次请求,所有的客户端便会重新读取配置文件。

Spring Cloud断路器作用?
当一个服务调用另一个服务由于网络原因或自身原因出现问题,调用者就会等待被调用者的响应,当更多的服务请求到这些资源导致更多的请求等待,发生连锁效应(雪崩效应)。
全开:一段时间内,达到一定的次数无法调用,并且多次监测没有恢复的迹象,断路器完全打开,那么下次请求就不会请求到该服务。
半开:短时间内,有恢复迹象,断路器会将部分请求发给该服务,正常调用时,断路器关闭。
关闭:当服务一直处于正常状态,能正常调用。

什么是Spring Cloud Config?
在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件Spring Cloud Config,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。
在Spring Cloud Config组件中,分两个角色,一是Config Server,二是Config Client。

什么是Spring Cloud Gateway?
Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。
使用了一个RouteLocatorBuilder的Bean去创建路由,除了创建路由RouteLocatorBuilder可以让你添加各种Predicates和Filters。Predicates断言的意思,顾名思义就是根据具体的请求的规则,由具体的Route去处理,Filters是各种过滤器,用来对请求做各种判断和修改。

架构?
在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现、服务消费、负载均衡、断路器、智能路由、配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统。
在Spring Cloud微服务系统中,一种常见的负载均衡方式是,客户端的请求首先经过负载均衡(Zuul、Ngnix),再到达服务网关(Zuul集群),然后再到具体的服务。服务统一注册到高可用的服务注册中心集群,服务的所有的配置文件由配置服务管理,配置服务的配置文件放在Git仓库,方便开发人员随时改配置。

什么是Hystrix?
防雪崩利器,具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部