SpringCloud的核心组件
| 作用 | 推荐组件 |
|---|---|
| 服务注册与发现 | Nacos |
| 微服务调用 | OpenFeign |
| 负载均衡 | Ribbon(OpenFeign集成Ribbon) |
| 熔断与服务降级 | Hystrix、Sentinel(OpenFeign集成Hystrix,默认关闭,不推荐使用,推荐Sentinel |
| 网关 | Gateway |
微服务的优点
- 结构简单化,利于小团队开发
- 单个服务功能单一,方便快速开发迭代
微服务的缺点
- 增加运维难度,增加系统复杂度
- 增加系统网络开销
SpringCloud与Dubbo微服务之间调用的区别
SpringCloud服务之间调用是基于Http Rest方式(服务之间解耦,降低性能) Dubbo是基于RPC方式(高耦合,性能相对高)
Eureka与Zookeeper的区别
ZooKeeper保证的是CP,Eureka保证的是AP,ZooKeeper在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可用的。Eureka各个节点是平等关系,只要有一台Eureka就可以保证服务可用,而查询到的数据并不是最新的自我保护机制会导致Eureka不再从注册列表移除因长时间没收到心跳而应该过期的服务。Eureka仍然能够接受新服务的注册和查询请求,但是不会被同步到其他节点(高可用)。当网络稳定时,当前实例新的注册信息会被同步到其他节点中(最终一致性)。Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像ZooKeeper一样使得整个注册系统瘫痪.
- Zookeeper有Leader和的角色,Eureka各个节点平衡
- Zookeeper采用半数存活原则,Eureka采用自我保护机制解决分区问题
网关的作用
统一管理微服务请求,权限控制,负载均衡,路由转发,监控,安全控制黑名单和白名单等
什么是网关
相当于一个微服务的入口,所有的请求都必须通过网关转发到具体的服务
微服务之间如何独立通信
- 远程调用,如:feign调用,直接通过过程调用别的服务
- 消息中间件
什么是feign,优点是什么
- feign采用的是基于接口的注解
- 集成了Ribbon,具有负载均衡的能力
- 集成Hystrix,具有熔断的能力
注册中心原理
涉及三大角色:服务提供者,服务消费者,注册中心
- 各个服务在启动时将自己的网络地址等信息注册到注册中心,注册中心存储这些数据
- 服务消费中从注册中心查询服务提供者的地址,并通过这些地址调用服务提供者的接口
- 各个微服务与注册中心使用一定机制(心跳)进行通信,如果注册中心与某个微服务长时间无法通信,就会注销该实例
- 微服务网络地址发送变化(如:实例增加或者ip变动,会从新注册到注册中心,这样微服务就无需人工修改提供者的网络地址
注册中心功能
- 服务注册表:服务注册表是注册中心的核心,用于记录各个微服务的信息(名称,ip,端口等)服务注册表提供查询API和管理API,查询API用于查询可用的微服务实例,管理API用于注册与注销
- 服务注册与发现:服务注册是指在服务启动时将自己的信息注册到注册中心的过程,服务发现是指查询可用的微服务列表及网络地址机制
- 服务检查:注册中心使用一定的机制,定时的检查已经注册的服务,如发现某实例长时间无法访问,就会从服务注册表移除该实例