SpringCloud面试题

1.什么是SpringCloud

springcloud就是致力于分布式系统、云服务的框架,是spring生态中的一个成员,它是基于微服务架 构模式的框架,提供了一站式(服务注册与发现,配置中心,全链路监控,服务网关,负载均衡;熔断器等组 件)全自动的解决方案。

Springcloud利用springboot的开发便利性.巧妙的简化了分布式系统基础设施的开发,springcloud为开 发人员提供了快速构建分布式系统的一些工具,包括配置管理服务发现,断路器,路由;微代理,事件总线全局 锁决策竞选,分布式会话等等,他们都可以用springboot的开发风格做个—键启动和部署 (1)什么是微服务

微服务架构是一种架构模式,或者说是一个架构风格;它提倡将单一的应用程序划分成一组小的服务,每 个服务运行在其独立的自己的进程内,服务之间互相协调,互相配置,为用户提供最终价值,服务之间采用轻 量级的通信机制互相沟通,每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境 中, 微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务;彻底地去耦合,每一个微服务 提供单个业务功能的服务,一个服务做一件事,从技术角度看,是一种小而独立的处理过程,类似进程的概 念,能够自行单独启动或销毁,拥有自己独立的数据库。

(2)单体应用和微服务架构的区别

单体应用:将多个模块集成在同一个war或jar包中,在同一个服务器上,用同一个数据库,是同一个进 程。他的部署简单且接口调用灵活,但功能扩展受限,团队协作困难,可靠性和迭代性都比较差。

微服务架构:采用分布式架构,将整个程序划分为不同的模块,分别运行在自己的进程内,但他们之间 互相协调,最终组成完整的业务呈现给用户。

(3)什么是分布式的CAP原则

C:一致性,A:可用性,P:分区容错 CAP原则只能被实现其中两点,SpringCloud实现的是CP(一致性和分区容错)

(4)springcloud与springboot的关系

1. springboot专注于快速方便的开发单个个体

2. springcloud是专注于全局的微服务,他将springboot开发的一个个单体微服务合并管理起来,为 各个微服务之间提供服务注册与发现,配置中心,全链路监控,服务网关,负载均衡;熔断器等组件。  

3. springboot可以单独使用,但springcloud不能脱离springboot,他们之间属于依赖关系

2.springcloud的核心组件有哪些

1. 注册服务与发现:Eureka 分为Eureka服务端和Eureka客户端,前者用用作服务注册服务器,后者用作简化与服务器之间的 交互。

2. 负载均衡:Ribbon 是基于Netflix Ribbon实现的一套 客户端负载均衡 工具。 主要提供客户端的软件负载均衡算法,提供了一系列完善的配置项,比如连接超时、重试、重试算 法等。简单来说就是在配置文件中列出LoaderBalabce的机器,Ribbon会自动的帮助你基于某种 规则(简单轮询、随机连接、权重匹配等)去连接这些机器。

3. 熔断器:Hystrix 是微服务中一款熔断器,它具有优秀的服务容错和保护能力,在某服务失效或中断时,能够向用户 返回相关数据信息给用户带来良好的使用体验,对后端程序来说,可以有效的防止服务器雪崩,造 成不可避免的数据丢失等后果

4. 网关:Zuul 是从设备和网站到Netflix流应用程序后端的所有请求的前门。作为边缘服务应用程序,Zuul旨在 实现动态路由,监控,弹性和安全性。

(1)Eureka的自我保护机制 自我保护模式是一种应对网络异常的安全保护措施,他的架构哲学是宁可同时保留所有的微服务(健康的 和不健康的都会保留), 也不盲目注销任何健康的微服务,使用自我保护模式,可以让Eureka 集群更加的健 壮和稳定 。

(2)Ribbon能做什么?

1. LB即负载均衡(Load Balance)在微服务或分布式集群中经常用的一种应用

2. 负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)

3. 常见的负载均衡软件有Nginx,Lvs等

4. Dubbo,springcloud中均给我们提供了负载均衡,springcloud的负载均衡算法可以自定义

(3)负载均衡简单分类

1. 集中式LB

即在服务的消费方和提供方之间,使用独立的LB设施,如Nginx,由设施负责把访问请求通过某种策略 转发至服务的提供方

2. 进程式LB

将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用然后自己从这些地址中选出一 个合适的服务器 Ribbon就属于进程内LB,它只是一个类库,继承于消费方进程,消费方通过它来获取到服务提供方的 地址

(4)说一下熔断与降级的区别 降级针对的时客户端中的属性productFeignService,当发生服务熔断或服务被关闭时,此时可以 使用客户端降级的方式让用户继续看到数据。@FeignClient(value="服务名",fallbackFactory=具 体类名) 熔断针对的是服务端中controller的某个方法或某些方法。 @HystrixCommand(fallbackMethod="备用方法名")

3.Ribbon与Feign有什么区别

Feign相比于Ribbon效率更高、但是可读性差一些。它是通过接口的思想简化了消费者调用服务者 服务的流程,使得调用流程更像controller调用service层。

Feign是通过接口的思想实现了消费者在客户端对于服务提供者提供的服务的消费和负载均衡;

而 Ribbon则是按照Restful风格实现了消费者在客户端对于服务提供者提供的服务的消费和负载均衡

你可能感兴趣的:(java,spring,cloud,spring,后端)