目录
1.SpringCloud的五大组件有哪些?
2.服务注册和发现是什么意思?Spring Cloud 是如何实现服务注册发现的?
3.负载均衡如何实现的(Ribbon负载均衡是如何实现的)
4.什么是服务雪崩?怎么解决这个问题?
5.微服务是怎么监控的?
6.xxl-job路由策略有哪些?
1~5
1.SpringCloud的五大组件有哪些?
- 早期的Spring Cloud五大组件是:1.Eureka : 注册中心,2.Ribbon : 负载均衡,3.Feign : 远程调用,4.Hystrix : 服务熔断,5.Zuul/Gateway : 网关
- SpringCloudAlibba 那套的是:1.注册中心/配置中心 Nacos,2.负载均衡 Ribbon,3.服务调用 Feign,4.服务保护 sentinel,5.服务网关 Gateway
2.服务注册和发现是什么意思?Spring Cloud 是如何实现服务注册发现的?
- 服务注册:微服务可以通过向 Nacos 注册中心注册自己的信息,使其它微服务能够发现它
- 服务发现:微服务可以通过查询 Nacos 注册中心来获取其他微服务的信息,从而能够向它们发起请求
- nacos实现服务注册发现:我理解的是主要三块大功能,分别是服务注册 、服务发现、健康检查
- 服务注册:服务提供者需要把自己的信息注册到eureka,由eureka来保存这些信息,比如服务名称、ip、端口等
- 服务发现:当一个微服务需要调用其他微服务时,它会向 Nacos 发一个查询请求,然后Nacos 会返回所有符合条件的微服务实例的信息,包括它们的 IP 地址和端口,可以通过它来拿到其它微服务的信息。
- 健康检查:Nacos 会定期向已注册的微服务发送健康检查请求,如果某个微服务长时间未响应或被标记为不可用,Nacos就会从注册表中移除这个实例
nacos与eureka的区别是什么?
- 共同点:Nacos与eureka都支持服务注册和服务拉取,都支持服务提供者心跳方式做健康检测
- nacos与Eureka的区别:
- ①Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
- ②Nacos临时实例心跳不正常会被剔除,非临时实例则不会被剔除
- ③Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
- ④Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
3.负载均衡如何实现的(Ribbon负载均衡是如何实现的)
- 在服务调用过程中的负载均衡一般使用SpringCloud的Ribbon 组件实现 ,Feign的底层已经自动集成了Ribbon , 使用起来非常简单,当发起远程调用时,ribbon先从注册中心拉取服务地址列表,然后按照一定的路由策略选择一个发起远程调用,默认的调用策略是轮询
Ribbon负载均衡策略有哪些?
- 有很多种,例如:
- RoundRobinRule:简单轮询服务列表来选择服务器
- WeightedResponseTimeRule:按照权重来选择服务器,响应时间越长,权重越小
- RandomRule:随机选择一个可用的服务器
- ZoneAvoidanceRule:(默认)区域敏感策略,以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询(默认)
如果想自定义负载均衡策略如何实现 ?
有两种方式:
- 创建类实现IRule接口,可以指定负载均衡策略,这个是全局的,对所有的远程调用都起作用
- 在客户端的配置文件中,可以配置某一个服务调用的负载均衡策略,只是对配置的这个服务生效远程调用
4.什么是服务雪崩?怎么解决这个问题?
- 服务雪崩就是一个服务失败,导致整条链路的服务都失败的情形
- 我了解的两种解决方案:第一个是服务降级,第二个是服务熔断,如果流量太大的话,可以考虑限流
- 服务降级:服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃,一般在实际开发中与feign接口整合,编写降级逻辑
- 服务熔断:默认关闭,需要手动打开,如果检测到 10 秒内请求的失败率超过 50%,就触发熔断机制。之后每隔 5 秒重新尝试请求微服务,如果微服务不能响应,继续走熔断机制。如果微服务可达,则关闭熔断机制,恢复正常请求
5.微服务是怎么监控的?
- 可以采用的skywalking进行监控的,skywalking主要可以监控接口、服务的一些状态。特别是在压测的时候可以看到众多服务中哪些服务和接口比较慢,可以针对性的分析和优化。
6~10
6.xxl-job路由策略有哪些?
xxl-job提供了很多的路由策略,我们平时用的较多就是:轮询、故障转移、分片广播…
xxl-job任务执行失败怎么解决?
- 有这么几个操作
- 第一:路由策略选择故障转移,优先使用健康的实例来执行任务
- 第二,如果还有失败的,我们在创建任务时,可以设置重试次数
- 第三,如果还有失败的,就可以查看日志或者配置邮件告警来通知相关负责人解决
如果有大数据量的任务同时都需要执行,怎么解决?
- 可以让部署多个实例,共同去执行这些批量的任务,其中任务的路由策略是分片广播在任务执行的代码中可以获取分片总数和当前分片,按照取模的方式分摊到各个实例执行就可以了
评论区