Spring Cloud 5大组件有哪些?
Eureka :
注册中心
Ribbon :
负载均衡
Feign :
远程调用
Hystrix
:
服务熔断
Zuul
/Gateway :
网关
随着SpringCloudAlibba在国内兴起 , 我们项目中使用了一些阿里巴巴的组件
注册中心
/
配置中心
Nacos
负载均衡
Ribbon
服务调用
Feign
服务保护 sentinel
服务网关
Gateway
服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?
微服务中必须要使用的组件,考察我们使用微服务的程度
注册中心的核心作用是:服务注册和发现
常见的注册中心:
eureka
、
nocas
、
zookeeper
l
我们当时项目采用的
eureka
作为注册中心,这个也是
spring cloud
体系中的一个核心组件
l
服务注册
:服务提供者需要把自己的信息注册到
eureka
,由
eureka
来保存这些信息,比如服务名称、
ip
、端口等等
l
服务发现
:消费者向
eureka
拉取服务列表信息,如果服务提供者有集群,则消费者会利用负载均衡算法,选择一个发起调用
l
服务监控
:服务提供者会每隔
30
秒向
eureka
发送心跳,报告健康状态,如果
eureka
服务
90
秒没接收到心跳,从
eureka
中剔除
我看你之前也用过nacos、你能说下nacos与eureka的区别?
l
Nacos
与
eureka
的共同点(注册中心)
①
都支持服务注册和服务拉取
②
都支持服务提供者心跳方式做健康检测
l
Nacos
与
Eureka
的区别(注册中心)
①
Nacos
支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
②
临时实例心跳不正常会被剔除,非临时实例则不会被剔除
③
Nacos
支持服务列表变更的消息推送模式,服务列表更新更及时
④
Nacos
集群默认采用
AP
方式,当集群中存在非临时实例时,采用
CP
模式;
Eureka
采用
AP
方式
l
Nacos
还支持了配置中心,
eureka
则只有注册中心,也是选择使用
nacos
的一个重要原因
你们项目负载均衡如何实现的 ?
l
负载均衡
Ribbon
,发起远程调用
feign
就会使用
Ribbon
l
Ribbon
负载均衡策略有哪些
?
l
如果想自定义负载均衡策略如何实现
?
![](https://img-blog.csdnimg.cn/f3856dc51db24047a3a16ed77069cdf4.png)
l
RoundRobinRule
:简单轮询服务列表来选择服务器
l
WeightedResponseTimeRule
:按照权重来选择服务器,响应时间越长,权重越小
l
RandomRule
:随机选择一个可用的服务器
l
BestAvailableRule
:忽略那些短路的服务器,并选择并发数较低的服务器
l
RetryRule
:重试机制的选择逻辑
l
AvailabilityFilteringRule
:可用性敏感策略,先过滤非健康的,再选择连接数较小的实例
l
ZoneAvoidanceRule
:以区域可用的服务器为基础进行服务器的选择。使用
Zone
对服务器进行分类,这个
Zone
可以理解为一个机房、一个机架等。而后再对
Zone
内的多个服务做轮询
如果想自定义负载均衡策略如何实现 ?
提供了两种方式:
1,创建类实现IRule接口,可以指定负载均衡策略(全局)
2,在客户端的配置文件中,可以配置某一个服务调用的负载均衡策略(局部)
什么是服务雪崩,怎么解决这个问题?
l
服务雪崩:一个服务失败,导致整条链路的服务都失败的情形
l
服务降级:服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃,
一般在实际开发中与
feign
接口整合,编写降级逻辑
l
服务熔断:默认关闭,需要手动打开,
如果检测
到
10
秒内请求的失败率超过
50%
,就触发熔断机制。之后
每隔
5
秒重新尝试请求
微服务,如果微服务不能响应,继续走熔断机制。如果微服务可达,则关闭熔断机制,恢复正常请求
你们的微服务是怎么监控的?
skywalking
一个分布式系统的应用程序性能监控工具( Application Performance Managment ),提供了完善的链路追踪能力, apache的顶级项目(前华为产品经理吴晟主导开源)
我们项目中采用的skywalking进行监控的
1,skywalking主要可以监控接口、服务、物理实例的一些状态。特别是在压测的时候可以看到众多服务中哪些服务和接口比较慢,我们可以针对性的分析和优化。
2,我们还在skywalking设置了告警规则,特别是在项目上线以后,如果报错,我们分别设置了可以给相关负责人发短信和发邮件,第一时间知道项目的bug情况,第一时间修复