7

Cloudfoundry 计划添加对映射到多个 IP(每个应用容器实例一个)的 DNS A 记录的支持,请参阅docs-proposal。想知道spring-cloud discovery配合ribbon能不能支持基于DNS的客户端负载均衡。

spring-cloud DiscoveryClient 似乎不做 DNS 解析,它管理主机名

功能区负载平衡库通过ListOfServers属性支持 FQDN 列表。

但是我找不到与指定服务器的 DNS 查找相关的文档:即如果 DNS A/AAA 记录(从 ListOfServers 获取)返回多个 IP 地址,功能区是否会在 IP 地址之间进行负载平衡?

我需要在哪里配置 DNS 缓存指令?这在 java.security 支持中是 JVM 范围的,还是我可以将其作为客户端幻灯片负载平衡选项(来自功能区)进行管理?

4

2 回答 2

3

Ribbon 不执行任何 DNS 查找,它按原样从 ServerList 中返回一个条目(IP 或名称)。

您不需要 Ribbon 来实现基于 DNS 的负载平衡;操作系统解析器将在每次查找的可用 IP 地址之间轮换。只要确保不缓存 DNS。

对于更复杂的负载平衡,您需要将 DNS 解析为 IP 列表,然后将其传递给 Ribbon。

于 2018-05-27T15:47:10.457 回答
1

如果你使用的是 spring cloud eureka 服务,每个服务实例都会在 eureka 上注册。这意味着您可以在同一主机上托管同一服务的多个实例,并且 eureka 知道每一个服务。

如果您将功能区用于基于客户端的负载平衡,那么功能区会查询 eureka 以获取服务的所有实例,并了解服务的每个实例。

这样,ribbon 可以选择连接到每个实例。因此,不需要多个 DNS A 记录。使用多个 DNS A 记录会适得其反,因为功能区无法再通过 DNS 区分服务的多个实例。在这种情况下,我建议设置eureka.instance.preferIpAddress为 true,以区分多个实例。

据我所知,功能区支持 2 种工作模式,RoundRobinRule 和 AvailabilityFilteringRule。

您可以在“Spring 微服务”一书中找到一个很好的介绍。

于 2018-05-27T13:22:49.117 回答