助力开发者,全方位解读 APISIX 测试案例

API 网关 APISIX 在Google Cloud T2A 和 T2D 的性能测试 本文主要使用 Apache APISIX 对比 Google Cloud T2A 和 Google Cloud T2D 的性能。可以看出,在 API 网关等网络 IO 密集计算场景中,Google Cloud T2A 相比 T2D,表现虽然不是那么亮眼,但是作为 Google Cloud 在 Arm 架构下的第一次尝试,相信其会在 Arm 架构的虚拟机上持续发力,也期待它的后续迭代表现。...... 阅读详情

背景信息

Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。你可以使用 APISIX 来处理传统的南北向流量,也可以处理服务间的东西向流量。同时,它也支持作为 K8s Ingress Controller 来使用。

通常情况下,想要保证软件正常运行,在软件上线前我们一般会使用各种技术和方法,通过手动或自动的方式对软件的功能进行检查以确保其运行正常。该操作我们称之为 QA(测试)。测试一般分为单元测试、E2E 测试以及混沌测试。

单元测试是用来检查单一模块的正确性(比如检查某个 RPC 的序列化/反序列化、数据加解密是否正常),但是该测试缺乏对系统的全局视角。而 E2E 测试(即端到端测试),可以补足单元测试的不足,该测试将整个系统和外部依赖服务跑起来,通过真实的软件调用方式检查本系统与其他系统的集成情况;混沌测试则通过在系统各组件间制造突发情况,如 OOM Kill、网络中断等,测试整个系统错误错误的容忍程度与能力。APISIX 的测试更加偏向于 E2E 测试,保证自身功能和与其他系统集成的正确性。

APISIX 测试案例简介

APISIX 作为全球最活跃的 API 网关,其稳定性及服务的健壮性需要得到一定的保障,那么如何避免 APISIX 中潜在的错误呢?这里就需要通过测试用例来实现了。

测试脚本并不仅仅是一个被测试机器执行的程序文件,对于开发者来讲,可以通过测试脚本完成软件所有功能的测试,包括不同配置、不同输入参数等情况下程序的运行状况。而对于用户来说测试提供了某一个功能模块的具体使用示例,例如:程序可以接受的配置和输入,想要得到怎样的输出结果。用户在参考使用文档时遇到不懂的地方,完全可以参考现有的测试用例,寻找是否有类似的使用场景。

在 APISIX 项目中,通常使用 Github Action 运行 CI 测试,执行下图展示的测试脚本。许多 APISIX 的开发者在编写测试用例时,会遇到各种各样的问题。希望通过本文,可以减少你在编写 APISIX 测试案例时出现的错误。

在这里插入图片描述

编写测试案例

APISIX的测试用例基于 Test::NGINX 测试框架编写,该测试框架是在 Perl 语言基础上实现的测试环境,可以提供基于脚本的自动化测试能力,为 APISIX 当前如此大规模的测试与质量保证工作提供了支持。当然你不会使用 Perl 也没有关系,因为大部分场景中是不需要编写 Perl 代码的,仅使用 TEST::NGINX 封装的能力即可,如果有特殊需求可以结合 Lua 代码的方式进行增强。

APISIX 的测试用例均存放在 ./apisix/t 目录下面,接下来将以添加 opa 插件为例为你介绍如何编写测试案例。

  1. 你需要创建一个 .t 结尾的测试文件,例如 ./t/plugin/opa.t。如果你是在已有功能上添加特性,可以直接在对应的测试文件中添加测试用例。并在文件中添加固定格式的 ASF 2.0 协议。

  2. 该部分主要作用是给 opa.t 这个文件中所有的测试用例自动添加 no_error_log,这样就不需要在每个代码下添加 error_log 相关的代码了,你可以直接复制使用这段代码。通过这种方式,可以减少一些重复的代码。

add_block_preprocessor(sub {
    my ($block) = @_;

    if ((!defined $block->error_log) && (!defined $block->no_error_log)) {
        $block->set_value("no_error_log", "[error]");
    }

    if (!defined $block->request) {
        $block->set_value("request", "GET /t");
    }
});

run_tests();

DATA
  1. 每个测试用例都有固定的开头,一般格式如下。
=== TEST 1: sanity

=== 测试用例起始的固定语法结构,TEST`` ``1 则代表是本文件的第一个测试用例。sanity 则为该测试的名称。一般以测试用例的具体目的命名。

  1. 接下来就是测试用例的正文部分了。在 APISIX 中几乎每个插件都会定义一些参数和属性,并且会预先定义 JSON schema,因此我们需要先检查该插件的输入参数是否能够正常地校验,通过这种方式就可以检查我们输入的数据是否可以正确地被 JSON schema 的规则去校验。
--- config
    location /t {
        content_by_lua_block {
            local test_cases = {
                {host = "http://127.0.0.1:8181", policy = "example/allow"},
                {host = "http://127.0.0.1:8181"},
                {host = 3233, policy = "example/allow"},
            }
            local plugin = require("apisix.plugins.opa")
            for _, case in ipairs(test_cases) do
                local ok, err = plugin.check_schema(case)
                ngx.say(ok and "done" or err)
            end
        }
    }
--- response_body
done
property "policy" is required
property "host" validation failed: wrong type: expected string, got number

通过阅读 opa 插件的源码,可以看到 opa 插件要求 host 和 policy 必须同时存在,因此此处需要定义三个规则。

  • 输入正确的参数,包括 host 和 policy。因此返回结果将是 done;

  • 仅输入 host 参数。不符合 host、policy 同时存在的要求,所以该测试预期返回结果将是 property "policy" is required;

  • 输入类型错误(整数)的 host 值。因为在源码中设置了 host 参数必须是字符串类型,所以返回结果将是property "host" validation failed: wrong type: expected string, got number。

--- config
    location /t {
        content_by_lua_block {
...
                ngx.say(ok and "done" or err)
            end
        }
    }
--- response_body
done
...

一般情况下,每个测试案例中需要使用 /t 的函数,比如说你需要调用 Lua 代码,定义 location,你可以使用 content_by_lua_block 的方式调用一些代码辅助测试,最后将响应信息以 ngx.say 的方式打印出来,然后再通过 --- response_body 的方式检查上面程序运行的是否正确。无需手动输入 request 和 error,因为我们已经通过脚本自动添加了。

            local plugin = require("apisix.plugins.opa")
            for _, case in ipairs(test_cases) do
                local ok, err = plugin.check_schema(case)
                ngx.say(ok and "done" or err)

以上代码表示导入 APISIX Plugin opa 插件的模块,并且调用 plugin.check_schema 函数。然后通过 for 循环,以此调用参数,并且根据测试情况返回对应的结果。

  1. 接下来,我们需要配置一个测试时使用的环境。对于插件来说,就是创建一个路由,然后把插件关联到该路由上。创建完成后,我们就可以通过发送请求校验插件的内部逻辑实现是否正确。
=== TEST 2: setup route with plugin
--- config
    location /t {
        content_by_lua_block {
            local t = require("lib.test_admin").test
            local code, body = t('/apisix/admin/routes/1',
                 ngx.HTTP_PUT,
                 [[{
                        "plugins": {
                            "opa": {
                                "host": "http://127.0.0.1:8181",
                                "policy": "example"
                            }
                        },
                        "upstream": {
                            "nodes": {
                                "127.0.0.1:1980": 1
                            },
                            "type": "roundrobin"
                        },
                        "uris": ["/hello", "/test"]
                }]]
                )
            if code >= 300 then
                ngx.status = code
            end
            ngx.say(body)
        }
    }
--- response_body
passed

在以上示例中,使用了 lib_test_admin 导入到 t 函数,创建一个 id 为 1 的路由,然后使用 PUT 的方法,传入这些数据。在该测试中,我们并没有对数据格式进行检验,因为该测试用例只要保证使用 Admin API 可以正常创建路由就可以了,当然我们也需要对异常进行判断,如果状态码大于或者等于 300 就会打印出具体的信息。

在 APISIX 的测试案例中,你会发现很多测试中都包含了以下代码:

local t = require("lib.test_admin").test
local code, body = t('/apisix/admin/routes/1', ngx.HTTP_PUT)

以上代码表示导入 lib.test_admin 模块并使用其中 test 函数封装来发送请求,它减少了我们调用 APISIX Admin API 等 HTTP 接口时的重复代码,只需简单调用并检查返回结果即可。

  1. 在第三个测试中,我们不需要再重复创建路由,因为在第二个测试中已经创建了。
=== TEST 3: hit route (with correct request)
--- request
GET /hello?test=1234&user=none
--- more_headers
test-header: only-for-test
--- response_body
hello world    

上述示例定义了 request。因为我们在上一个测试中定义了 /hello 和 /``test 的路径,所以我们可以通过 GET 的方法向 /``hello 发送请求,并然后它会发送一个 test=1234 和 user=none 的 query 参数。你也可以通过 more_headers 的方式添加响应头,比如给发送到 hello 的请求添加一个叫 test-header 的响应头。

以上测试是为了测试添加正确的请求头是否可以成功。你也可以在后续的测试示例中添加错误头,并验证结果。如果你需要使用 POST 请求,也可以把上述代码中的 GET /hello 修改为 POST /hello。

在有些测试中,你可能需要创建多个上游或者路由,此时你就可以定义一个数组,然后在数组中定义这些对应的值,并通过 for 方式循环地调用 t 函数,然后让它把这个东西正常地通过 put 的方式来调用 APISIX 的 Admin API 接口来正常创建路由或者上游。该方式也是测试比较常见的方式,称为:Table driving test,是一种通过表的方式驱动测试的方法,该方法减少部分重复出现的代码,比如 opa2.t。详细介绍,请参考 APISIX 测试案例快速入门视频。

运行测试案例

测试案例需要源码安装 APISIX,接下来将重点介绍如何运行测试案例及报错检查。

本地运行

通常情况下,你可以在本地使用以下指令来运行测试案例:

   PATH=/usr/local/openresty/nginx/sbin:/usr/bin PERL5LIB=.:$PERL5LIB FLUSH_ETCD=1 prove -Itest-nginx/lib -r t/admin
  • PATH 指定了 openresty/nginx 所在的目录,可以避免部分环境配置错误时引起的冲突问题,如果环境中的 OpenResty 安装在其他位置,则也可以通过这个命令进行指定。
  • PERL5LIB 指定了使用 Perl 导入到本地。导入本路径中存在的以及部分通过环境变量附加的 PERL 库。
  • FLUSH_ETCD 指定了在每个测试文件执行完成后,则清空所有数据,它需要调用etcdctl函数,需要确保在 PATH 中可以找到 etcdctl 可执行文件。
  • prove 调用测试程序开始执行测试。
  • -Itest-nginx/lib 表示导入 Itest-nginx/lib 这个库。
  • -r 表示自动寻找测试文件。如果指定的是一个路径,则会寻找这个路径下所有的测试文件。

以下为上述命令的正常执行结果。

  • t/admin 表示指定测试用例搜索路径,此处也可以指定到唯一一个 .t文件上进行限定。
    在这里插入图片描述

如果测试失败,则会出现以下信息:

在这里插入图片描述

以上信息则会告诉你具体是哪个测试文件中的哪个测试用例执行失败了。

Github 运行

一般情况在 Github 中提交代码时,输出的结果和在本地测试相似。

首先选择错误的执行工作流,主要的测试用例均在 build 系列 CI 中。

在这里插入图片描述

我们可以看到,在该示例中,416 行出现了报错。通过错误信息,我们可以得到在某个测试文件中的某个测试用例出现错误,开发者定向查看修正即可。需要注意的是,CI 中可能存在一些奇怪的报错,它们可能是因为CI环境的临时异常导致的,如果未修改过对应模块中的代码,可以忽略这些错误。

在这里插入图片描述

总结

本文主要为大家介绍了测试的相关流程,以及在 APISIX 测试案例的构成和如何进行测试案例的编写,希望通过本文你可以对 APISIX 的测试案例有一个大致的认识。

本文中只提到了 APISIX 测试框架中的一些核心内容,未能覆盖 TEST::NGINX 框架中的全部内容,实际上 TEST::NGINX 中还有很多强大的能力,我们可以通过 Test::Nginx::Socket 的文档了解更多用法。如果你想学习更多编写测试案例的知识,可以查看 APISIX 测试案例快速入门视频。

FDE前沿部署工程师:100个实战项目构建硬核作品集指南 容器化与云原生技术是现代软件部署和运维的基石,其核心在于通过Docker等容器技术实现应用的环境标准化与隔离,并借助Kubernetes等编排系统实现自动化部署、扩展和管理。这项技术的核心价值在于提升了应用交付的效率、可靠性和可移植性,是支撑微服务架构、持续集成与持续部署(CI/CD)的关键。在实际工程实践中,这些技术被广泛应用于构建自动化流水线、实现系统的可观测性以及保障生产环境的安全与合规。对于希望提升竞争力的部署工程师而言,掌握从基础设施即代码(IaC)、服务网格到AI/MLOps部署等全链路技能至关 阅读详情

相关推荐

助推开发者,深度解析APISIX测试案例

APISIX是一个高性能、可扩展的开源API网关,它具有强大的功能和灵活的插件机制,为开发者提供了丰富的工具来构建和管理API。除了使用OpenResty和Test::Nginx模块进行测试,APISIX还提供了其他测试工具和框架,如APISIX Dashboard和APISIX Test Helper等,开发者可以根据自己的需求选择合适的工具。以上是对APISIX测试案例的详细解析,通过源代码示例和测试策略的介绍,开发者可以更好地掌握如何进行有效的API网关测试。在上面的示例中,我们首先导入了。

FycPerformance的博客 283

jenkins与apisix整合,实现自动化部署与负载均衡、灰度发布(蓝绿发布)

APISIX安装与灰度、蓝绿发布

penngo的专栏 3492

从MUSA.zip到多重访问系统:并发控制、分布式锁与高可用架构实战

并发控制是计算机科学中的基础概念,它解决了多用户、多进程或多线程环境下共享资源的安全访问问题。其核心原理在于通过锁、队列和事务等机制,协调并发操作以避免数据竞争和不一致。这一技术对于构建高并发、高可用的分布式系统具有重要价值,广泛应用于数据库事务、消息队列、微服务架构等场景。本文以Redis分布式锁和任务队列为例,深入探讨了多重访问系统的实现模式,并分析了在分布式环境下如何应对C10K问题、实现数据一致性以及构建高可用架构,为开发者处理类似并发挑战提供了工程实践参考。

weixin_34178244的博客 364

通过 MSE 实现基于Apache APISIX的全链路灰度

无论是微服务网关还是微服务本身都需要识别流量,根据治理规则做出动态决策。当服务版本发生变化时,这个调用链路的转发也会实时改变。相比于利用机器搭建的灰度环境,这种方案不仅可以节省大量的机器成本和运维人力,而且可以帮助开发者实时快速的对线上流量进行精细化的全链路控制。...

数据库技术 1101

WinCC动态选择报警记录案例

本例中需要确认查询的时间段以及查询的关键字,然后通过一个按钮来执行报警数据查询脚本,并把查询出的结果加载到当前报警控件中。<本例中数据查询脚本的思路是根据选项组所选定的参数加载相应的归档变量到在线趋势控件,根据设定的查询时间范围设定控件时间轴的开始时间及结束时间。本文以 WinCC V8.0为例,介绍如何动态的查询WinCC报警记录,包括关键字查询/时间&关键字查询,如图1所示。<在WinCC变量管理中创建不同的变量组,并在变量组下创建相应的变量,如图2 所示(下图并非实际变量值)。

weixin_45072604的博客 2712

AURIX™ TC49x芯片手册中文分享(二)

主要内容为第一章、功能模块的特征

xibaofenqi的博客 1563

基于docker的apisix网关的java插件开发

apisix java插件的使用

记录工作开发中遇到的技术难点,方便自己查看,也希望可以帮助到他人... 2857

[原创]Linux 802.11n CSI tool安装教程(亲测可用)

Linux 802.11n CSI tool安装教程 前言 网上关于Intel5300 CSI tool的教程繁多,实际有效的可以说极少,各种疏漏错误。装的时候被坑无数次,终于调通。其实装这个工具并不太难,但是很多人把它弄得极其复杂,所以写这篇博客来帮助和我有一样困扰的人。我基本沿用的是官方文档旧版本的安装方案,针对其冗杂之处做了大量改进。 旧版安装教程: http://dhalperi....

u014645508的博客 4万+

go-zero API 网关与统一接入实战:流量治理、协议转换与最佳实践全解

本文系统解析 go-zero 在 API 网关与统一接入方面的机制,涵盖网关架构、统一认证、流量治理、协议转换、限流熔断、源码解读、架构图、流程图、Python 对比、最佳实践与常见问题,帮助中国开发者构建高可用、高扩展微服务接入层。go-zero 内置高性能 API 网关,支持统一接入、协议转换、认证鉴权、流量治理等能力,是微服务架构的流量入口和安全屏障。统一接入:多端统一入口,简化服务暴露协议转换:支持 HTTP/gRPC/WebSocket 等协议互转流量治理:限流、熔断、灰度发布、A/B 测试。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1292

基于matlab的CNN验证码识别系统(UI界面版)

基于matlab的CNN验证码识别系统(UI界面版),CNN验证码识别系统包括数据集处理、模型搭建、模型训练、界面设计与实现

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 484

大语言模型应用指南:幻觉和偏见问题

大语言模型应用指南:幻觉和偏见问题 1. 背景介绍 1.1 大语言模型的发展历程 1.1.1 早期的语言模型 1.1.2 Tr

AI天才研究院 958

超越排行榜:构建系统化技术评估工程框架

技术选型是软件工程中的核心决策环节,其本质是在特定约束下,为业务问题寻找最优技术解决方案的系统化过程。其核心原理在于将主观偏好转化为客观、可衡量的指标体系,通过多维度的定量与定性分析,规避单一数据源的认知偏差。这套方法论的技术价值在于降低决策风险、提升技术投资的长期回报率,并能有效应对技术债务。其应用场景广泛,涵盖从数据库、缓存、API网关选型到开发框架、云服务评估等各类基础设施与技术栈决策。本文以**评估工程**和**基准测试**为核心,通过构建包含明确目标、设计模型、深度验证与决策复盘的四阶段框架,并结

weixin_30667649的博客 464

OPPO 数据分析面试题及参考答案

如何设计共享单车数据库的各个字段? 对于共享单车的数据库设计,首先考虑用户相关的字段。用户表可以包含用户 ID,这是一个唯一标识符,用于区分不同用户;姓名,记录用户的真实姓名;联系方式,比如手机号码,方便在出现问题时联系用户;注册时间,记录用户何时开始使用共享单车服务;信用分数,用于衡量用户使用共享单车过程中的行为是否合规,比如是否按时归还车辆等。 车辆信息表要有车辆 ID,这是车辆的唯一标识;车辆类型,例如普通单车、电动单车等;投放时间,即车辆投放到市场的时间;车辆状态,包括是否可用(如正

大模型大数据攻城狮的专栏 1186

基于TrueForge平台部署MiniMax AI应用:从开发到生产的MLOps实践

在AI应用开发领域,MLOps(机器学习运维)已成为连接模型开发与生产部署的关键桥梁。其核心原理是通过自动化、标准化的流程,解决环境不一致、资源管理复杂、部署繁琐等工程挑战,从而实现模型服务的快速迭代与稳定交付。TrueFoundry作为云原生MLOps平台,其最新组件TrueForge专注于AI应用部署与Serving,通过抽象底层基础设施复杂度,为开发者提供一站式解决方案。本文以部署基于MiniMax API的智能客服助手为例,详细演示了如何利用TrueForge平台,从环境搭建、代码容器化到配置发布、

316

Android Update Engine 分析(三四)OTA 签名都支持哪些算法?

写了几十篇还没涉及到 OTA 签名算法细节,OTA 讨论群也很少问这个,毕竟签名算法纯理论的问题,一旦实现好就极少需要改动,只需要进行一些配置,准备好签名的秘钥和证书就可以了。限于签名的算法理论太过于抽象,本篇不讨论签名算法细节,但会总结一些签名操作。以及 Android OTA 包支持的签名算法。本文主要分析 Update Engine 中支持的签名算法,以及这些算法的操作实现(不涉及原理部分),并总结签名和验签使用的 key。

洛奇看世界 716

Winform从入门到精通(21)——ProgressBar(史上最全)

本介绍ProgressBar控件的详细用法,包含所有属性、事件,绝对史上最全!

qq_34059233的博客 3350

apisix实现http流量灰度方案的演进

总的来说基于apisix实现灰度发布还是比较简单的,实现方式有多种,区别主要还是kubernetes中是多个service还是单个service相对来说多service是apisix更推荐的做法,也能更精准控制流量。但是相对于java传统的比如和dubbo这些服务发现框架来说都是单service的元数据管理不太一样所以后续要实现全链路灰度可能会有比较大的不同。

念念不忘,必有回响 2072

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

apisix健康检查测试

被动健康检查不会对目标产生额外的流量,主动进行健康检查会产生额外流量。主动健康检查需要在target中配置要探测URL(可以简单配置为“/”)和判定健康或不健康的状态码,而被动运行状况检查不需要这种配置。在实际使用中,使用被动健康检查可能会误杀一些还处于正常状态的target可以承接的流量,所以应该谨慎使用被动模式;对target进行探活探死的时候,不能进行有冲突的配置,比如HTTP403在主动探测模式下认为是健康的返回码,而在被动模式下却认为是不健康的返回码;;.........

Flytiger 3784

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

apisix网关、JMeter压测 —— k8s从入门到高并发系列教程 (八)

面向外部的大流量的网络请求,我们需要一个api网关——apisix。这样的demo能不能开放出来给用户使用?我们先用JMeter来压测一下吧

fanghailiang2016的博客 1904

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

APISIX的安装与测试(springboot服务测试)

这个IP地址是你的服务器地址, 如果 APISIX 运行在 Docker 容器中,而你的服务直接运行在主机上,可能存在网络隔离问题。方法一,将你的服务放在同一个docker网络中(舍弃)。方法二直接使用服务器地址。如果你在安装 APISIX 时选择了 Docker 或 Helm 安装,那么 etcd 将会自动安装;就会接收到内容 “Hello 我是apisix222”将打包好的jar包上传到服务器上并执行。则网关会将请求转发到。

qq_63946922的博客 1344

最新出炉!开源 API 网关的性能对比:APISIX 3.0 和 Kong 3.0

APISIX 3.0 整体性能相比 Kong 3.0 而言,仍然保持着较大的优势。

ApacheAPISIX的博客 3425

Apache APISIX 在Amazon Graviton3 上的安装和性能测试

前言亚马逊云科技在 2022 年 5 月底正式推出基于 Amazon Graviton3 处理器的计算优化型实例C7g[1]。与 Amazon Graviton2 处理器相比,基于领先的 DDR5 内存技术,Graviton3 处理器可提供高达 25% 的性能提升、高达 2 倍的浮点性能以及 50% 的内存访问速度;在性能与同类 EC2 实例相同的情况下,Gravito...............

亚马逊云科技专栏 520

云原生 API 网关 APISIX 入门教程

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !​Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它具有动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、限速、防御恶意攻击、身份认证、可观测性等丰富的流量管理功能。我们可以使用 Apache APISIX 来处理传统的南北向流量,也可以处理服务间...

easylife206的专栏 9751

Apache APISIX灰度发布与蓝绿部署实战教程

在现代微服务架构中,服务的平滑升级和版本迭代是每个开发团队必须面对的挑战。你是否曾经遇到过这样的困境: - 新版本上线后突然出现严重bug,导致整个服务不可用 - 用户对新功能的接受度难以预测,全量发布风险巨大 - 需要为特定用户群体(如内部测试人员)提供新版本服务 - 希望逐步增加新版本的流量比例,降低发布风险 Apache APISIX的`traffic-split`插件正是解决这些痛点的...

gitblog_00796的博客 844

API 网关 Apisix:灰度发布与蓝绿部署

通过 APISIX 实现灰度发布和蓝绿部署,能显著提升发布安全性和系统可用性。

2501_93893344的博客 620
上一篇: APISIX 如何与 Hydra 集成,搭建集中认证网关助力企业安全
下一篇: APISIX 在 API 和微服务领域的探索
API7.ai 技术团队
博客等级 码龄5年 165粉丝 178原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

API7.ai 技术团队

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值