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

IT 文章1年前 (2024)发布 小编
0 0 0

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

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

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

ad

程序员导航

优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站

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

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

© 版权声明

相关文章

暂无评论

暂无评论...