SpringCloud面试题

1.什么是微服务架构

  微服务架构就是将单体应用程序分为多个应用程序,这多个应用程序就称为微服务,每个微服务运行在自己的进程中,
  并使用轻量级的机制通信。这些服务围绕业务能力来划分,并通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言,不同数据库,以保证最低限度的集中式管理。

2.SpringCloud是什么

  SpringCloud是一系列框架的有序集合。他利用SpringBoot的开发便利性,巧妙地简化了分布式系统基础设施的开发,如:服务注册发现、配置中心、智能路由
  消息总线、负载均衡、断路器、数据监控等,都可以用SpringBoot的开发风格做到一键启动和部署。
  SpringCloud没有重复值造轮子,他只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过SpringBoot风格进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者
  留出了一套简单易懂、易部署、易维护的分布式系统开发工具包。

3.SpringCloud的优缺点

  优点:
      1.耦合度比较低,不会影响其他模块的开发
      2.减轻团队的开发成本,可以并行开发
      3.配置比较简单,用注解就能实现,不用使用过多的配置文件
      4.微服务是跨平台的,可以用任何一种语言实现
      5.每个微服务可以有自己独立的数据库
      6.直接写后端代码,不用关注前端怎么开发,然后暴露接口,通过组件进行服务通信
  缺点:
      1.多个服务部署比较麻烦
      2.针对数据的管理比较麻烦,因为微服务可以每个微服务一个数据库
      3.系统集成测试比较麻烦
      4.性能的监控比较麻烦

4.SpringBoot和SpringCloud的区别

  1.SpringBoot专注于快速开发单个个体微服务
  2.SpringCloud关注全局的微服务协调整理治理框架,他将一个个SpringBoot单体微服务整合并管理起来
  3.为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务
  4.SpringBoot可以离开SpringCloud独立使用开发项目,但SpringCloud离不开SpringBoot,属于依赖的关系
  5.SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架

5.SpringCloud的组件

  Eureka:服务注册与发现
  Zuul:服务网关
  Ribbon:客户端负载均衡
  Feign:声明式WEB服务客户端
  Hystrix:断路器
  Config:分布式统一配置管理

6.SpringCloud开发分布式微服务时,我们面临什么问题

  1.与分布式系统相关的复杂性,这种开销包括网络问题,延迟开销,带宽问题,安全问题
  2.服务发现-服务发现工具管理群集中的流程和服务如何查找和互相交谈。他涉及一个服务目录,在该目录中注册服务,然后能够查找并连接到该目录中的服务
  3.冗余-分布式服务中的冗余问题
  4.负载均衡-负载均衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路,中央处理单元,或者磁盘驱动的分布。
  5.性能问题-由于格中开销导致的性能问题

7.服务注册和发现是什么意思?SpringCloud如何实现

  当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂
  有些性能可能会下降。而某些位置可能会发生变化,手动更改属性可能会产生问题。eureka服务注册和发现可以在这种情况下提供帮助,由于所有服务都在eureka服务器上注册并通过eureka服务器完成查找,因此无需处理服务地点的任何更改和处理。

8.什么是eureka

  eureka作为SpringCloud的服务注册功能服务器,他是服务注册中心,系统中的其他服务使用eureka的客户端将其连接到eureka service中,并且保持心跳,这样工作人员可以通过eureka service来监控各个微服务是否正常运行

9.eureka如何实现高可用

  通过集群实现高可用

10什么是eureka的自我保护机制

  默认情况下 eureka在一定时间内如果接收不到某个微服务的心跳,就会注销该服务的实例,
  但是在网络分区故障的时候,导致微服务与eurekaServer之间无法通信,因为该服务是健康的,此时不应该注销该服务,
  eureka通过自我保护模式来解决误删的问题。
  默认情况下,如果eureka服务器一段时间没有收到某个微服务的心跳,eureka service 会进入自我保护模式,在该模式下eureka service会保护注册表中的信息,不会删除注册表中的数据,当网络恢复时,eureka service会退出保护模式

11.DiscoveryClient

  可以从注册中心中根据服务别名获取注册的服务信息

12.eureka和zookeeper的区别

  eureka保证AP,zookeeper保证CP
  eureka挂掉之后,会选取一个服务作为主服务器,zookeeper会直接挂掉
  zookeeper是一个进程,eureka 是一个工程

13.Feign

  Feign是一个声明式web服务客户端,这使得编写web服务客户端更容易。
  他将我们需要调用的服务方法定义成抽象方法保存在本地就可以了,不需要自己构建http请求,、
  直接调接口就行,调用方法和本地抽象方法签名一致

14.什么是网关

  网关相当于一个网络服务架构的入口,所有网络请求必须通过网关转发到具体的服务

15.网关的作用是什么

  统一管理微服务框架,权限控制,路由转发,负载均衡,路由转发

16.什么是Spring Cloud Zuul

  zuul是微服务提供的成熟的路由方案,会根据请求路径的不同,网关会定位到指定的微服务,并代理请求到不同的微服务接口,对外屏蔽了微服务的真正接口地址

17.网关和过滤器有什么区别

  网关对于所有服务的请求进行过滤分析,过滤器对于单个服务而言

18.zuul和nginx的区别

  zuul用Java语言实现,为Java服务提供网关服务,尤其在微服务架构中可以更加灵活的对网关进行操作。
  nginx使用C语言实现,性能高于Zuul,自定义操作实现比较困难
  zuul提供更灵活的服务、

19.Ribbon负载均衡的意义是什么,

  在计算中,负载均衡可以改善跨计算机,计算机集群,网络连接,中央处理单元或磁盘驱动等多种计算资源的工作负载分布
  负载均衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一资源的过载。
  使用多个组件进行负载均衡而不是单个组件可能会通过冗余来提高可靠性和可用性。
  负载均衡通常涉及专用软件或硬件,例如多层交换机或域名系统服务器进程

20.ribbon是什么

  ribbon是Netflix发布的开源项目,旨在提供客户端的负载均衡算法
  提供了一系列完整的配置项,比如连接超时、重试等。简单的说就是在配置文件中列出所有的机器,ribbon会根据某种规则
  (简单轮询)去链接这些机器

21.nginx和ribbon的区别

  nginx提供反向代理的同时也可以实现负载均衡,转发请求,
  ribbon是客户端负载均衡,从注册中心读取目标服务器信息,然后客户端根据轮询策略进行服务访问,全程在客户端操作。

22.ribbon底层实现原理、

  ribbon使用discoveryClient从注册中心读取目标服务对象,对同一接口进行计数,使用区域算法获取目标服务集群索引,返回获取到的目标服务信息。

23.什么是断路器

  当一个服务调用另外一个服务由于网络原因或自身原因出现问题时,调用者就会等待被调用者的响应,当更多的服务请求到这些资源导致更多的请求等待,发生连锁反应(雪崩效应)

24.什么是Hystrix

  在分布式系统中,我们一定会依赖各种服务,那么这些服务一定会出现失效的情况,就会导致雪崩,Hystrix就是这样一个工具,防雪崩利器,它具有服务降级,服务熔断,服务隔离,监控等一些防止雪崩的计数。
  Hystrix有四种防雪崩方式
      服务降级:接口调用失败就调用本地的方法返回一个空
      服务熔断:接口调用失败就会进入调用接口提前定义好的一个熔断方法,返回错误信息
      服务隔离:隔离服务之间相互影响
      服务监控:在服务发生调用时,会将每秒请求数、成功请求数等运行指标记录下来

25.谈谈服务雪崩效应

  雪崩效应是在大型互联网项目中,当某个服务发生宕机时,调用这个服务的其他服务也会发生宕机,大型项目的微服务之间的调用是相通的,这样就会将服务的不可用逐步扩大到各个服务中,从而使得整个项目的服务宕机崩溃

26.在微服务中,如何保护服务?

  一般使用Hystrix框架,实现服务隔离来避免出现服务的雪崩效应,从而达到保护服务的效果。当在微服务中,高并发的数据库访问量导致服务线程阻塞,是单个服务宕机,服务的不可用会蔓延到其他服务,引起整体服务灾难性后果,
  使用服务降级能有效的为不同的服务分配资源,一旦服务不可用则返回友好提示,不占用其他服务资源,避免当个服务崩溃引发整体服务的不可用

27.服务雪崩效应产生的原因

  因为Tomcat默认情况下,只有一个线程池来维护客户端发送的所有请求,这时候某一个接口在某一时刻被大量访问就会占据tomcat线程池中的所有线程。
  其他线程处于等待状态,无法连接到服务接口

28.服务降级、熔断、隔离

  服务降级:当客户端请求服务端的时候,防止客户端一直等待,不会处理业务逻辑代码,直接返回一个友好的提示
  服务熔断:服务熔断是在服务降级的基础上更直接的一种保护方式,当一个统计时间范围内的请求失败数量达到设定值或当前的请求错误率
            达到设定的错误率阈值时开启断路,之后的请求直接走fallback方法,在设定时间后尝试恢复
  服务隔离:就是Hystrix为隔离的服务开启一个独立的线程池,这样在高并发的情况下不会影响其他服务,服务隔离有线程池和信号量两种实现方式。

29.服务降级底层是怎么实现的

  Hystrix实现服务降级的功能是通过重写HystrixCommand中的getFallback(),当Hystrix的run()或者construc执行发生错误时,转而执行getFallback()

30.什么是SpringCloud Bus

  SpringCloud Bus使用轻量级的消息代理来连接微服务中的各个服务,可以将其应用于广播状态更改或其他管理指令,又称为消息总线
  配合Spring Cloud Config使用可以实现配置的动态刷新,目前SpringCloud Bus支持两种消息代理:RabbitMQ和kafka

31.什么是SpringCloud Config

  SpringCloud Config为分布式系统中的外部配置提供服务器和客户端支持,可以方便的对微服务各个环境下的配置进行集中管理。SpringCloud Config分为ConfigServer和ConfigClient两部分
  ConfigServer用于读取配置文件,并且暴露Http API接口,ConfigClient通过调用ConfigServer的接口来读取配置文件。

32.分布式配置中心有哪些框架

  apollo zookeeper springCloud Config

33.分布式配置中心的作用

  动态变更项目配置信息而不必重新部署项目

34.SpringCloud Gateway是什么

  SpringCloud Gateway是SpringCloud官方推出的第二代网关框架,取代Zuul网关,网关作为流量,在微服务中有着非常重要的作用。网关常用的功能有路由转发、权限校验、限流控制,
  gateway使用了RouterLocatorBuilder的bean去创建路由,除了创建路由RouterLocatorBuilder可以让你添加格中predicates和Filter,断言是根据具体请求的规则,由具体的router去处理,filter是各种过滤器,用来对请求做各种判断和修改。

35.SpringCloud主要组件

  SpringCloud Config:Config能够管理所有微服务的配置文件,集中配置管理工具,分布式系统中的统一的外部配置管理,默认使用Git来存储配置,可以支持客户端配置的刷新以及加密、解密操作
  SpringCloud Netflix:
                      eureka:服务治理组件,包括客户端的注册中心和客户端的服务发现机制
                      ribbon:负载均衡的服务调用组件,具有多种负载均衡调用策略
                      Hystrix:服务容错组件,实现了断路器模式,对依赖服务的出错和延迟提供了容错能力
                      Feign:基于Ribbon和Hystrix的声明式服务调用组件
                      Zuul:API网关组件,对请求提供路由及过滤功能
  SpringCloud Bus:用于传播集群状态变化的消息总线,使用轻量级消息代理链接分布式系统中的节点,可以用来动态刷新集群中的服务配置信息
                    简单来说就是修改了配置文件,发送一次请求,所有客户端就会重新读取配置文件
  SpringCloud Consul:Consul是一个开源工具,用来实现分布式服务的服务发现与配置。与其他分布式服务注册与发现的方案,Consul的方案更一站式,内置了服务注册与发现框架
                   分布式一致性协议实现,健康检查、key-value存储,多数据中心方案,不再需要依赖其他工具。使用起来也更加简单。Consul使用go语言编写,具有很好的移植性,
                   安全包仅包含一个可执行文件,方便部署,于与Docker等轻量级容器可无缝配合。
  SpringCLoud Security:安全工具包,可以对
                                  对Zuul代理中的负载均衡从前端到后端服务中获取SSO令牌,
                                  对资源服务器之间的中继令牌
                                  使Feign客户端表现得像OAuth2RestTemplate的拦截器
                                  在Zuul代理中配置下游身份验证
                        Security提供了一组原语,用于构建安全的应用程序和服务,而且操作简单。可以在外部进行大量配置的声明性模型有助于大型协作的远程组件系统,通常在具有中央身份管理服务。他也具有非常易于在其他服务平台中使用。
                        在SpringBoot和SpringSecurity OAuth2的基础上,可以快速创建实现常见模式的系统,如单点登录,令牌中继和令牌交换。
  SpringCloud Sleuth:在微服务中,通常根据业务模块分服务,项目中前端发起一个请求,后端可能跨几个服务调用才能完成这个请求,如果系统越来越庞大,服务之间的调用与被调用关系就会变得的很复杂,
                      加入一个请求需要跨几个服务调用,其中一个服务由于网络延迟等原因挂掉了,那么这是我们需要分析具体哪一个服务出问题了,就会显得很困难。SpringCloud Sleuth服务链路追踪功能就可以帮助我们快速的发现错误根源以及分析每条链路上的性能等等。
  SpringCloud Stream:轻量级时间驱动微服务框架,可以使用简单的声明式模型来发送及接受消息,主要实现为kafka以及RabbitMQ
  SpringCloud Zookeeper:SpringCloud支持三种注册方式,eureka consul zookeeper
                         基于Apache Zookeeper的服务治理组件
  SpringCloud Gateway:旨在为微服务架构提供简单、有效统一的API路由管理方式,SpringCloud Gateway作为SpringCloud生态系统中的网关,目标是代替Netflix的 Zuul,其不仅提供了统一的路由方式,并且还基于Filter链的方式提供了网关基本的功能,例如:安全、监控/埋点、限流等作用
  SpringCloud OpenFeign:是一个声明式的WEB服务客户端,他使得编写WEB服务客户端变得更加容易。要是用Feign,我们可以将调用的服务方法定义成抽象方法保存在本地,添加一点点注解就可以了,不需要自己构建http请求,直接调用接口就行了,不过要注意,调用方法要和本地抽象方法的签名完全一致。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值