1、什么是SpringCloud
Spring Cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。
Spring Cloud Task,一个生命周期短暂的微服务框架爱,用于快速构建执行有限数据处理的应用程序。
2、什么是微服务
微服务是一种架构模式或是一种架构风格,主要是对单一应用程序划分一组小的服务,是按照分治思想设计的架构模式。
每个服务运行在其独立的进程中,服务之间相互协调、互相配合,为用户提供最终价值。
服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。
3、什么是服务熔断?什么是服务降级?
- (1)熔断机制: 是一种应对雪崩效应的微服务链路保护机制。
- 熔断时期: 当某个微服务不可用或响应时间太长时,会进行服务降级并且熔断该节点微服务的调用并快速返回“错误”响应。
- 恢复熔断: 当检测到该节点微服务调用响应正常后恢复调用链路。
- SpringCloud实现: 在SpringCloud框架里熔断机制通过Hystrix实现,Hystrix会监控微服务间调用状态,当失败的调用到一定阈值(5秒内调用20次),如果失败,就会启动熔断机制。
- (2)服务降级: 一般是从整体负荷考虑。当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值,虽然水平下降,保持服务正常运行。
- (3)Hystrix相关注解 @EnableHystrix: 开启熔断
@HystrixCommand(fallbackMethod="XXX")
,声明一个失败回滚处理函数XXX,当被注解的方法执行超时(默认是1000 ms),就会执行fallback函数,返回错误提示。
4、Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?
注册中心的原则是ACP原则:高可用性、一致性、分区容错性
ZK 保证了 CP,Eureka 保证了 AP。
(1)ZK的缺点: 当master节点因为网络故障而丢失时,剩余节点会重选leader,由于选举机制时间过长,大致在30s~120s,且选举期间zk集群不可用,导致服务瘫痪。在云部署的环境下,网络原因使得master节点丢失是高概率事件。
(2)Eureka的缺点: 无法保证查询到的信息可能不是最新的,但依旧可以保证服务持续提供访问。
(3)Eureka的自我保护机制: 当在15分钟内超过85%的节点没有正常心跳(心跳机制),则认为客户端与注册中心发生网络故障,会发生以下几种情况:
- Eureka不再从注册列表中移除因为长时间没有收到心跳而过期的服务。
- Eureka仍然接受新服务的注册和查询请求,但不同步到其它节点(保证当前节点可用)。
- 当网络稳定时,当前实例新的注册信息回同步到其它节点上。
4、SpringBoot和SpringCloud的区别?
Spring Boot 专注于快速方便的开发当个个体微服务。
Spring Cloud 关注于全局的微服务协调整理治理框架,它将Spring Boot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供配置管理,服务发现,断路器,路由,微代理,事件总线,全局锁,决策竞选,分布式会话等等集成服务。
SpringBoot不依赖于SpringCloud开
5、负载平衡的意义什么?
负载均衡的意义是在我们有多个服务点时,可以有一定策略进行选择将用户的请求转发到哪一个服务点上。
可以优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一资源的过载。
6、什么是Hystrix?它如何实现容错?
当我们的微服务链中的一环产生了不可逆的故障,如果不处理则会有服务瘫痪的风险。
所以 SpringCloud 提供了一种叫 Hystrix 的延迟和容错库,它会在微服务报错而挂掉的时候,熔断该服务,并返回“错误信息”,当检测到服务正常使用时恢复调用链路,而且Hystrix提供了 fallback 方法,用来回滚信息,发起请求收到的是本次服务前的信息,用以保持服务继续提供。
7、说说 RPC 的实现原理
(1)RPC是什么? RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务。
(2)需要的组件:
- 处理网络连接通讯的模块: 负责连接建立、管理和消息的传输。
- 编/解码的模块: 因为网络通讯都是传输的字节码,需要将我们使用的对象序列化和反序列化。
- 客户端和服务器端的部分: 服务器端暴露服务接口;客户调用代理服务的接口实现,收集数据、编码并传输给服务器等待结果返回。
8、什么是Ribbon?
Ribbon是一个负载均衡客户端,可以很好的控制HTTP和TCP的一些行为,Feign默认集成ribbon。
9、什么是 feign ?它的优点是什么?
(1)Feign概念: Ferign 是一中 Web Service 客户端,用来模拟 URL 请求微服务。
(2)优点:
- 基于接口的注解
- Feign集成了ribbon,具有负载均衡功能
- 整合了Hystrix,具备熔断的能力
(3)使用:
- 引入依赖
- 开启Feign注解,
@EnableFeginClients
- 定义一个接口
@FeginClient(name="xxx")
指定调用哪个服务
10、 Ribbon和Feign的区别?
(1)调用服务方式不同。
(2)启动类注解不同: Ribbon 是 @RibbonClient ; Feign 的是 @EnableFeignClients
(3)服务指定位置不同: Ribbon 是 @RibbonClient上进行指定 ; Feign 的是 @EnableFeignClients上进行指定
(4)调用方式不同: Ribbon是构建http请求,Feign 是模拟http请求