最近,一些服务发现工具变得流行/“主流”,我想知道在哪些主要用例下应该使用它们而不是传统的负载均衡器。
使用 LB,您可以在平衡器后面聚集一堆节点,然后客户端向平衡器发出请求,然后平衡器(通常)将这些请求轮询到集群中的所有节点。
通过服务发现(Consul、ZK等),您可以让一个集中的“共识”服务确定特定服务的哪些节点是健康的,并且您的应用程序连接到该服务认为是健康的节点。因此,虽然服务发现和负载平衡是两个独立的概念,但服务发现为您提供负载平衡作为一种方便的副作用。
但是,如果负载均衡器(例如HAProxy或nginx)内置了监控和健康检查,那么您几乎可以将服务发现作为负载均衡的副作用!这意味着,如果我的 LB 知道不将请求转发到其集群中的不健康节点,那么这在功能上等同于共识服务器告诉我的应用程序不要连接到不健康节点。
所以对我来说,服务发现工具感觉就像是负载均衡器的“六合一,六合一”。我在这里错过了什么吗?如果有人有一个完全基于负载平衡微服务的应用程序架构,那么切换到基于服务发现的模型有什么好处(或没有好处)?