Euraka如何实现集群同步?

EurekaServer集群模式是peer to peer,不存在选主模式,这也是eureka比zk强大的地方,zk选主时集群是不可用状态。
PeerAwareInstanceRegistryImpl
eureka节点数据同步,netflix注册中心实现类,用于 eureka节点间同步, 看replicateToPeers方法
PeerEurekaNode
代表一个 EurekaServer节点,包含了节点地址,节点配置,注册表信息。register cancel 等方法都是其他eurekaServer节点同步注册表信息时调用。
例如当eurekaClient 注册 到 EurekaServer A时, A会调用EurekaServer B的register方法同时注册到 B的注册中心。
[

](https://blog.csdn.net/weixin_39803552/article/details/113070453)
Eureka作为服务注册中心,在集群部署下,集群内节点之间数据一致性是通过节点之间数据同步来实现的,数据同步采用的是Acceptor - Worker 模式的消息广播机制来完成的,整个过程大致就是:

1)某个节点收到客户端的消息(注册、心跳、下线、状态变更等)后,刷新本地注册信息;

2)遍历所有的节点(会排除自己),将消息转发到其他节点;

  1. 为了实现数据同步(Eureka保证的AP特性),每个几点需要维护一个节点列表,这个节点列表就是PeerEurekaNodes,她负责管理所有的PeerEurekaNode。<br />————————————————<br />版权声明:本文为CSDN博主「guyue35」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。<br />原文链接:[https://blog.csdn.net/guyue35/article/details/122442587](https://blog.csdn.net/guyue35/article/details/122442587)

hystrix如何实现线程隔离?

image.png
image.png
image.png
image.png
image.png

springcloud和dubbo哪个好?

dubbo和Feign远程调用的差异
Feign是SpringCloud中的远程调用方式,基于成熟Http协议,所有接口都采用Rest风格。因此接口规范更统一,而且只要符合规范,实现接口的微服务可以采用任意语言或技术开发。但受限于http协议本身的特点,请求和响应格式臃肿,其通信效率相对会差一些。
Dubbo框架默认采用Dubbo自定义通信协议,与Http协议一样底层都是TCP通信。但是Dubbo协议自定义了Java数据序列化和反序列化方式、数据传输格式,因此Dubbo在数据传输性能上会比Http协议要好一些。
不过这种性能差异除非是达极高的并发量级,否则无需过多考虑。

两者都是现在主流的微服务框架,但却存在不少差异:

  • 初始定位不同: SpringCloud定位为微服务架构下的一站式解决方案;Dubbo 是 SOA 时代的产物,它的关注点主要在于服务的调用和治理
  • 生态环境不同: SpringCloud依托于Spring平台,具备更加完善的生态体系;而Dubbo一开始只是做RPC远程调用,生态相对匮乏,现在逐渐丰富起来。
  • 调用方式: SpringCloud是采用Http协议做远程调用,接口一般是Rest风格,比较灵活;Dubbo是采用Dubbo协议,接口一般是Java的Service接口,格式固定。但调用时采用Netty的NIO方式,性能较好。
  • 组件差异比较多,例如SpringCloud注册中心一般用Eureka,而Dubbo用的是Zookeeper

作者:小知
链接:https://www.zhihu.com/question/45413135/answer/2124879148
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。