分布式架构下,注册中心挂了,服务间还能相互调用吗?

面试题 潘老师 2年前 (2024-06-14) 145 ℃ (0) 扫码查看

在我们的分布式 RPC 框架中,注册中心是必不可少的。它能通过心跳机制监测服务有没有下线,还能收集服务的 IP 地址、端口、名称等供消费者调用,在整个体系中发挥着重要作用。

那么问题来了,如果注册中心挂了,服务之间还能不能相互调用?答案是能调用也有可能不能调用,这得看具体的场景。

其实注册中心挂掉分多种情况。如果注册中心的数据库挂了,其实也无所谓,因为通常会把注册信息放在缓存里,数据库挂掉后从缓存里捞数据就行。要是缓存也挂了访问不了,但如果采用的是集群模式,注册中心会选择其他节点作为 master 继续对外提供服务,所以也不用担心。可要是注册中心集群都挂了,数据库和缓存也都访问不了,别慌,也没啥大问题。因为调用者本地会缓存一份服务列表,包括 IP 地址、端口、名称等。服务在启动时会从注册中心拉取当前的服务包清单,所以调用者本地存有服务列表。一旦注册中心挂了,consumer 和 provider 之间就会采用直连的方式,省略和注册中心的交互,服务之间仍能相互调用且不受影响。当然,这些策略需要做一些配置,每家产品的设置可能不太一样。

接下来再说说不能调用的场景。在什么情况下服务包无法调用呢?那就是 provider,也就是服务的提供者的 IP 地址、端口发生了改变。正常情况下,注册中心能够感知到并广播给所有服务包,服务包接收到更新信息后会立刻改变本地缓存的服务数据。但注册中心挂了的话,其他服务包就无法更新本地的服务包清单,从而导致调用失败。

好了,本期关于注册中心的内容就到这里啦,如果您对本期内容有任何疑问,欢迎在评论区给我留言,谢谢大家!


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://test.unmao.com/ms/13017.html
喜欢 (1)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】