当zookeeper宕机的时候,Dubbo服务会不会受影响?

前言

程序运行的好好的,突然发现控制台 duang duang duang 的报错,一检查,咦,zookeeper挂了!一般这个情况下,我就直接去重启zookeeper了,但是,重点来了,但是,我不小心执行了项目中的某个请求, 竟然成功 了,顿时我整个人凌乱了,我决心下班后研究一波( ̄_, ̄ )

SOA

dubbo用了那么久,感觉就是,哎,把服务发在别的地方,可以让多台消费者消费,这样就不用在消费者起一些大家都会用到的服务,以达到优化项目的作用。话糙理不糙,当研究一波后,发现一个名词 SOA

啥是SOA

面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构件在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
在这里插入图片描述

SOA定义介绍

面向服务架构,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。

SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S模型、XML(标准通用标记语言的子集)/Web Service技术之后的自然延伸。

SOA将能够帮助软件工程师们站在一个新的高度理解企业级架构中的各种组件的开发、部署形式,它将帮助企业系统架构者以更迅速、更可靠、更具重用性架构整个业务系统。较之以往,以SOA架构的系统能够更加从容地面对业务的急剧变化。

SOA系统是一种企业通用性架构。

研究研究

链接
连接
连接
dubbo消费者
zookeeper
dubbo生产者
dubbo生产者

如上图所示

这是一个简单的dubbo服务过程,生产者启动后,把自身的信息写入到zookeeper中,让zookeeper以心跳机制查询生产者是否活着。然后消费者启动时,向zookeeper获取生产者的信息,保存在内存中, 如果zookeeper活着,会实时更新 。当调用消费者进行消费的时候,是根据获取到的 地址,以及 状态 直接进行 RPC 调用。

扫描二维码关注公众号,回复: 12472011 查看本文章

那么这时候问题来了, zoookeeper宕机了!

无论是消费者还是生产者,这时候在控制台都疯狂报错,因为它们都在不断地尝试连接zookeeper。这时候,有意思的地方来了,我们上面说到过,消费者是根据内存中保存的生产者的信息进行通信的,而在zookeeper宕机之前,这份信息已经保存在在内存里面,所以,即使这时候zookpper宕机了,消费者还是能与生产者通信。

如果两台生产者也有一台在zookeeper宕机之后宕机了?

一般情况下,如果zookeeper还活着,因为有心跳检测机制,能检测到生产者是宕机了,那么它就会直接通知消费者,让消费者修改内存信息,这样消费者就不会去连接宕掉的服务。

要是发生这种情况,首先看负载均衡配置了哪一种,如果分发的调用是访问好的生产者,那自然没问题。如果是访问到了坏的生产者,那么消费者会立即修改内存里面的生产者的 状态位,并且立即访问好的那一台。

那用户会不会受到影响呢?其实是会的,但是!非常小,小到用户几乎感受不到。

总结:

当zookeeper宕机的时候,Dubbo服务是不会受到影响的。ps(如果生产者还活着的话)

猜你喜欢

转载自blog.csdn.net/qq_29064815/article/details/106850457
今日推荐