一、SpringCloud
1、Spring Cloud 和 Dubbo有哪些区别?
相同点:他们都是分布式管理框架。
区别:①dubbo使用的是RPC通讯,占用宽带会少一点。Spring Cloud使用的是HTTP的Rest方式进行通讯,宽带会多一点,同时使用http协议一般会使用JSON报文,消耗会更大。
②dubbo开发难度较大,所依赖的jar包有很多问题大型工程无法解决。Spring Cloud对第三方的继承可以一键式生成,天然集成。
2、简述一个Eureka的自我保护机制?
心跳检查机制:Eureka Client向Eureka Server中注册完服务信息以后,Eureka Server会通过心跳检测机制来检测当前这个客户端服务是否还存活着。默认的检测机制是Eureka Client每隔30s向Eureka Server发送一个心跳检查包,如果Eureka Server在90s之内没有收到Eureka Client所发送的心跳检查包,那么此时Eureka Server将该Eureka Client从服务列表中剔除掉。
自我保护机制:自我保护模式正是一种针对网络异常波动的安全保护措施,使用自我保护模式能使Eureka集群更加的稳健、稳定的运行。自我保护机制的工作机制是:如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制,此时会出现以下几种情况:
① Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务。
②Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点上,保证当前节点依然可用。当网络稳定时,当前Eureka Server新的注册信息会被同步到其他节点中。
因此Eureka Server可以很好的应对因网络故障导致部分节点失联的情况,而不会像ZK那样如果有一半不可用的情况会导致整个集群不可用而变成瘫痪。
自我保护的开关配置:
#开启自我保护机制,值设置为false关闭自我保护机制
eureka.server.enable-self-preservation = true
3、Spring Boot和Spring Cloud之间关系?
Spring Boot:专注于快速方便的开发单个个体微服务(关注微观)。
Spring Cloud:关注全局的微服务协调治理框架,将Spring Boot开发的一个个单体微服务组合并管理起来(关注宏观)。
Spring Boot可以离开Spring Cloud独立使用,但是Spring Cloud不可以离开Spring Boot,属于依赖关系。
4、什么是Eureka以及它的架构是什么样子?
eureka是Netflix开发的服务发现组件,本身是一个基于REST的服务。Spring Cloud将它集成在其子项目spring-cloud-netflix中,以实现Spring Cloud的服务发现功能。
Eureka是一个C/S的架构模式,包含了两部分:
①Eureka Server:注册中心服务端,用于维护和管理注册服务的列表
②Eureka Client:注册中心客户端,用于向Eureka Server中注册服务和从Eureka Server中拉取服务。
5、什么是Ribbon以及它的工作流程?
概述:Ribbon是一个客户端的负载均衡工具。
基本流程如下:
①拦截我们的RestTemplate请求http://userservice/user/1
②RibbonLoadBalancerClient会从请求url中获取服务名称,也就是user-service
③DynamicServerListLoadBalancer根据user-service到eureka拉取服务列表
④eureka返回列表,localhost:8081、localhost:8082
⑤IRule利用内置负载均衡规则,从列表中选择一个,例如localhost:8081
⑥RibbonLoadBalancerClient修改请求地址,用localhost:8081替代userservice,得到http://localhost:8081/user/1,发起真实请求。
6、Gateway以及在你们的项目中如何去应用该组件的?
Spring Cloud Gateway:是Spring Cloud中所提供的一个服务网关组件,是整个微服务的统一入口,在服务网关中可以实现请求路由、统一的日志记、流量监控、权限校验等一系列的相关功能。项目应用:权限的校验。具体实现思路:使用Spring Cloud Gateway中的全局过滤器拦截请求(GlobalFilter、Order),从请求头中获取token,然后解析token。如果可以进行正常解析,此时进行放行;如果解析不到直接返回。
7、在Ribbon中定义了哪些常用的负载均衡算法以及默认的负载均衡算法是哪一个?
①RoundRobinRule:轮询
②RandomRule:随机
③RetryRule:重试
先按照RoundRobinRule的策略获取服务,如果获取服务失败,则在指定时间内进行重试,获取可用的服务。
④WeightedResponseTimeRule:权重
对RoundRobinRule的扩展,响应速度越快的实例选择权重越多大,越容易被选择
⑤BestAvailableRule:
会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
⑥AvailabilityFilteringRule:
先过滤掉故障实例,再选择并发较小的实例
⑦ZoneAvoidanceRule:
默认规则,复合判断server所在区域的性能和server的可用性选择服务器。
8、什么是fegin?以及如何去使用?
①fegin是一个声明式的http客户端工具来简化远程调用,基于接口的注解方式来声明一个http客户端。
②fegin整合了ribbon,具有负载均衡的能力
③整合了Hystrix,具有熔断的能力
使用:
①添加openfeign依赖
②在启动类上添加@EnableFeignClients注解
③定义一个接口,通过@FeignClient(name="order-server")指定调用哪个服务