Cloudfoundry计划添加对映射到多个IP(每个应用容器实例一个)的DNS记录的支持,请参阅docs-proposal。我想知道spring-cloud discovery和ribbon是否可以支持基于DNS的客户端负载均衡。
spring-cloud DiscoveryClient似乎不做DNS解析,它管理host names。
功能区负载平衡库通过ListOfServers特性支持FQDN列表。
但我找不到与指定服务器的DNS查找相关的文档:即,如果DNS A/AAA记录(从ListOfServers获取)返回多个IP地址,Ribbon是否会跨ip地址进行负载平衡?
我需要在哪里配置DNS缓存指令?这是在java.security支持的JVM范围内,还是我可以将其作为客户端幻灯片负载平衡选项进行管理(从功能区)?
发布于 2018-05-27 23:47:10
Ribbon不执行任何DNS查找,它按原样从ServerList返回条目( IP或名称)。
您不需要Ribbon来实现基于DNS的负载平衡;OS解析器将在每次查找的可用IP地址之间轮换。只要确保不缓存DNS即可。
对于更复杂的负载平衡,您需要将DNS解析为IP列表,然后将其传递给Ribbon。
发布于 2018-05-27 21:22:49
如果您使用的是spring cloud eureka服务,则每个服务实例都会在eureka中注册。这意味着您可以在同一主机上托管同一服务的多个实例,并且eureka知道每一个服务。
如果您使用ribbon进行基于客户端的负载均衡,那么ribbon将查询eureka以获取服务的所有实例,并了解服务的每个实例。
这样,ribbon可以选择连接到每个单独的实例。因此,不需要多个DNS A记录。使用多个DNS A记录是适得其反的,因为ribbon不能再通过DNS区分服务的多个实例。在这种情况下,我建议将eureka.instance.preferIpAddress设置为true,以区分多个实例。
据我所知,ribbon支持两种工作模式,RoundRobinRule和AvailabilityFilteringRule。
你可以在"Spring微服务“一书中找到一个很好的介绍。
https://stackoverflow.com/questions/46542558
复制相似问题