『Apisix进阶篇』动态负载均衡:APISIX的实战演练与策略应用

🚀『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】


📣读完这篇文章里你能收获到

  • 🎯 掌握APISIX中多种负载均衡策略的原理及其适用场景。
  • 📈 学习如何通过APISIX的Admin API和Dashboard进行负载均衡配置和管理。
  • 🚀 了解APISIX在云原生环境中与服务发现系统的集成方式。
  • 🛠️ 探索APISIX的性能优化技巧和故障检测与转移机制,提高系统的稳定性和可靠性。

请添加图片描述

文章目录

  • 一、APISIX负载均衡基础
  • 二、负载均衡策略详解
    • 2.1 带权轮询(Weighted Round Robin, WRR)
    • 2.2 最少连接数(Least Connections)
    • 2.3 一致性哈希(Consistent Hashing)
    • 2.4 指数加权移动平均(Exponential Moving Average, EMA)
  • 三、动态负载均衡实战
    • 3.1 带权轮询算法演示
    • 3.2 配置示例
      • 3.2.1 Admin API应用
      • 3.2.2 Dashboard可视化操作
    • 3.3 云原生服务发现的集成
  • 四、负载均衡性能优化与故障转移
    • 4.1 性能优化
      • 4.1.1 缓存机制
      • 4.1.2 连接复用
      • 4.1.3 健康检查参数调整
      • 4.1.4 批量请求处理
    • 4.2 故障检测与快速故障转移
      • 4.2.1 主动健康检查
      • 4.2.2 被动健康检查
      • 4.2.3 快速故障转移
      • 4.2.4 优雅回退

一、APISIX负载均衡基础

Apache APISIX基于高性能的Nginx和OpenResty平台构建,通过Lua脚本实现灵活的业务逻辑。在负载均衡方面,APISIX通过定义Upstream来集中管理一组后端服务实例,然后在路由配置中引用对应的Upstream,实现请求的均衡分发。
每个Upstream内部可以设置多种负载均衡策略,且可以动态更新服务实例列表,无需重启服务就能实现配置变更的实时生效,这极大地提升了运维效率和系统的响应速度。

二、负载均衡策略详解

2.1 带权轮询(Weighted Round Robin, WRR)

  • 原理: 在传统的轮询算法基础上,带权轮询增加了权重的概念。每个上游服务器可以根据其处理能力或其他因素被赋予一个权重值。在调度请求时,不仅按照顺序分配,还考虑到服务器的权重比例,权重高的服务器会更频繁地接收请求。例如,如果服务器A的权重是2,而服务器B的权重是1,则在两次循环中,服务器A将会收到两次请求,而服务器B只会收到一次。
  • 应用场景: 当后端服务器性能差异较大,需要按照各自处理能力动态调整接收到的请求量时,带权轮询是一个理想的选择。

2.2 最少连接数(Least Connections)

  • 原理: 最少连接数算法会选择当前已建立连接数最少的上游服务器发送新的请求。这意味着每次调度都会检查所有服务器的活跃连接数,并将新的请求分配给活跃连接数最少的服务器,这样可以有效地均衡各服务器间的负载。
  • 应用场景: 对于长连接服务或者处理请求所需时间差异较大的服务来说,该算法有助于避免某些服务器因处理慢速请求而堆积过多连接,保持整体系统的均衡。

2.3 一致性哈希(Consistent Hashing)

  • 原理: 一致性哈希算法通过对客户端请求的特征(如请求URL、源IP地址或其他可定制的键值)进行哈希运算,将请求映射到一个虚拟环上,并根据上游服务器的位置选择最近的服务器响应请求。每个服务器也会在环上有一个或多个对应的哈希槽,这样在增加或移除服务器时,仅影响一小部分请求的分布,从而减少缓存失效和重新分布请求的成本。
  • 应用场景: 在分布式缓存系统或存储集群中,一致性哈希特别有用,因为它能较好地保持数据和服务实例之间的关联性,尤其是在集群规模发生变化时。

2.4 指数加权移动平均(Exponential Moving Average, EMA)

  • 原理: EMA算法基于过去一段时间内服务器响应时间和吞吐量的表现来进行动态负载均衡。它会给每个服务器分配一个基于历史性能指标计算得出的权重,并随着时间推移给予最近数据更高的权重。这样,近期表现更好的服务器将更有可能获得更多的新请求。
  • 应用场景: 在实时监测服务器性能并据此做出智能决策的环境中,EMA能够实现动态优化资源分配,尤其适合那些性能波动较大的服务,确保整体系统效能最优。

三、动态负载均衡实战

配置Apache APISIX实现不同负载均衡策略:可以通过修改APISIX的Upstream配置,选择合适的负载均衡算法。可以通过API接口或Apache APISIX Dashboard设置负载均衡策略类型和相关参数。

3.1 带权轮询算法演示

接下来以带权轮询算法讲解,传入的流量按照预定顺序轮流分配给一组服务器的其中一个。

  • 目标:创建一个具有两个上游服务的路由,并且启用负载均衡来测试在两个服务之间的切换情况。访问 /headers 将被转发到 httpbin.org 和 mock.api7.ai 这两个上游服务,并且会返回请求头。

3.2 配置示例

3.2.1 Admin API应用

  1. 创建一个upstream指向 httpbin.org及mock.api7.ai
curl http://127.0.0.1:9180/apisix/admin/upstreams  \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"id": "upstream-load-balance-id","name": "upstream-load-balance",	"type":"roundrobin",					"pass_host": "node","scheme": "https","nodes": [										{"host": "httpbin.org","port": 443,"weight": 1},									{"host": "mock.api7.ai","port": 443,"weight": 1}]
}'

image.png

  1. 创建一个路由routes,绑定以上创建的upstream
curl -i "http://127.0.0.1:9180/apisix/admin/routes" \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"id": "routes-load-balance-id","name": "routes-load-balance",	"uri": "/headers","upstream_id": "upstream-load-balance-id"			
}' 

image.png

  1. 负载均衡请求验证,访问:http://127.0.0.1:9080/headers

image.png
image.png

3.2.2 Dashboard可视化操作

  1. 创建一个upstream指向 httpbin.org及mock.api7.ai
  • 点击上游->创建->填写节点(注意此次验证端口需填443),协议选择HTTPs->下一步->提交

image.png
image.png

  1. 创建一个路由routes,绑定以上创建的upstream
  • 点击路由->创建->填写匹配路径->填写HTTP匹配方法->下一步->选择上游服务->下一步->提交

image.png
image.png
image.png

  1. 负载均衡请求验证,访问:http://127.0.0.1:9080/headers

image.png
image.png

3.3 云原生服务发现的集成

Apache APISIX完美兼容云原生环境,能够与Kubernetes、Consul等服务发现系统集成。当服务实例在Kubernetes集群中创建或销毁时,APISIX能够自动发现并同步最新的服务实例列表,进而调整负载均衡策略,确保服务的高可用性和可扩展性。
参考官方:https://apisix.apache.org/zh/docs/apisix/discovery/

四、负载均衡性能优化与故障转移

4.1 性能优化

Apache APISIX在设计时充分考虑了性能优化,其中的一些关键措施包括:

4.1.1 缓存机制

APISIX支持对一些静态资源或者常用API的缓存,减少对后端服务的频繁调用,降低网络延迟,提高整体性能。要开启对某个路径的静态资源缓存,可以通过路由级别配置缓存插件proxy-cache实现

curl http://localhost:9080/apisix/admin/routes/routes-cache-id \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"uri": "/anything/*","plugins": {"proxy-cache": {"cache_zone": "static_cache","ttl": 3600,"cache_key": "$request_uri"}},"upstream": {"type": "roundrobin","nodes": {"httpbin.org:80": 1}}
}'

4.1.2 连接复用

APISIX利用Nginx的长连接特性,保持与后端服务的连接池,减少建立TCP连接的开销,提升高并发场景下的性能。

4.1.3 健康检查参数调整

通过合理设置健康检查间隔、超时时间、失败阈值等参数,既能确保及时发现和剔除故障节点,又能避免过度检查造成的性能损耗。

4.1.4 批量请求处理

APISIX支持批量处理请求,特别是在一致性哈希场景下,可以一次性完成多个请求的路由选择,降低CPU和内存的使用率。

4.2 故障检测与快速故障转移

4.2.1 主动健康检查

APISIX内置了主动健康检查机制,周期性地向后端服务发送探测请求,根据响应结果确定服务实例的健康状态。

4.2.2 被动健康检查

除了主动检查外,APISIX还能根据后端服务的实际响应情况来判定服务实例是否健康。例如,如果一段时间内请求失败次数超过阈值,则认为该实例异常。

4.2.3 快速故障转移

一旦发现后端服务实例出现故障,APISIX会立即停止向该实例发送请求,并根据负载均衡策略将流量迅速转移至其他健康的实例,保证服务的连续性。

4.2.4 优雅回退

在故障节点恢复后,APISIX还可根据配置策略,逐步将流量返回至该节点,实现负载均衡的平滑过渡和风险控制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/775599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python-pytorch获取FashionMNIST实际图片标签数据集

在查看pytorch官方文档的时候,在这里链接中https://pytorch.org/tutorials/beginner/basics/data_tutorial.html的Creating a Custom Dataset for your files章节,有提到要自定义数据集,需要用到实际的图片和标签。 在网上找了半天没找到&a…

Ceph——部署

Ceph简介 Ceph是一款开源的 SDS 分布式存储,它具备极高的可用性、扩展性和易用性,可用于存 储海量数据 Ceph的存储节点可部署在通用服务器上,这些服务器的 CPU 可以是 x86 架构的,也可以 是 ARM 架构的。 Ceph 存储节点之间相互…

政安晨:【深度学习神经网络基础】(一)—— 逐本溯源

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 与计算机一样的古老历史 神经网络的出现可追溯到20世纪40年…

ubuntu22.04系统安装Opencv4.8.0+Opencv-contrib4.8.0

一、安装下载所需工具 1.打开终端,输入以下命令来更新软件源: sudo apt-get update 2.安装wget: sudo apt-get install wget 3.下载opencv和opencv-contrib包: wget -O opencv-4.8.0.zip https://github.com/opencv/opencv/…

【漏洞复现】网络验证系统getInfo接口处存在SQL注入漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

Remote Desktop Manager for Mac:远程桌面管理软件

Remote Desktop Manager for Mac,是远程桌面管理的理想之选。它集成了多种远程连接技术,无论是SSH、RDP还是VNC,都能轻松应对,让您随时随地安全访问远程服务器和工作站。 软件下载:Remote Desktop Manager for Mac下载…

【性能优化】 【回溯】 【字符串】1307. 口算难题

作者推荐 视频算法专题 本文涉及知识点 数学 回溯 字符串 性能优化 LeetCode1307. 口算难题 给你一个方程,左边用 words 表示,右边用 result 表示。 你需要根据以下规则检查方程是否可解: 每个字符都会被解码成一位数字(0 - …

云原生(六)、CICD - Jenkins快速入门

Jenkuns快速入门 一、CICD概述 CICD是持续集成(Continuous Integration)和持续部署(Continuous Deployment)的缩写。它是软件开发中的一种流程和方法论,旨在通过自动化的方式频繁地将代码集成到共享存储库中&#xf…

策略路由-IP-Link-路由协议简介

策略路由 策略路由和路由策略的不同 1.策略路由的操作对象是数据包,在路由表已经产生的情况下,不按照路由表进行转发,而是根据需要,依照某种策略改变数据包的转发路径 2.路由策略的操作对象是路由信息。路由策略的主要实现了路…

nginx代理服务后,有关文件的操作无法执行,nginx代理jupyter或为知笔记后无法创建文件及文件夹,无法操作文件

nginx配置 server {listen 18001; # 修改转发的接口listen [::]:18001; # 修改转发的接口server_name _;root /usr/share/nginx/html;location / {proxy_pass http://127.0.0.1:7777; # 指定自己服务地址proxy_set_header Host $host;}# Load configurat…

服务器监控软件夜莺采集监控(三)

文章目录 一、采集器插件1. exec插件2. rabbitmq插件3. elasticsearch插件 二、监控仪表盘1. 系统信息2. 数据服务3. NginxMQ4. Docker5. 业务日志 一、采集器插件 1. exec插件 input.exec/exec.toml [[instances]] commands ["/home/monitor/categraf/scripts/*.sh&q…

【深度学习】图片预处理,分辨出模糊图片

ref:https://pyimagesearch.com/2015/09/07/blur-detection-with-opencv/ 论文 ref:https://www.cse.cuhk.edu.hk/leojia/all_final_papers/blur_detect_cvpr08.pdf 遇到模糊的图片,还要处理一下,把它挑出来,要么修复,要么弃用。否…

信号处理--情绪分类数据集DEAP预处理(python版)

关于 DEAP数据集是一个常用的情绪分类公共数据,在日常研究中经常被使用到。如何合理地预处理DEAP数据集,对于后端任务的成功与否,非常重要。本文主要介绍DEAP数据集的预处理流程。 工具 图片来源:DEAP: A Dataset for Emotion A…

【深度学习】深度学习md笔记总结第2篇:TensorFlow介绍,学习目标【附代码文档】

深度学习笔记完整教程(附代码资料)主要内容讲述:深度学习课程,深度学习介绍要求,目标,学习目标,1.1.1 区别,学习目标,学习目标。TensorFlow介绍,2.4 张量学习目标,2.4.1 张量(Tensor),2.4.2 创建张量的指令,2.4.3 张量…

02.percona Toolkit工具pt-archiver命令实践

1.命令作用 Percona Toolkit有的32个命令,可以分为7大类 工具类别 工具命令 工具作用 备注 开发类 pt-duplicate-key-checker 列出并删除重复的索引和外键 pt-online-schema-change 在线修改表结构 pt-query-advisor 分析查询语句,并给出建议&#x…

Lua热更新(xlua)

发现错误时检查是否:冒号调用 只需要导入asset文件夹下的Plugins和Xlua这两个文件即可,别的不用导入 生成代码 和清空代码 C#调用lua using Xlua; 需要引入命名空间 解析器里面执行lua语法 lua解析器 LuaEnv 单引号是为了避免引号冲突 第二个参数是报错时显示什么提示…

【Java程序设计】【C00389】基于(JavaWeb)Springboot的校园疫情防控系统(有论文)

基于(JavaWeb)Springboot的校园疫情防控系统(有论文) 项目简介项目获取开发环境项目技术运行截图 博主介绍:java高级开发,从事互联网行业六年,已经做了六年的毕业设计程序开发,开发过…

H5小程序视频方案解决方案,实现轻量化视频制作

对于许多企业而言,制作高质量的视频仍然是一个技术门槛高、成本高昂的挑战。针对这一痛点,美摄科技凭借其深厚的技术积累和创新能力,推出了面向企业的H5/小程序视频方案解决方案,为企业提供了一种轻量化、高效、便捷的视频制作方式…

蓝桥杯基础练习汇总详细解析(三)——字母图形、01字符串、闰年判断(详细解题思路、代码实现、Python)

试题 基础练习 字母图形 提交此题 评测记录 资源限制 内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子&#…

2024年腾讯云4核8G服务器多少钱一年?买1年送3个月

2024年腾讯云4核8G服务器租用优惠价格:轻量应用服务器4核8G12M带宽646元15个月,CVM云服务器S5实例优惠价格1437.24元买一年送3个月,腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图: 腾讯云4核8G服务器优惠价格 轻…