组件
Dubbo和SpringCloud的组件有什么区别
Dubbo | SpringCloud | |
---|---|---|
服务注册中心 | Zookeeper | Spring Cloud Netfilx Eureka |
服务调用方式 | RPC | REST API |
服务监控 | Dubbo-monitor | Spring Boot Admin |
断路器 | 不完善 | Spring Cloud Netfilx Hystrix |
服务网关 | 无 | Spring Cloud Netfilx Zuul |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总栈 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
部署
SpringCloud应用是怎么进行热部署的?
SpringCloud的热部署主要依靠Eureka和Zuul网关来实现,Eureka提供一系列Rest URL,可以对注册实例进行操作,比服务离线/上线,注册/注销,动态修改meta元数据等。 整体思路:
- Eureka将目标服务状态调整成
下线
利用 PUT /eureka/apps/appID/instanceID/status?value=OUT_OF_SERVICE 这个rest接口
下线后,还要经过几次心跳,Zuul才会感知到这台节点的变化,建议下线后,先等待1-2分钟,这样新的请求,就不会通过Zuul转发到这台目标机器。
- 对目标机进行常规发布
此时目标机上已经没有新请求进来,可以相对安全的进行程序更新发布
发布过程中,一般要先停止应用,建议用kill pid,不要带-9强杀,以防还有未执行完成的请求。
另外,发布重启后,也建议等待1-2分钟,等应用彻底启动好,并注册到Eureka Server上,让Zuul感知该节点已重新上线。
- 对其它节点重复以上操作。
注册中心
Eureka和Zookeeper有什么区别?
ZK保证CP
原则(一致性)而Eureka保证AP
原则(可用性);- ZK在选举期间注册服务瘫痪不可用,而Eureka各个节点平等,只要一台就能保证服务可以,但查询到的数据不一定是最新的,可以很好的应对网络故障导致的部分节点失联;
- ZK有
header
和follower
角色(当header挂掉,会从剩下的follower里面选举一个header),Eureka各个节点平等; - ZK采用半数存活原则(避免脑裂),Eureka采用自我保护机制来解决分区问题;