上游
本文档将介绍 APISIX 中上游(Upstream)对象的基本概念以及为什么要使用它。你将了解一些相关功能,包括负载均衡、服务发现和上游健康检查。
在末尾探索其他资源以获取有关相关主题的更多信息。
概述
APISIX 中的_上游_(Upstream)对象是包含一个或多个上游地址的集合的逻辑抽象。在路由或服务中需要它来指定请求流向哪里以及如何分发。
有多种配置上游地址的方法,其中之一是在每个路由/服务中显式配置它们。以下是在路由中进行此类配置的示例,其中相同的上游地址在三个不同的路由中重复出现:
然而,这种方法会导致数据冗余,并带来更新异常的风险(即部分更新导致的数据不一致)。
更好的方法是将重复的上游配置提取到一个单独的上游对象中,并将其 upstream_id 嵌入到路由/服务中,如下所示:
你可能已经看到,拥有许多路由/服务的大规模系统将从在上游对象中配置相同的上游地址组中受益匪浅,从而减少冗余信息和运营成本。
负载均衡
上游中的一个重要配置选项是负载均衡算法。
APISIX 提供四种负载均衡算法选项供选择:
roundrobin- 加权轮询chash- 一致性哈希ewma- 指数加权移动平均least_conn- 最小连接数
你还可以通过将源文件添加到 apisix/balancer 下并在需要时通过 require("apisix.balancer.your_balancer_name") 导入它来构建自己的负载均衡算法。
要了解有关如何在 APISIX 中配置负载均衡的更多信息,请参阅负载均衡教程和 Admin API 参考。
服务发现
虽然静态配置上游地址很简单,但在基于微服务的架构中,上游地址通常是动态分配的,因此会在自动扩缩容、故障和更新期间发生变化。在这种情况下,静态配置不太理想。
服务发现此时就派上用场了。它描述了自动检测可用上游服务并将它们的地址保存在数据库(称为服务注册表)中以供他人引用的过程。这样,API 网关始终可以通过注册表获取最新的上游地址列表,确保所有请求都转发到健康的上游节点。
APISIX 支持与许多服务注册表集成,例如 Consul、Eureka、Nacos、Kubernetes 服务发现等。
有关如何与第三方服务注册表(如 HashiCorp Consul)集成的更多详细信息,请参阅操作指南。
上游健康检查
APISIX 提供主动和被动健康检查选项来探测上游节点是否在线(即健康)。不健康的上游节点将被忽略,直到它们恢复并再次被视为健康。
可以在上游对象的 checks 参数中配置上游健康检查。
有关如何配置主动和被动上游健康检查的更多详细信息,请参阅操作指南。
其他资源
- 快速入门 - 负载均衡
- 配置上游健康检查
- 集成 HashiCorp Consul 进行服务发现
- Admin API - Upstream