服务发现工具和检查节点健康的负载均衡器之间的概念差异是什么?

20

最近,几个服务发现工具变得越来越受欢迎/"主流"。我想知道在什么情况下应该使用它们而不是传统的负载均衡器。

对于负载均衡器,您将一组节点集群在平衡器后面,然后客户端向平衡器发出请求,平衡器通常会将这些请求循环发送到集群中的所有节点。

使用服务发现(如ConsulZK等),您可以让集中式的“共识”服务确定哪些特定服务的节点是健康的,然后您的应用程序会连接到被服务认为是健康的节点。因此,虽然服务发现和负载均衡是两个不同的概念,但服务发现会方便地为您提供负载均衡。

但是,如果负载均衡器(例如HAProxynginx)内置了监视和健康检查,则您基本上会获得以负载均衡为副作用的服务发现!这意味着,如果我的负载均衡器知道不要将请求转发到其集群中的不健康节点,那么在功能上相当于共识服务器告诉我的应用程序不要连接到不健康节点。

因此,在我看来,服务发现工具就像是负载均衡器的“半斤六两”等价物。我是否漏掉了什么?如果某人的应用程序架构完全依赖于负载平衡微服务,那么切换到基于服务发现的模型有何益处(或无益)?


1
为什么作出这种模糊的回答?这个问题已经经过了研究,不是重复的,并且符合 SSCCE 的标准。 - smeeb
1
感谢您的修改@Fritz,但是“vs”类型的问题在SO上因为毫无意义而闻名。而且这个问题并不是真正的“vs”类型问题,我只是想了解服务发现工具究竟为传统负载均衡器解决了什么问题(如果有的话)。再次感谢! - smeeb
我问过自己:"如果别人问起你的问题,他们会用什么关键词搜索呢?他们更可能使用'vs'。如果这对你没有帮助,那么一个更详细的标题如何呢?例如'服务发现与负载均衡之间的概念差异是什么?'" - Fritz Duchardt
3个回答

23

负载均衡器通常需要资源的端点来平衡流量负载。随着微服务和基于容器的应用程序的增长,运行时创建的动态容器(Docker 容器)是短暂的,并且没有静态的端点。这些容器端点是短暂的,它们随着它们被逐出和创建以进行缩放或其他原因而改变。类似 Consul 的服务发现工具用于存储动态创建的容器(Docker 容器)的端点信息。类似 consul-registrator 运行在容器主机上,将容器端点注册到类似 Consul 的服务发现工具中。类似 Consul-template 的工具会监听 Consul 中容器端点的更改,并更新负载均衡器(Nginx),以便发送流量。因此,服务发现工具(如 Consul)和负载均衡工具(如 Nginx)共存,分别提供运行时服务发现和负载均衡功能。

后续问题:短暂节点(即出现和消失,生存和死亡的节点)与传统虚拟机等“永久”节点相比有哪些好处?

[DDG]: 我想到的东西包括:像 Docker 容器这样的短暂节点非常适合无状态的服务,例如 API 等。(使用外部卷 - 卷驱动程序等存在持久性容器的势头)

  1. 速度:启动或销毁短暂容器(从镜像中的 Docker 容器)需要少于 500 毫秒,而不是传统虚拟机需要数分钟。

  2. 弹性基础设施:在云时代,我们希望根据用户的需求进行扩展和收缩,这意味着会有短暂的容器(无法保留 IP 地址等)。想象一下一周的市场营销活动,我们预计 TPS 流量将增加 200%,使用容器快速扩展,然后在活动结束后将其销毁。

  3. 资源利用:数据中心或云现在是一个大型计算机(计算集群),而容器则对计算集群进行了打包,以实现最大化的资源利用率,并在需求低峰期间销毁基础设施以降低账单或资源使用率。

之所以能够实现这些,很大程度上要归功于与短暂容器的松耦合和使用像 Consul 这样的服务发现工具进行运行时发现。传统虚拟机和 IP 的紧密绑定可能会抑制这种能力。


感谢@DDG(+1,我不是那个没有解释就给你点踩的人)。所以你说的很有道理。我想我的后续问题是:短暂节点(即来去无踪、生死无常的节点)与传统虚拟机等“永久”节点相比有哪些好处?如果你能解释清楚,赏金就归你了! - smeeb

4
请注意,这两者不一定互斥。例如,您仍然可以将客户端指向负载均衡器(可能执行其他角色,如节流),但是负载均衡器使用服务注册表来查找实例。
另外值得指出的是,服务发现可实现客户端负载平衡,即客户端可以直接调用服务而无需通过负载均衡器进行额外跳转。我理解这是Netflix开发Eureka的原因之一,以避免在服务间调用时必须经过外部ELB的进出。客户端负载均衡还提供了一种手段,使客户端能够根据自己对服务可用性的看法影响负载平衡决策。

1
如果您从完全不同的角度看待工具,即ITSM/ITIL,负载均衡就变得“只是那样”,而服务发现是保持CMDB与所有服务及其相互连接性保持最新状态的一部分,以便更好地了解影响,在停机情况下,以及需要补充的区域概述,在高可用应用程序的情况下。
此外,服务发现仅在最后一次扫描时提供图片,而非近实时(当然取决于您设置的扫描间隔),而负载平衡将保持应用程序健康状况的最新图片。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接