『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还可根据配置策略,逐步将流量返回至该节点,实现负载均衡的平滑过渡和风险控制。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式——行为型——策略模式Strategy

Q:策略模式的特点 A: 具体算法从具体的业务方法中独立出来策略模式是同行为的不同实现 Q:什么时候使用策略模式 A:多个if-else使用策略模式 收费对象类 public class CashContext {private CashStrategy cashStrategy;public…

备考ICA----Istio实验10---为单个主机配置TLS Istio Ingress Gateway实验

备考ICA----Istio实验10—为单个主机配置 TLS Istio Ingress Gateway实验 1. 环境准备 部署httpbin kubectl apply -f istio/samples/httpbin/httpbin.yaml 2. 证书生成 2.1 生成根证书 生成根证书keyfile和crt文件 mkdir example_certs_root openssl req -x509 -sha256 …

Code Review 最佳实践

成功的同行评审策略要求严格记录的流程与非威胁性、协作性环境之间保持平衡。高度规范的同行评审可能会抑制生产力,然而,过于随意的流程往往效果不佳。经理们需要找到一种折中方案,使同行评审既高效又有效,同时促进团队成员之间的…

特斯拉铺路 小米SU7稳了

文 | AUTO芯球 作者 | 李逵 我把特斯拉的销售拉黑了 拉完又后悔了 因为我欠他一个人情啊 具体怎么回事 看完你就会明白了 今天一大早 特斯拉的销售就发信息给我 说从4月1号开始 特斯拉就要涨价了 我以前去看的Model Y 要提价5000块 而且之前的补贴 什么保险补贴、…

Tunes不能读取iPhone的内容,请前往iPhone偏好设置的摘要选项卡,然后单击恢复以将此iPhone恢复为出厂设置

重启itunes: 参考链接: https://baijiahao.baidu.com/s?id1642568736254330322&wfrspider&forpc 人工智能学习网站: https://chat.xutongbao.top

「媒体宣传」媒体邀约几种常见方法!-51媒体

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体邀约的常见方法确实包括电话邀约、邮件邀约、社交媒体邀约以及通过媒体公关公司代邀约等。 电话邀约:这是一种直接且高效的方式,可以通过电话与媒体记者沟通&…

FANUC机器人KAREL语言程序结构(入门)

一、karel语言程序结构 FANUC机器人keral语言编程结构如下图所示: Keral指令对应的基础用法如下所示: 二、创建一个简单的写屏程序 依照对应的karel语法写写入下列程序 运行对应的程序进行测试:

强化安全防护:升级桌面网管软件提升医院信息系统安全

在当今信息化发展的时代,医院作为重要的医疗服务机构,对终端设备的管理尤为重要。然而,随着国家对医院终端管理的要求日益提高,传统的桌面网管软件已经难以满足现代医院的需求。针对这一现状,升级桌面网管软件已成为当…

JVM(五)——类加载阶段

一、类加载阶段 一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期将会经历加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resol…

HCIA-Datacom实验_03_实验一:华为VRP系统基本操作

1.运行eNSP,设置-界面设置-自定义界面-设备标签,“总显示接口标签” 打钩。 2.按照实验拓扑添加设备 注:如果是真实环境,需要接两条线: (1)串口线:电脑USB口到网络设备Console口&am…

第二篇:3.1 广告印象(AD Impression) - IAB与MRC及《增强现实广告效果测量指南1.0》

--- 我为什么要翻译美国IAB科技公司系列标准 翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象(AD Impression)第三篇广告效果测量定义和其他矩阵之- 3.2 可见度 …

网络安全-提权篇

我们在文件包含的时候可以将错误的用户名包含进日志,但是权限问题让人很烦恼,今天的侧重点主要是跟大家聊一聊提权 用户名包含进日志参考:RCE with LFI and SSH Log Poisoning - Hacking Articles 目录 一、环境 二、看看权限(…

17、GateWay和Sentinel继承实现服务限流

注:本篇文章主要参考周阳老师讲解的cloud进行整理的! 1、需求说明 cloudalibaba-sentinel-gateway9528 保护 cloudalibaba-provider-payment9001 2、启动nacos服务器8848 startup.cmd -m standalone 3、启动sentinel服务器8080 java -jar sentinel-dash…

基于java实现学科竞赛管理系统【Springboot+mybatis+layui】

基于java实现学科竞赛管理系统【Springbootmybatislayui】 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文…

深入Facebook的世界:探索数字化社交的无限可能性

引言 随着数字化时代的到来,社交媒体平台已经成为了人们日常生活中不可或缺的一部分,而其中最为突出的代表之一便是Facebook。作为全球最大的社交媒体平台之一,Facebook不仅仅是一个社交网络,更是一个数字化社交的生态系统&#…

2024年云计算使用报告,89%组织用多云,25%广泛使用生成式AI,45%需要跨云数据集成,节省成本是云首要因素

备注:本文来自Flexera2024年的云现状调研报告的翻译。原报告地址: https://info.flexera.com/CM-REPORT-State-of-the-Cloud Flexera是一家专注于做SaaS的IT解决方案公司,有30年发展历史,5万名客户,1300名员工。Flex…

鸿蒙OS开发实例:【工具类封装-http请求】

import http from ohos.net.http; import promptAction from ohos.promptAction; 封装HTTP接口请求类,提供格式化的响应信息输出功能。 使用 DevEco Studio 3.1.1 Release 及以上版本,API 版本为 api 9 及以上。 示例: import { MyHttpUtil…

代码随想录 Day59 单调栈

42接雨水问题,很巧妙,我一开始的思路是需要两个单调栈,一个是递增,一个是递减,分别遍历,从而得到当前方块的与两边的高度差,但是看过卡哥的思路,就会明白其实另一次的比较已经在入栈…

Docker中常见的命令行

1 docker的全部命令 docker attach #连接到正在运行中的容器 docker build #使用 Dockerfile 创建镜像 docker builder #管理builds docker builder prune #清除build缓存 docker checkpoint #管理checkpoints docker checkpoint create #从正在运行的容器创建检…

3d放上模型为什么渲染不出来---模大狮模型网

如果在3D软件中放置模型后无法正确渲染出来,可能有几个常见的原因导致这种情况发生: 材质设置问题:确保所放置的模型具有正确的材质和纹理,并且材质设置正确。如果材质设置有误,可能会导致模型无法正确显示。 光照设置…