面试题--SpringCloud

1、集群

        一组共同工作的服务群体,每个服务实体都具有完整的业务功能

        特性:可扩展性:新的业务可动态添加到集群中。      

                   高可用性:一个服务实体挂了,还有其他服务实体替代。

2、负载均衡

        根据算法把请求分发给不同的服务器,从而获得高可用性和较好的性能。

3、分布式

        将不同的业务分布在不同的服务实体上,每个服务实体都是不同的功能,所有的服务实体的功能组合起来形成一个完整的功能。一个服务实体挂了,整个业务就挂了。

4、集群和分布式

        分布式:降低系统间的耦合度,提高服务服用性和效率

        集群:提高服务器处理能力,高并发、高可用

5、微服务

        把一个完整的系统分成多个子系统,每个子系统都有自己的独立功能和进程,这些子系统之间通过http或者RPC协议通信,不同子系统可以选择不同的编程语言,每个子系统都可以由自己独立的数据库。

6、spring cloud常用组件

        Eureka:管理微服务的通信地址,通过服务名调用服务。

        Ribbon、Fegin:都是客户端的负载均衡。在服务发生调用的时候,将请求按照某种算法发送到多个目标服务器上。

        Hystrix:熔断器。解决微服务故障问题,当请求需要多个微服务完成时,其中某个服务器发生故障,导致整个服务器出现故障,此时通过熔断器进行服务降级,并返回兜底数据。

        Zuul、getway:微服务网关。所有请求都经过Zuul转发到目标服务。他可以做一些用户鉴权,请求监控

        Config:分布式配置,管理服务的配置文件。

7、服务注册

        微服务客户端将自己的IP、port等信息发送到注册中心保存起来。后期访问就根据ip、端口号访问。

8、服务发现

        微服务客户端会定期(30s)向注册中心拉取他的地址列表缓存到本地。当发起调用时就可以根据这个地址列表寻找目标地址发送请求。

9、服务续约      

        微服务客户端每隔一段时间向注册中心发送心跳请求,代表我还活着。当在规定时间(3次机会,每次30s)内没有发送请求,注册中心就会立马删除此服务地址信息。

10、如果服务挂了,注册中心要等到90s后剔除,那么在剔除前这段时间,挂掉的服务有可能还是会被调用,怎么处理

        1、修改注册中心的剔除服务器时间间隔,加快服务续约的心跳请求频率

        2、使用hystrix的熔断降级机制,当服务不能访问,则返回兜底数据。

        3、重试

11、服务发现和服务续约每隔30s做一次请求实现技术。

        通过ThreadPoolExecutor线程池的scheduler定时任务实现

        服务发现是先判断是否开启了服务发现功能(默认开启),获取定时任务的间隔时间(30s),然后初始化服务发现的定时任务,时间间隔可以在配置文件中修改。

        服务续约是先判断是否开启服务注册(默认开启),获取定时任务时间间隔(30s),然后初始化心跳请求的定时任务,时间间隔可以在配置文件中修改。

12、Ribbon是什么,Ribbon的工作原理                      

        提供客户端负载均衡算法,可以通过负载均衡算法向多个服务发起调用。

        原理:在一个服务节点做了集群后,其他服务节点调用此服务时,会根据服务名找到多个端口,此时ribbon通过负载均衡算法向多个端口中的一个发送请求

13、Ribbon负载均衡算法,配置方法

        算法:RoundRobinRuoe:轮询

                   AvailabilityFilteringRule:忽略短路、并发高的服务器

                   WeightedResponseTimeRule:权重,性能高的服务器会多接收请求

                   ZoneAvoidanceRule:以区域可用的服务器为基础进行服务器的选择

                   BestAvailableRule:忽略短路服务器,选择并发低的服务器

                   RandomRule:随机可用

                   Retry:重试机制的选择逻辑

        配置方法:在启动类中注册Bean,以算法为类型写个类       

 14、OpenFiegn的工作流程

        当程序启动时,使用了@FeignClient注解的接口会被扫描到交给spring容器管理。

        发送请求时,会使用JDK动态代理,并为每个方法生成相应的RequestTemplate,同时封装http信息,包括URL和请求参数。

        最后由RequestTemplate生成request请求,使用ribbon的负载均衡发起调用。

15、为什么Fegin的客户端接口没有写实现类也可以直接被依赖注入                           

        首先导入feign的依赖,在启动类中打了@EnableFeignClients注解开启feign。同时也在feign的客户端接口上打了注解@FeignClient。当程序启动时,这些打了FeignClient的接口会交给Spring管理。发送请求时,会通过JDK动态代理代理接口,生成对应的RequsetTemplate,Feign会对每个方法生成对应的RequesTemplate,同时封装好http信息。最终RequestTemplate生成request请求,交给http客户端,然后http客户端交给Load BalancerClient,使用ribbon发起调用。

16、Hytrix

        熔断器,为了不影响整个系统业务,将出现故障的服务通过熔断、降级等方式隔离。

17、熔断、降级概念

        熔断:某个服务出现不能访问、调用超时等情况时,就会触发熔断机制,配合降级返回兜底数据,解决长时间等待造成的请求阻塞、避免返回错误信息给客户端。

        降级:当服务出现故障不能正常运作时,有请求到达就会給此请求放回已经设置好的数据。

18、资源隔离

        限制分布式服务的资源使用,将服务的提供者隔离,一个服务失败或延时,不会导致整个系统失败,同时也能控制调节服务的并发。

19、资源隔离:信号量和线程池的区别

        线程池:使用线程池存储请求,线程池对请求做处理,设置任务返回超时时间。堆积的请求则会进入线程池队列中,为每个依赖服务申请线程池有一定资源消耗,但能面对高并发。

        信号量:使用原子计数器记录当前线程数,当请求进行时原子计数器加一,处理完成减一请求来时判断线程数是否超过最大线程数,超过就丢弃请求。无法应对突然的高并发数。

20、CAP理论,Eureka选择的是AP还是CP

        CAP:一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。在分布式中,网络是不可控的,首先要保证P,然后再A、C之间做选择。

        Euraka选择了AP保证了可用性降低了一致性。

21、Eureka的自我保护

        EurakaServer接收到服务续约的心跳失败比例在15分钟之内低于85%,EurekaServer就会把这些服务保护起来,不会把这些服务从地址列表踢出,但是用户可能请求这些服务时出现不可用等情况,这时需要配合熔断和降级。

        自我保护开关:yml中配置。eureka.server.enable-self-preservation=false   or  true

22、zuul有几类filter,执行顺序是怎样的。

        类型:pre、routing、post、error

        正常:pre类型过滤器,而后到达routing类型,进行路由,请求就到达真正的服务提供者,

执行请求,返回结果后,到达post过滤器。而后返回响应。

       不正常1:pre或者routing过滤器出现异常,都会直接进入error过滤器,再error处理完

毕后,会将请求交给POST过滤器,最后返回给用户。

        不正常2:error过滤器自己出现异常,最终也会进入POST过滤器,而后返回

        不正常3:POST过滤器出现异常,会跳转到error过滤器,但是与pre和routing不同的时,

请求不会再到达POST过滤器了

23、zuul中做登录检查如何实现

        继承ZuulFilter抽象类,自定义pre类型的过滤器,shouldFilter方法中可以自定义需要放行的资源,run方法中检查请求头中的token信息,如果没有token,就响应到客户端未登录的信息,并组织filter继续往后执行。

24、zuul中如何做限流

        1、可以通过继承ZuulFilter抽象类自定义pre过滤器,加上限流算法来实现

        2、可以通过hystrix的资源隔离模式,设置线程池最大连接数或最大信号量来实现

25、配置中心解决什么问题

        在分布式系统中,由于服务数量很多,springConfig可以集中管理这些配置文件。

        支持修改配置无需重启服务

        支持本地仓库、远程仓库

26、Eureka作用

        在微服务中,各个服务之间需要通信,则他们需要知道对方的通行地址。eureka则是利用服务注册和服务发现来解决服务之间的通信问题的。

27、Ribbon的作用

        微服务中的一个服务做了集群,则会出现一个服务名对应多个通信地址,那么调用哪个地址成了一个问题。Ribbon是一个负载均衡器,它可以按照负载均衡算法向多个服务发起调用。当一个微服务有多个集群时,就可以使用它做请求分发。

28、config配置中心作用

        微服务中的每个服务对应一个配置文件,配置中心则可以集中管理这些配置文件,他支持本地配置文件,也支持远程配置文件。

29、Ribbon和Feign的区别

        两个都是SpringCloud实现负载均衡的组件

        Ribbon:基于http和TCP客户端的负载均衡工具。它在客户端配置RibbonServerList,然后轮询请求实现负载均衡

        Feign:一个HTTP客户端,采用接口的方式,只需要创建一个接口,在上门添加注解。为

要调用其他服务的方法写成抽象方法放在这个接口中,不需要构建HTTP请求。

30、Spring,SpringBoot和SpringCloud的关系以及区别

        Spring是一个开源的轻量级控制反转和面向切面编程的容器框架。轻量级是说它开发使用简单,功能强大。控制反转是指将对象的创建,销毁控制交给ioc容器,方便解耦合,降低维护难度,面向切面编程是指将相同的逻辑横向抽取出来,可以对一些通用业务如事务,日志进行集中管理。

        Springboot是一个基于spring的框架,对spring做了大量简化,使开发流程更快,更高效。比如它大量简化maven依赖,基于注解配置(JavaConfig)无需XML,内嵌Tomcat,部署流程简单,打包和部署更加灵活,允许独立运行

        SpringCloud是基于SpringBoot实现的,用于微服务架构中管理和协调服务的,它是一系列框架的有序集合,它为开发者提供了一系列工具,例如服务发现与注册,配置中心,网关,负载均衡,熔断器,链路追踪等等,让微服务架构落地变得更简单

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值