一、Spring Cloud组件有哪些?
5大组件:
- 注册中心/配置中心 Nacos
- 负载均衡 Ribbon
- 服务调用 Feign
- 服务保护 sentinel
- 服务网关 Gateway
二、服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?
我们当时项目采用的eureka作为注册中心,这个也是Spring cloud体系中的一个核心组件。
- 服务注册:服务启动时,服务提供者需要把自己的信息注册到eureka,由eureka来保存这些信息,比如服务名称、ip、端口等
- 服务发现:服务消费者在进行远程调用时,从eureka拉取服务列表信息,如果服务提供者有集群,则消费者会根据负载均衡算法,选择一个发起调用
- 服务监控:服务提供者会每隔30秒向eureka发送心跳,报告健康状态,如果eureka服务90秒都没接收到心跳,就从eureka中剔除
我看你也用过Nacos,你知道nacos和eureka的区别吗?
- Nacos与eureka共同点:(注册中心)
①都支持服务注册和服务拉取
②都支持服务提供者心跳方式做健康检测
- 区别:(注册中心)
①Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
②临时实例心跳不正常会被剔除,非临时实例则不会被剔除
③Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
④Nacos集群默认采用AP方式(高可用性),当集群中存在非健康实例时,采用CP模式(强一致性);eureka采用AP模式
- Nacos还支持配置中心,eureka只支持注册中心。
三、关于Ribbon
你们项目负载均衡如何实现的?
我们的微服务负载均衡使用了Ribbon组件,比如我们在使用Feign远程调用时,底层就使用了Ribbon来实现负载均衡。
Ribbon负载均衡策略有哪些?
1 RoundRobinRule 简单轮询
2 WeightedResponseTimeRule 按照权重来选择服务器,响应时间越长,权重越小
3 RandomRule 随机选择一个可用服务器
4 ZoneAvoidanceRule 区域敏感策略 就近选择服务器,zone可以理解为一个机房、一个机架;
而后再对Zone内的多个服务做轮询
如果想自定义负载均衡策略,如何实现?
提供了两种方式:
1.创建一个类实现IRule接口,可以指定负载均衡策略(对项目全局生效)
2.在客户端的配置文件中,可以配置某一个微服务调用的负载均衡策略(只对当前服务生效)
四、什么是服务雪崩,怎么解决这个问题?
- 服务雪崩:一个服务访问失败,导致整条链路的服务都失败的情形。
- 服务降级:服务自我保护的一种方式,或者保护下游服务的一种方式,用于保护服务在请求量剧增时不会变得不可用,即服务不会崩溃。一般在实际开发中与Feign接口整合,编写降级逻辑。
- 服务熔断:默认关闭。需要手动打开。如果检测到10s内请求的失败率超过50%,就会触发熔断机制,之后每隔5s重新尝试请求微服务,如果微服务不能响应,继续走熔断机制。如果微服务可达,则关闭熔断机制,恢复正常请求。