1.协议
dubbo是基于rpc协议,基于接口的远程调用;不能跨平台
Cloud是http协议的,restful风格的,可以实现跨平台调用
rpc协议是基于更底层的TCP协议,数据不需要通过http协议包装,实践性能更好。
2.使用方式
dubbo一般是xml配置的方式,cloud是boot基于注解的
3.注册发现
dubbo使用的是zookeeper,在分布式系统中,zookeeper更加关注一致性,和容错性;当zookeeper主节点挂掉会有一个30~120s的选举时间,期间服务是不可用的。
cloud的注册中心使用的是EureKa,更加关注的是可用性,和分区容错,多个eureka不存在单点问题;
4.容错原理
Eureka server默认情况下在一定时间内没有收到某个微服务实例的心跳,eureka会注销该实例(90s),但当网络发生分区故障时,微服务与Eureka无法正常通信,不应该注销。通过自我保护来解决这个问题.
Eureka自我保护模式
当Eureka Server节点在短时间内发生丢失过多的客户端(可能是网络分区故障),那么这个节点就会进入自我保护模式,一旦进入该模式,Eureka Server就会保护注册表中的信息,不再删除注册表中的数据,即不再注销任何微服务,当网络恢复后。eureka节点会自动退出自我保护模式。
zookeeper和dubbo默认建立的是临时节点 当多了一个服务端 zookeeper会心跳通知消费端 让消费端在本地缓存存储该地址, 其中有一个服务提供者下线也是同理 zookeeper会让通知dubbo消费端清除那个失效的缓存 ,消费端调用服务端是查找本地缓存的地址的。
服务提供者向注册中心注册服务,消费者从注册中心订阅所需要的服务,但不是所有的服务,当新的提供者出现或者现有的提供者宕机,注册中心都会尽早发现,并更新提供者的列表,推送给对应的消费者。有了这种机制,dubbo才能做到failover,而failover的时效性,由注册中心的实现决定