『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.rhkb.cn/news/288939.html

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

相关文章

软考100-上午题-【信息安全】-网络攻击

一、常见的网络攻击 拒绝服务攻击(Dos攻击):目的是使计算机或网络无法提供正常的服务 拒绝服务攻击是不断向计算机发起请求来实现的,是一种网络攻击手段。 攻击者通过向目标服务器发送大量的无效请求,如TCP连接请求、HTTP请求等&#xff0…

IS-IS路由

概览: Intermediate System-to-Intermediate System,中间系统到中间系统协议 IS-IS--IGP--链路状态协议--AD值:115 IS--中间系统(路由器) ES--终端系统(PC) 在早期IS-IS的开发并不是为了IP…

Matlab|基于隐式Zbus高斯法的三相不平衡潮流计算【可设定变压器数量和位置】【Yy、Yd两种绕组方式】

目录 主要内容 部分代码 结果一览 主要内容 该模型基于隐式高斯法实现对配电网的三相不平衡潮流计算,通过选项可实现【不含变压器】和【含变压器】两种方式下的潮流计算,并且通过参数设置可实现多个变压器接入,该程序可计算【IE…

AI视频风格转换动漫风:Stable Diffusion+TemporalKit

话不多说,直接开干。 基本方法 首先通过 Temporal-Kit 这个插件提取视频中的关键帧图片,然后使用 Stable Diffusion WebUI 重绘关键帧图片,然后再使用 Temporal-Kit 处理转换后的关键帧图片,它会自动补充关键帧之间的图片&#…

C++ STL - 优先级队列及其模拟实现

目录 0. 引言 1. priority_queue 介绍 1.1 构造函数 1.2 priority_queue 接口函数使用 1.3 仿函数 1.4 题目练习 2. priority_queue 模拟实现 2.1基本框架: 2.2 默认构造函数 2.3 基本函数 2.4 堆的向上以及向下调整 0. 引言 优先队列 (priority_queu…

分类预测 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积神经网络-长短期记忆网络融合多头注意力机制多特征分类预测

分类预测 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积神经网络-长短期记忆网络融合多头注意力机制多特征分类预测 目录 分类预测 | Matlab实现CNN-LSTM-Mutilhead-Attention卷积神经网络-长短期记忆网络融合多头注意力机制多特征分类预测分类效果基本介绍模型描述程序设计参…

计算机网络(二)物理层

物理层 一、通信基础1.奈氏准则、香农定理2.编码与调制3.电路交换、报文交换、分组交换 二、 传输介质、设备1.导向性传输介质:1.1双绞线1.2 同轴电缆1.3光纤 2.非导向性传输介质: 一、通信基础 信道带宽:信道能通过的最高频率和最低频率之差…

Python爬虫学习完整版

一、什么是爬虫 网络爬虫,是一种按照一定规则,自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性,根据用户需求定向抓取相关网页并分析也成为如今主流的爬取策略。 1 爬虫可以做什么 你可以爬取网络上的的图片&#…

鸿蒙雄起!风口就在当下,你如何抉择?

近年来,华为自主研发的鸿蒙操作系统(HarmonyOS)引起了广泛的关注和讨论。鸿蒙系统不仅标志着华为在软件领域的一次重大突破,也预示着全球智能设备市场格局的潜在变化。本文将深入探讨鸿蒙系统的兴起、其在市场上的表现以及对程序员…

刚刚,百度和苹果宣布联名

百度 Apple 就在刚刚,财联社报道,百度将为苹果今年发布的 iPhone16、Mac 系统和 iOS18 提供 AI 功能。 苹果曾与阿里以及另外一家国产大模型公司进行过洽谈,最后确定由百度提供这项服务,苹果预计采取 API 接口的方式计费。 苹果将…

【AI漏洞】人工而后智能

注:公众号暂时不再使用了 本文主要内容: 1、主题:AI漏洞 2、过程:测试步骤 3、笔者:寄语 (重点:本文只做技术研究,请遵守相关法律法规,发现自身单位有漏洞请及时修复&…

C语言指针详解(上)

一.什么是指针 指针是一种类型,用来存储变量的地址的类型 有哪些类型呢 字符指针:char* 整型指针:int* 浮点型指针:float* 双精度浮点型指针:double* 空指针:void* (每一个类型的指针&a…

搜维尔科技:【应急演练】【工业仿真】救援模拟演练可视化仿真项目实施

安全救援综合演练系统是一套面向公共安全事故、预案管理、应急救援模拟演练的虚拟仿真解决方案,它为警察、消防以及专门的应急救援保障部门提供一个综合的应急救援培训和仿真演练平台。平台主要通过设计不同的事故模型和特定的灾难场景,定制不同的应急救…

Phoenix伪分布安装

引言 Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入数据和对HBase数据进行查询。Phoenix完全使用Java编写,作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase扫…

大话设计模式之模板方法模式

模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个算法的框架,将特定步骤的实现延迟到子类中。模板方法模式通过在父类中定义算法的骨架,而将具体步骤的实现留给子类来完成,从而使子类…

Python学习之-正则表达式

目录 前言:1.re.serach1.1例子: 2.re.match2.1示例1:2.2 示例2: 3.re.findall3.1 示例 4.re.fullmatch4.1 示例1:4.2 示例2: 5.re.split5.1 示例1:5.2 示例2:5.3 示例3: 6.re.sub6.1 示例&#…

都2024年了,还不知道怎么学习网络安全?来看看吧,很难找全的

前言 最近收到不少关注朋友的私信和留言,大多数都是零基础小友入门网络安全,需要相关资源学习。其实看过的铁粉都知道,之前的文里是有过推荐过的。新来的小友可能不太清楚,这里就系统地叙述一遍。 01.简单了解一下网络安全 说白…

阿里云ubuntu服务器搭建可视化界面

连接终端 最好初始化服务器的时候 不要以root权限创建 否则会出错 1更新软件: sudo apt-get update2安装ubuntu desktop : sudo apt-get install ubuntu-desktop3 配置ubuntu desktop并重启: sudo apt-get -f install sudo dpkg-reconfigure ubuntu-desktop sudo reboot4 su…

QT文件读写操作和内容提取

访问IO设备,需要先调用open()来设置正确的OpenMode(例如ReadOnly或ReadWrite) 打开设备后后,使用write() 或putChar() 写入数据到文件和设备,并通过调用read(),readLine() 或readAll() 进行读取;使用完设备后&#xf…

把本地文件上传到HDFS上操作步骤

因为条件有限,我这里以虚拟机centos为例 实验条件:我在虚拟机上创建了三台节点,部署了hadoop,把笔记本上的数据上传到hdfs中 数据打包上传到虚拟机节点上 采用的是rz命令,可以帮我们上传数据 没有的话可以使用命令安装…