2014-12-07 85 views
1

分布式系统中的不同组件如何知道在哪里发送消息来访问某些服务?分布式系统在哪里发送请求?

例如,假设我有一个处理认证的服务和一个处理搜索的服务。处理搜索的组件如何知道在哪里发送认证请求?子域名更常用吗?如果是这样,在这种情况下复制是如何工作的?是否有一些处理所有这些路由的本地IP地址注册表?

回答

1

您正在描述的问题称为服务查找/服务注册表/资源查找/ ..它取决于。这取决于你的系统有多大以及它的动态性如何。

如果您只有很少的组件,它可能足以将必要的信息存储在配置文件中,或将其作为参数传递。通常,许多人使用DNS作为查找系统,但由于缓存和长时间延迟,它不被认为是一个好的选择。

我认为大多数分布式系统使用Zookeeper为他们存储这些信息。这样所有的服务只需要知道Zookeeper集群的IP地址。如果你有复制,你只需要在Zookeeper中存储多个地址,并且根据你使用的系统,你需要自己选择一个地址,或者驱动程序这样做(如果你连接到复制数据库例如)。

另一种方法是使用消息队列,如ZMQ将消息转发到正确的实例。 ZMQ也可以处理复制和负载平衡。

+0

那么服务如何在注册表中注册?它只是在启动时对注册表进行ping操作,还是需要提前注册注册表?我意识到这可能是特定于实现的,你可以告诉我是否“取决于”。 – aclave1 2014-12-08 00:38:28

+0

对于zookeeper,您只需将连接信息包含在特定的密钥中,其他所有服务都将使用该密钥来找到您,ZMQ我不确定 - 它不是真的正确,但您可以看到zookeeper是一个可靠的分布式内部数据库,内存数据库(但仅将其用于配置值,不要尝试将其用于实际数据) – peter 2014-12-08 01:48:39