2020年springcould面试题 下

负载均衡的意义是什么?

    答案1:

 微服务是将业务代码拆分为很多小的服务单元,服务之间的相互调用通过HTTP协议来调用,为了保证服务的高可用,服务单元往往都是集群化部署的,那么消费者该调用那个服务提供者的实例呢?

 服务消费者集成负载均衡组件,该组件会向服务消费者获取服务注册列表信息,并隔一段时间重新刷新获取列表。当服务消费者消费服务时,负载均衡组件获取服务提供者所有实例的注册信息,并通过一定的负载均衡策略(可以自己配置)选择一个服务提供者实例,向该实例进行服务消费,这样就实现了负载均衡。

答案2:

在计算中,负载均衡可以改善跨计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器等多种计算资源的工作负载分布。负载均衡旨在优化资源使用,最大吞吐量,最小响应时间并避免任何单一资源的过载。使用多个组件进行负载均衡而不是单个组件可能会通过冗余来提高可靠性和可用性。nginx     dubbo    springcloud

微服务之间是如何独立通讯的

 同步通信:dubbo通过 RPC 远程过程调用、springcloud通过 REST接口json调用(ribbon

feign)等 。

异步:消息队列,如:RabbitMq、ActiveMq、Kafka 等。

springcloud如何实现服务的注册?

   1.服务发布时,指定对应的服务名,将服务注册到 注册中心(eureka zookeeper)

   2.注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient或者@EnableEurekaClient,然后用ribbon或feign进行服务直接的调用发现。

Eureka和Zookeeper区别

   CAP:CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾

https://baike.baidu.com/item/CAP%E5%8E%9F%E5%88%99/5712863?fr=aladdin

  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 节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保护模式。

  自我保护阀值 = 服务总数 * 每分钟续约数 * 自我保护续约百分比阀值因子(0.85)。

每分钟续约数 =(60S/客户端续约间隔(默认30秒可以自己配置))

最后自我保护阀值的计算公式为:

 自我保护阀值 = 服务总数 * (60S/客户端续约间隔) * 自我保护续约百分比阀值因子。

什么是服务熔断?什么是服务降级?

熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务不可用或者响应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速返回“错误”的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。

在SpringCloud框架里熔断机制通过Hystrix实现,Hystrix会监控微服务间调用的状况,当失败的调用到一定阈值,缺省是5秒内调用20次,如果失败,就会启动熔断机制。熔断机制的注解是@HystrixCommand。

服务降级,一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值。这样做,虽然水平下降,但好歹可用,比直接挂掉强。

什么是feigin?它的优点是什么?

https://baike.baidu.com/item/%E5%A3%B0%E6%98%8E%E5%BC%8F%E7%BC%96%E7%A8%8B/9939512?fr=aladdin

       Feign是一个声明式(告诉计算机需要计算“什么”而不是“如何”去计算)WebService客户端.使用Feign能让编写WebService客户端更加简单,它的使用方法是定义一个接口,然后在上面添加注解

1.feign采用的是基于接口的注解

2.feign整合了ribbon,具有负载均衡的能力

3.整合了Hystrix,具有熔断的能力

 使用:

1.添加pom依赖。

2.启动类添加@EnableFeignClients

3.定义一个接口@FeignClient(name=“xxx”)指定调用哪个服务

Ribbon和Feign的区别?

    ribbon是一个负载均衡客户端,可以很好的控制http和tcp的一些行为。feign默认集成了ribbon。

1.Ribbon和feign都是调用其他服务的,但方式不同。

2.启动类注解不同,Ribbon是@RibbonClient feign的是@EnableFeignClients(参考springcloud_demo20191224中micro_services中user_mgr和pay_mgr项目)

3.服务指定的位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。

4.调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。Feign需要将调用的方法定义成抽象方法即可。

springcloud断路器作用?

当一个服务调用另一个服务由于网络原因或自身原因出现问题,调用者就会等待被调用者的响应

当更多的服务请求到这些资源导致更多的请求等待,发生连锁效应(雪崩效应)

断路器有3中状态:

完全打开

     一段时间内 达到一定的次数无法调用 并且多次监测没有恢复的迹象 断路器完全打开 那么下次请求就不会请求到该服务

半开: 短时间内 有恢复迹象 断路器会将部分请求发给该服务,正常调用时

断路器关闭

关闭: 当服务一直处于正常状态 能正常调用

什么是Hystrix?

       Hystrix 能使你的系统在出现依赖服务失效的时候,通过隔离系统所依赖的服务,防止服务级联失败,同时提供失败回退机制,更优雅地应对失效,并使你的系统能更快地从异常中恢复

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

双十一 提示 哎哟喂,被挤爆了。 app秒杀 网络开小差了,请稍后再试。

服务降级:

优先核心服务,非核心服务不可用或弱可用。

通过HystrixCommand注解指定。fallbackMethod(回退函数)中具体实现降级逻辑。

雪崩效应:

分布式系统中的服务通信依赖于网络,网络不好,必然会对分布式系统带来很大的影响。在分布式系统中,服务之间相互依赖,如果一个服务之间出现了故障或者网络延迟,在高并发的情况下,会导致线程阻塞,在很短的时间内该服务的线程资源会消耗殆尽,最终使得该服务不可用。由于服务的相互依赖,可能会导致整个系统的不可用,这就是“雪崩效应”。为了防止此类事件的发生,分布式系统必然要采取相应的措施,如熔断机制(Springcloud采用的是Hystrix)


 Spring Cloud Gateway

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。

使用了一个RouteLocatorBuilder的bean去创建路由,除了创建路由RouteLocatorBuilder可以让你添加各种predicates和filters,predicates断言的意思,顾名思义就是根据具体的请求的规则,由具体的route去处理,filters是各种过滤器,用来对请求做各种判断和修改。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容