服务发现
服务发现
任何可通过网络访问的软件,特别是如果它的目标是高可用性(在多台机器上运行冗余配置),都存在服务发现(Service Discovery)的问题。许多公司已经编写了自己的内部服务发现工具,其中许多已经作为开源发布。概括来说,这个问题有几种不同的方案:
-
允许客户联系任何节点(例如,通过循环策略的负载均衡(Round-Robin Load Balancer))。如果该节点恰巧拥有请求的分区,则它可以直接处理该请求;否则,它将请求转发到适当的节点,接收回复并传递给客户端。
-
首先将所有来自客户端的请求发送到路由层,它决定了应该处理请求的节点,并相应地转发。此路由层本身不处理任何请求;它仅负责分区的负载均衡。
-
要求客户端知道分区和节点的分配。在这种情况下,客户端可以直接连接到适当的节点,而不需要任何中介。
以上所有情况中的关键问题是:作出路由决策的组件(可能是节点之一,还是路由层或客户端)如何了解分区-节点之间的分配关系变化?