* 1、SpringCloud有哪些常用组件?分别是什么作用?
答:
Nacos, OpenFeign, Sentinel,Seata,RabbitMQ,Gateway
Nacos: 服务注册中心,提供服务注册和发现功能
OpenFeign: 实现远程调用
Sentinel: 提供服务容错保护
Seata: 实现分布式事务管理
RabbitMQ: 实现异步通知
Gateway:(API网关服务):作用:安全,路由,限流,监控
* 2、服务注册发现的基本流程是怎样的?
答:
服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心
* 调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署)
* 3、Eureka和Nacos有哪些区别?
答: Nacos与Eureka的区别
1.Nacos支持服务端主动检测提供者状态: 临时实例采用心跳模式,非临时实例采用主动检测模式
2.临时实例心跳不正常会被剔除,非临时实例则不会被剔除
3.Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
4.Nacos集群默认采用AP方式,但也支持CP;Eureka采用AP方式
* 4、Nacos的分级存储模型是什么意思?
答:
任何一个微服务的实例在注册到Nacos时,都会生成以下几个信息,用来确认当前实例的身份,从外到内依次是:
namespace:命名空间
group:分组
service:服务名
cluster:集群
instance:实例,包含ip和端口
这就是nacos中的服务分级模型。
* 5、OpenFeign是如何实现负载均衡的?
答:
Spring在整合OpenFeign的时候,实现org.springframework.cloud.openfeign.loadbalancer.FeignBlockingLoadBalancerClient类,其中定义了OpenFeign发起远程调用的核心流程。也就是四步:
* 获取请求中的serviceId
* 根据serviceId负载均衡,找出一个可用的服务实例
* 利用服务实例的ip和port信息重构url
* 向真正的url发起请求
而具体的负载均衡则是不是由OpenFeign组件负责。而是分成了负载均衡的接口规范,以及负载均衡的具体实现两部分。
负载均衡的接口规范是定义在Spring-Cloud-Common模块中,包含下面的接口:
* LoadBalancerClient:负载均衡客户端,职责是根据serviceId最终负载均衡,选出一个服务实例
* ReactiveLoadBalancer:负载均衡器,负责具体的负载均衡算法