跳到主要内容

负载均衡

负载均衡是一种用于分配网络请求负载的技术。在设计需要处理大量流量的系统时,这是一个关键的考虑因素,可以提高系统性能、可扩展性和可靠性。

Apache APISIX 支持多种 负载均衡算法,其中之一是加权轮询算法。该算法以循环模式在一组服务器上分配传入请求。

在本教程中,你将创建一个具有两个上游服务的路由,并使用轮询负载均衡算法来对请求进行负载均衡。

前置条件

  1. 完成 安装 APISIX 以在 Docker 或 Kubernetes 中安装 APISIX。
  2. 了解 APISIX 路由上游
  3. 如果使用这些工具,请安装 ADCAPISIX-MCP

启用负载均衡

创建一个包含两个上游服务的路由,httpbin.orgmock.api7.ai,以在它们之间分配请求。当在 /headers 接收到请求时,两个服务都会响应请求头:

curl -i "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d '
{
"id": "getting-started-headers",
"uri": "/headers",
"upstream" : {
// Annotate 1
"type": "roundrobin",
// Annotate 2
"nodes": {
"httpbin.org:443": 1,
"mock.api7.ai:443": 1
},
// Annotate 3
"pass_host": "node",
// Annotate 4
"scheme": "https"
}
}'

type: 使用 roundrobin(轮询)作为负载均衡算法。

nodes: 上游服务。

pass_host: 使用 node 将 host 头传递给上游。

scheme: 使用 https 与上游启用 TLS。

如果路由创建成功,你将收到 HTTP/1.1 201 Created 响应。

验证

生成 50 个连续请求到 APISIX /headers 路由,以查看负载均衡效果:

resp=$(seq 50 | xargs -I{} curl "http://127.0.0.1:9080/headers" -sL) && \
count_httpbin=$(echo "$resp" | grep "httpbin.org" | wc -l) && \
count_mockapi7=$(echo "$resp" | grep "mock.api7.ai" | wc -l) && \
echo httpbin.org: $count_httpbin, mock.api7.ai: $count_mockapi7

该命令分别统计了两个服务处理的请求数。输出显示请求已分发到两个服务:

httpbin.org: 23, mock.api7.ai: 27

请求在服务之间的分布应接近 1:1,但可能并不总是完全为 1:1。轻微的偏差是由于 APISIX 使用多个 worker 运行所致。

下一步

你已经学习了如何配置负载均衡。在下一个教程中,你将学习如何配置密钥认证。