【问题标题】:Distributed systems where to send requests?分布式系统向哪里发送请求?
【发布时间】:2015-02-05 12:11:30
【问题描述】:

分布式系统中的不同组件如何知道将消息发送到何处以访问某些服务?

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

【问题讨论】:

    标签: distributed microservices


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 那么服务如何向注册表注册自己呢?它只是在启动时 ping 注册表,还是需要提前给注册表地址?我意识到这可能是特定于实现的,您可以告诉我是否“取决于”。
    • 对于zookeeper,您只需在特定键处包含连接信息,所有其他服务都将使用它来找到您,ZMQ 我不确定 - 它不是真的正确,但您可以看到zookeeper 作为一个可靠的分布式内存数据库(但只用于配置值,不要尝试将其用于实际数据)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2016-04-16
    • 1970-01-01
    相关资源
    最近更新 更多