Kong工作原理 - 负载均衡 - 基于DNS的负载均衡

2024-01-24 18:12

本文主要是介绍Kong工作原理 - 负载均衡 - 基于DNS的负载均衡,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Kong提供多种请求负载均衡到多个后端服务的方式:默认的基于DNS的方法,以及使用Upstream实体的一组高级负载均衡算法。

默认情况下启用DNS负载均衡器,仅限于循环调度负载均衡。Upstream实体还具有健康检查和断路器功能,除了更高级的算法,如最小连接数、一致性哈希和最低延迟。

根据您的基础设施,请参考相应的DNS注意事项。

每个使用主机名(而不是IP地址)定义的服务,如果该名称解析为多个IP地址,将自动使用基于DNS的负载均衡。

DNS记录的ttl设置(存活时间)决定了信息刷新的频率。当使用ttl为0时,每个请求将使用自己的DNS查询进行解析。显然,这会带来一定的性能损耗,但更新/更改的延迟将非常低。

所使用的循环调度算法(是否加权)取决于主机名的DNS记录类型。

A记录

A记录包含一个或多个IP地址。因此,当主机名解析为A记录时,每个后端服务必须有自己的IP地址。

由于没有权重信息,负载均衡器将平等对待所有条目,并进行简单的循环调度。

SRV记录

SRV记录包含所有IP地址的权重和端口信息。后端服务可以通过IP地址和端口号的唯一组合进行标识。因此,单个IP地址可以在不同的端口上承载多个相同服务的实例。

SRV记录还具有优先级属性。Kong只会使用具有最高优先级的条目,并忽略其他所有条目(请注意,SRV记录中的“最高优先级”实际上是具有最低优先级值的记录)。

因为可用权重信息,每个条目在负载均衡器中都会有自己的权重,并进行加权循环调度。

类似地,任何给定的端口信息都将被DNS服务器的端口信息覆盖。如果一个服务具有主机属性为myhost.com和端口属性为123,并且myhost.com解析为一个带有127.0.0.1:456的SRV记录,那么请求将被代理到http://127.0.0.1:456/somepath,因为端口123将被456覆盖。

DNS注意事项
  • Kong将信任域名服务器。这意味着通过DNS查询检索到的信息将比配置的值具有更高的优先级。这主要涉及到携带端口和权重信息的SRV记录。
  • 每当DNS记录刷新时,会生成一个列表来正确处理权重。为了保持算法的性能,尽量将权重保持为它们的倍数,例如,17和31的2个权重将导致结构中有527个条目,而16和32的权重(或者它们最小的相对项1和2)将导致结构中仅有3个条目。这在非常小(甚至为0)的ttl值下尤其重要。
  • DNS使用默认限制为512字节的UDP进行传输。如果要返回的条目很多,DNS服务器将以部分数据进行响应,并设置截断标志,表示有更多未发送的条目。DNS客户端,包括Kong,将通过TCP发起第二个请求来检索完整的条目列表。
  • 一些域名服务器默认情况下不会响应截断标志,而是将响应修剪为在512字节UDP大小以下。
    • Consul是一个示例。在其默认配置中,Consul仅返回前三个条目,并且不设置截断标志来指示还有剩余的未发送条目。Consul提供了一个选项来启用截断标志。
  • 如果部署的域名服务器没有提供截断标志,那么上游实例的负载可能会不一致。由于域名服务器提供的信息有限,Kong节点实际上对某些实例不知情。为了缓解这个问题,可以使用一个不同的域名服务器,使用IP地址而不是名称,或者确保使用足够多的Kong节点以保持所有上游服务的使用状态。
  • 当域名服务器返回一个“3 Name Error”的错误时,这对于Kong来说是一个有效的响应。如果这是意外的情况,首先验证查询的名称是否正确,其次检查域名服务器的配置。
  • 在DNS记录(A或SRV)中,初始选择的IP地址不是随机的。因此,在使用TTL为0的记录时,预期域名服务器会对记录条目进行随机排序。 

 

这篇关于Kong工作原理 - 负载均衡 - 基于DNS的负载均衡的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/640552

相关文章

关于DNS域名解析服务

《关于DNS域名解析服务》:本文主要介绍关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录DNS系统的作用及类型DNS使用的协议及端口号DNS系统的分布式数据结构DNS的分布式互联网解析库域名体系结构两种查询方式DNS服务器类型统计构建DNS域

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

MySQL中的表连接原理分析

《MySQL中的表连接原理分析》:本文主要介绍MySQL中的表连接原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、表连接原理【1】驱动表和被驱动表【2】内连接【3】外连接【4编程】嵌套循环连接【5】join buffer4、总结1、背景

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

Java Stream的distinct去重原理分析

《JavaStream的distinct去重原理分析》Javastream中的distinct方法用于去除流中的重复元素,它返回一个包含过滤后唯一元素的新流,该方法会根据元素的hashcode和eq... 目录一、distinct 的基础用法与核心特性二、distinct 的底层实现原理1. 顺序流中的去重

SpringBoot集成LiteFlow工作流引擎的完整指南

《SpringBoot集成LiteFlow工作流引擎的完整指南》LiteFlow作为一款国产轻量级规则引擎/流程引擎,以其零学习成本、高可扩展性和极致性能成为微服务架构下的理想选择,本文将详细讲解Sp... 目录一、LiteFlow核心优势二、SpringBoot集成实战三、高级特性应用1. 异步并行执行2

Spring @Scheduled注解及工作原理

《Spring@Scheduled注解及工作原理》Spring的@Scheduled注解用于标记定时任务,无需额外库,需配置@EnableScheduling,设置fixedRate、fixedDe... 目录1.@Scheduled注解定义2.配置 @Scheduled2.1 开启定时任务支持2.2 创建

Spring Boot 实现 IP 限流的原理、实践与利弊解析

《SpringBoot实现IP限流的原理、实践与利弊解析》在SpringBoot中实现IP限流是一种简单而有效的方式来保障系统的稳定性和可用性,本文给大家介绍SpringBoot实现IP限... 目录一、引言二、IP 限流原理2.1 令牌桶算法2.2 漏桶算法三、使用场景3.1 防止恶意攻击3.2 控制资源

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可