Apache APISIX快速入门
本文将介绍Apache APISIX,这是一个开源API网关,可以处理速率限制选项,并且可以轻松地完全控制外部流量对内部后端API服务的访问。我们将看看是什么使它从其他网关服务中脱颖而出。我们还将详细讨论如何开始使用Apache APISIX网关。
在深入讨论这个主题之前,让我们先讨论一下API网关。
API网关
API网关是所有客户机的单一入口点。它们位于客户端和后端服务之间。通过调用多个后端服务,将来自客户机的API请求代理/路由到适当的服务。然后将结果聚合并返回给客户机。
- 网关实现的难点
- 大多数API网关适合处理企业内网流量,无法承受数以万计的客户端请求。
- 一些网关依赖于关系数据库,这对弹性扩展具有挑战性。这些系统大多是老旧的,并且是在微服务出现之前开发的。
APISIX
Apache APISIX是Apache基础下的顶级项目。它是一个云原生API网关,可以处理云计算、金融科技、保险、市场、房地产、安全、语音识别和旅游等行业多个平台上的接口流量。
Apache APISIX只是一个动态的、实时的、高性能的API网关。与传统的API网关相比,APISIX提供了适合微服务系统下API管理的功能。这可以通过动态路由、身份验证、可观察性、插件热加载、gRPC协议转码等实现。
企业可以使用Apache APISIX快速管理API和微服务流量,使用流限制身份验证、日志安全性和对复杂自定义插件的支持等特性。
APISIX有一个管理仪表板,用户可以很容易地管理和配置插件、路由和其他组件。它可以与许多开源统计和监控组件(如Prometheus、Apache Skywalking和Zipkin)集成,以提高性能。
APISIX架构
Apache APISIX架构
Apache APISIX包括三个部分:
- 数据平面:动态控制请求流量,实现流量的处理和分配;
- 控制平面:存储和同步网关数据配置;
- AI平面(TODO):编排插件,以及实时分析和处理请求流量。
APISIX组件
**插件:**APISIX有70多个用Lua开发的内置插件,包括身份认证、限制速率、限制请求、安全性、日志、可观察性等。这些插件涵盖了用户在企业中可能遇到的所有功能。通过这些插件,用户可以将APISIX转换为其业务所需的各种网关。尽管受到Kong的启发,Apache APISIX插件的架构和设计是完全不同的。它支持热重新加载,所以你不必重新启动服务;它还减轻了编写代码的困难。
**路由:**APISIX使用自适应lua -rest -radixtree来组合路由的所有良好特征。lua -rest -radixtree单核可以达到每秒数百万次匹配。它支持Nginx的所有内置变量和自定义函数。
**模式:**Apache APISIX使用JSON模式,它为Lua/LuaJIT提供了JSON模式草案4、草案6和草案7验证器。这个JsonSchema负责API的描述,并促进个人与用户界面之间的合作。该验证标准几乎涵盖了C、Java、JS等主流语言。虽然APISIX使用JSON模式语义,但它并不局限于JSON。
**存储:**APISIX只依赖于etcd;因此,APISIX是为高可用性而设计的。它使用lua-resty-etcd从etcd获取配置。
与其他网关对比
- 它涵盖了Nginx的所有功能。
- 高性能:高性能是Apache APISIX的主要优势。
- Apache APISIX最重要的特性是它是完全动态的,包括路由、SSL证书、插件等。
- Hot-updated插件。在Apache APISIX内部,插件的构建类似于乐高积木。您可以轻松地修改,删除或添加插件,而无需重新启动服务。这使得在APISIX中控制外部工作负载变得简单和灵活得多。Apache APISIX还提供定制插件来处理业务边缘层中的定制处理。
- APISIX由两种重要的体系结构支持,X86和ARM64。它还支持OpenResty 和 Tengine运行环境,并在裸机上运行到公共云中的各种服务器上。
- APISIX提供多协议和多平台支持,如HTTP、TCP、UDP、HTTP到gRPC转码、Websocket、gRPC、Apache Dubbo和MQTT代理
- 支持版本控制。在使用APISIX时,如果新发布的版本出现错误,您可以轻松地退格旧版本,而不会在此过程中遇到任何缺点。
- 基于身份的零信任。外部身份验证可以通过新集成的Future实现。目前,实现零信任和使用外部身份验证提供者访问所有服务很简单。部署几个参数后,我们可以向API添加身份验证功能。
- 开源:Apache APISIX于2019年6月6日开源。从那时起,它在GitHub上获得了8700多颗星星和约287名贡献者。这是一个拥有2000多名成员的开发者社区,你可以通过Slack 或 Mailing list.加入社区。
APISIX快速开始
Apache APISIX有管理仪表板,可以方便管理员定义路由、Upstream和后端服务。要开始使用Apache APISIX,这里是快速入门步骤:
- 通过Docker安装Apache APISIX。
- 在Admin API的帮助下,为你的API网关创建一个路由、Upstream服务。
- 将路由与Upstream绑定。
- 通过Apache APISIX的Admin API验证结果。
简单的路由配置示例
假设你有一个后端服务运行在 http://localhost:8080
,想要通过 APISIX 对外暴露一个 API 接口,步骤如下:
- 启动 APISIX
首先确保已经安装并启动了 APISIX 服务(不同操作系统启动方式稍有不同,比如在 Linux 下可以通过对应的启动脚本启动)。 - 配置路由
可以使用 APISIX 的管理 API(通常通过http://127.0.0.1:9080/apisix/admin
访问,具体根据你的配置情况)或者使用 APISIX Dashboard(如果已经部署了可视化界面)来配置路由。
通过管理 API 使用 curl
命令示例如下:
curl -i http://127.0.0.1:9080/apisix/admin/routes/1 \
-H 'X-API-KEY: <your_api_key>' \
-H 'Content-Type: application/json' \
-X PUT -d '
{"uri": "/test-api","upstream": {"type": "roundrobin","nodes": {"localhost:8080": 1}}
}'
上述配置创建了一个路由,当访问 APISIX 服务的 /test-api
路径时,会将请求转发到后端 http://localhost:8080
服务上。其中 X-API-KEY
需要替换为你实际设置的 API 密钥。
使用插件示例(以限流插件为例)
假设要对某个 API 接口进行限流,限制每分钟最多允许 100 次请求访问,基于前面的路由配置,添加限流插件步骤如下:
- 了解限流插件配置参数
APISIX 的限流插件有多个配置参数,比如count
(限制的请求次数)、time_window
(时间窗口,单位秒)等。 - 配置带限流插件的路由
curl -i http://127.0.0.1:9080/apisix/admin/routes/1 \
-H 'X-API-KEY: <your_api_key>' \
-H 'Content-Type: application/json' \
-X PUT -d '
{"uri": "/test-api","upstream": {"type": "roundrobin","nodes": {"localhost:8080": 1}},"plugins": {"limit-count": {"count": 100,"time_window": 60,"key": "remote_addr","rejected_code": 429}}
}'
这里在路由配置中添加了 limit-count
插件,设置每分钟(time_window
为 60 秒)最多允许 100 次请求(count
),通过客户端 IP(key
为 remote_addr
)来区分不同请求源,当超过限制时返回 429
状态码表示请求过多被拒绝。
基于服务发现配置路由(以 Consul 为例)
如果后端服务众多且使用了服务发现机制(如 Consul),可以让 APISIX 自动发现后端服务并进行路由配置。
- 配置 APISIX 与 Consul 集成
修改 APISIX 的配置文件(通常是conf/config.yaml
),添加如下相关配置(示例,需根据实际情况调整):
discovery:consul:host: "127.0.0.1"port: 8500service_name: "your_service_name"tag: "your_service_tag"
这里配置了 Consul 的地址、端口以及要发现的服务名称和标签等信息。
- 创建基于服务发现的路由
curl -i http://127.0.0.1:9080/apisix/admin/routes/2 \
-H 'X-API-KEY: <your_api_key>' \
-H 'Content-Type: application/json' \
-X PUT -d '
{"uri": "/discovery-api","upstream": {"service_name": "your_service_name","type": "roundrobin"}
}'
这样 APISIX 会根据 Consul 中的服务信息自动找到对应的后端节点,并将访问 /discovery-api
路径的请求转发到相应的后端服务上。
这些只是 APISIX 开发中的基础示例,实际应用中还可以结合更多插件(如鉴权插件、日志插件等)以及应对更复杂的业务场景来灵活配置和开发。
相关文章:

Apache APISIX快速入门
本文将介绍Apache APISIX,这是一个开源API网关,可以处理速率限制选项,并且可以轻松地完全控制外部流量对内部后端API服务的访问。我们将看看是什么使它从其他网关服务中脱颖而出。我们还将详细讨论如何开始使用Apache APISIX网关。 在深入讨…...

【经典】制造供应链四类策略(MTS、MTO、ATO、ETO)细说
关注作者 制造供应链的牛鞭问题与复杂问题主要是从两个方面解决,一是同步化供应链消减从需求到供应的放大效应,二是供应链细分,针对不同的客户、不同的需求供应的匹配策略来应对复杂性,更好的满足客户并以最低的总成本来实现。 对…...

基于stm32的红外测温系统设计(论文+源码)
1总体方案设计 本课题为基于STM32的红外测温系统设计,在此将系统架构设计如图3.1所示, 整个系统包括STM32F103单片机,红外测温模块MLX90614,显示模块OLED12864,蜂鸣器以及按键等构成,在功能上,…...
前端WebSocket应用——聊天实时通信的基本配置
使用 WebSocket 实现实时通信的 Vue 应用 前言1. WebSocketService 类 1.1 类属性1.2 构造函数和连接初始化1.3 WebSocket 连接1.4 事件处理方法1.5 发送和关闭 WebSocket 消息1.6 状态查询与回调注册1.7 完整代码 2. 在 Vue 组件中使用 WebSocketService 2.1 定义 WebSocket …...

博弈论1:拿走游戏(take-away game)
假设你和小红打赌,玩“拿走游戏”,输的人请对方吃饭.... 你们面前有21个筹码,放成一堆;每轮你或者小红可以从筹码堆中拿走1个/2个/3个;第一轮你先拿,第二轮小红拿,你们两个人交替进行;拿走筹码堆…...
Debezium OracleValueConverters 分析
Debezium OracleValueConverters 分析 目录 1. 概述2. 核心功能3. 数据类型映射4. 特殊场景处理5. 最佳实践6. 使用示例7. 常见问题8. 扩展建议9. 总结1. 概述 OracleValueConverters 是 Debezium Oracle 连接器中负责数据类型转换的核心类,它继承自 JdbcValueConverters。主…...

WPF 消息循环(二)
们已经知道,win32/MFC/WinForm/WPF 都依靠消息循环驱动,让程序跑起来。 这里就介绍 WPF 中是如何使用消息循环来驱动程序的。 1. 背景 只听说过 Dispatcher ,哪里来的消息循环? WPF 启动运行堆栈: > WpfApp1.…...

ubuntu上更改ext4格式的硬盘为 windows的 NTFS 格式参考
1. ubuntu上安装 sudo apt-get install gparted 2. 参考如下,下面是转换后的样例。 3.windows上添加识别新硬盘参考 先在设备管理器中 找到下面 磁盘管理 如下:找到类似下面的磁盘2 查看相关信息 右键可以新建卷和格式化,下面是已经新建…...
Fastapi教程:使用 aioredis 连接池执行Redis 的高效异步操作
在构建高性能的 Web 应用时,缓存系统是一个至关重要的组成部分。Redis 是最常见的缓存系统之一,它提供了高效的存储与读取机制。然而,在与 Redis 进行频繁交互时,创建和销毁连接可能会成为瓶颈。为了优化这一问题,我们…...

配置mysqld(读取选项内容,基本配置),数据目录(配置的必要性,目录下的内容,具体文件介绍,修改配置)
目录 配置mysqld 读取选项内容 介绍 启动脚本 基本配置 内容 端口号 数据目录的路径 配置的必要性 配置路径 mysql数据目录 具体文件 修改配置时 权限问题 配置mysqld 读取选项内容 介绍 会从[mysqld] / [server] 节点中读取选项内容 优先读取[server] 虽然服务…...

docker 容器相互访问
目前采用 network 方式 1. 创建自定义网络 docker network create network-group 如下 2. 相互访问的容器更改(目前演示redis 以及netcore api 访问redis ) //redis 原有容器删除 跟之前区别就是加入 --network network-group docker run \ -p 6379:…...

算法1(蓝桥杯18)-删除链表的倒数第 N 个节点
问题: 给你一个链表,删除链表的倒数第 n 个节点,并且返回链表的头节点。 输入:head 1 -> 2 -> 3 -> 4 -> 5 -> null, n 2 输出:1 -> 2 -> 3 -> 5 -> null输入:head 1 ->…...
【PyTorch】动态调整学习率 torch.optim.lr_scheduler.StepLR 调度器
文章目录 1. torch.optim.lr_scheduler.StepLR 官方文档详解2. 使用示例2.1 官方提供使用示例2.2 自己写代码测试方法2.2.1 get_last_lr() 方法2.2.2 state_dict() 方法2.2.3 load_state_dict() 保存和加载调度器 3. 思考3.1 为什么需要state_dict()3.2 get_lr() 与 get_last_l…...
AIGC drug design 人工智能生成式药物设计:基于 GPT 的 SMILES 生成与应用
人工智能生成式药物设计:基于 GPT 的 SMILES 生成与应用 1. 人工智能生成模型:解密 GPT 的工作原理 目录 引言 1.1 背景介绍 1.2 人工智能生成模型的兴起 1.3 GPT 系列模型的地位与影响 GPT 模型概述 2.1 什么是 GPT 2.2 GPT 的发展历程 2.3 GPT 与其…...
Python面试常见问题及答案4
一、内存管理相关 问题:Python中的垃圾回收机制是如何工作的? 答案:Python主要使用引用计数来进行垃圾回收,当对象的引用计数为0时,该对象就会被垃圾回收器回收。此外,Python还有一个循环垃圾收集器来处理循…...

开启第二阶段---蓝桥杯
一、12.10--数据类型的范围及转化 今天是刚开始,一天一道题 对于这道题我想要记录的是Java中的整数默认是 int 类型,如果数值超出了 int 的范围,就会发生溢出错误。为了避免这个问题,可以将数字表示为 long 类型,方法…...

npm内存溢出
项目过大运行项目内存溢出 报错代码 运行内存溢出 increase-memory-limit ‘“node --max-old-space-size8192”’ 不是内部或外部命令,也不是可运行的程序 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of m…...

回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测
回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-BiGRU卷积神经网络结合双向门控循环单元多输入单输出回归预测预测效果基本介绍程序设计参考资料预测效果 基本介绍 CNN-BiGRU,即卷积神经网络(CNN)与双…...
Android系统卡启动问题排查
Android系统启动正常来说会涉及到如下几个过程: 引导加载程序(Bootloader)Linux内核(Kernel),负责硬件抽象、内存管理、进程管理、网络堆栈等init进程 init进程读取init.rc配置文件,用于启动各…...

STP(生成树协议)
STP的基本概念 概述 STP是一个用于局域网中消除环路的协议。运行该协议的设备通过彼此交互信息而发现网络中的环路,并对某些接口进行阻塞以消除环路。STP在网络中运行后会持续监控网络的状态,当网络出现拓扑变更时,STP能够感知并且进行自动…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...

el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...