Apache APISIX快速入门

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

在深入讨论这个主题之前,让我们先讨论一下API网关。

API网关

API网关是所有客户机的单一入口点。它们位于客户端和后端服务之间。通过调用多个后端服务,将来自客户机的API请求代理/路由到适当的服务。然后将结果聚合并返回给客户机。

  • 网关实现的难点
  1. 大多数API网关适合处理企业内网流量,无法承受数以万计的客户端请求。
  2. 一些网关依赖于关系数据库,这对弹性扩展具有挑战性。这些系统大多是老旧的,并且是在微服务出现之前开发的。

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 接口,步骤如下:

  1. 启动 APISIX
    首先确保已经安装并启动了 APISIX 服务(不同操作系统启动方式稍有不同,比如在 Linux 下可以通过对应的启动脚本启动)。
  2. 配置路由
    可以使用 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 次请求访问,基于前面的路由配置,添加限流插件步骤如下:

  1. 了解限流插件配置参数
    APISIX 的限流插件有多个配置参数,比如 count(限制的请求次数)、time_window(时间窗口,单位秒)等。
  2. 配置带限流插件的路由
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(keyremote_addr)来区分不同请求源,当超过限制时返回 429 状态码表示请求过多被拒绝。

基于服务发现配置路由(以 Consul 为例)

如果后端服务众多且使用了服务发现机制(如 Consul),可以让 APISIX 自动发现后端服务并进行路由配置。

  1. 配置 APISIX 与 Consul 集成
    修改 APISIX 的配置文件(通常是 conf/config.yaml),添加如下相关配置(示例,需根据实际情况调整):
discovery:consul:host: "127.0.0.1"port: 8500service_name: "your_service_name"tag: "your_service_tag"

这里配置了 Consul 的地址、端口以及要发现的服务名称和标签等信息。

  1. 创建基于服务发现的路由
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 开发中的基础示例,实际应用中还可以结合更多插件(如鉴权插件、日志插件等)以及应对更复杂的业务场景来灵活配置和开发。

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

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

相关文章

2024年12月11日Github流行趋势

项目名称&#xff1a;maigret 项目维护者&#xff1a;soxoj, kustermariocoding, dependabot, fen0s, cyb3rk0tik项目介绍&#xff1a;通过用户名从数千个站点收集个人档案信息的工具。项目star数&#xff1a;12,055项目fork数&#xff1a;870 项目名称&#xff1a;uv 项目维护…

使用pyinstaller打包pyqt的程序,运行后提示ModuleNotFoundError: No module named ‘Ui_main‘

环境&#xff1a;windowpython3.9pyqt6 使用pyqt UI编辑器生成了main.ui &#xff0c;main.ui编译成了Ui_main.py main.py 使用当前目录下的Ui_main.py。 打包过程没报错&#xff0c;运行报错。 错误如下: 解决方法&#xff1a;pyinstaller -Fw main.py --paths. 使…

Linux-音频应用编程

ALPHA I.MX6U 开发板支持音频&#xff0c;板上搭载了音频编解码芯片 WM8960&#xff0c;支持播放以及录音功能&#xff01;本章我们来学习 Linux 下的音频应用编程&#xff0c;音频应用编程相比于前面几个章节所介绍的内容、其难度有所上升&#xff0c;但是笔者仅向大家介绍 Li…

网络应用技术 实验八:防火墙实现访问控制(华为ensp)

目录 一、实验简介 二、实验目的 三、实验需求 四、实验拓扑 五、实验步骤 1、设计全网 IP 地址 2、设计防火墙安全策略 3、在 eNSP 中部署园区网 4、配置用户主机地址 5、配置网络设备 配置交换机SW-1~SW-5 配置路由交换机RS-1~RS-5 配置路由器R-1~R-3 6、配置仿…

低代码云组态支持draw.io导入导出

支持draw.io 官网&#xff1a;draw.io 绘图 进入官网绘制模型&#xff0c;完成后导出 导出 选择“文件“ > “导出“ > “SVG“,完成后即可进行导入 新建 在低代码平台新建一个“网络拓扑”模型&#xff0c;如下图所示&#xff1a; 设计 新建的“网络拓扑”模型进行…

SpringMVC全局异常处理

一、Java中的异常 定义&#xff1a;异常是程序在运行过程中出现的一些错误&#xff0c;使用面向对象思想把这些错误用类来描述&#xff0c;那么一旦产生一个错误&#xff0c;即创建某一个错误的对象&#xff0c;这个对象就是异常对象。 类型&#xff1a; 声明异常&#xff1…

QT自定义控件实践--滑动组件

概述 本篇文章,会逐步带您了解,如何自定义一个QT的滑动组件 操作步骤 选择合适的基类继承: 我们命名这个自定义控件为MySlipButton,继承自QWidget 添加成员变量: 根据滑动组件的特性,添加合适的成员变量,如当前值、最小值、最大值、滑块的位置等。 定义必要的方…

【零成本抽象】基本概念与在C++中的实现

零成本抽象概念是由 Bjarne Stroustrup 提出的&#xff0c;他在 1994 年的著作中就有相关设想&#xff0c;2016 年其在 C 大会登台演讲时&#xff0c;明确阐述了 C 中的 “零成本抽象” 这一理念。 一、零成本抽象概念 Bjarne Stroustrup提出的零成本抽象概念&#xff0c;是指…

基于遗传优化算法的带时间窗多车辆路线规划matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于遗传优化算法的带时间窗多车辆路线规划matlab仿真&#xff0c;通过输入各个节点坐标&#xff0c;以及出发点到节点的时间窗&#xff0c;来进行优化&#xff0…

HTML前端开发-- Iconfont 矢量图库使用简介

一、SVG 简介及基础语法 1. SVG 简介 SVG&#xff08;Scalable Vector Graphics&#xff09;是一种基于 XML 的矢量图形格式&#xff0c;用于在网页上显示二维图形。SVG 图形可以无限缩放而不会失真&#xff0c;非常适合用于图标、图表和复杂图形。SVG 文件是文本文件&#x…

网络安全——防火墙

基本概念 防火墙是一个系统&#xff0c;通过过滤传输数据达到防止未经授权的网络传输侵入私有网络&#xff0c;阻止不必要流量的同时允许必要流量进入。防火墙旨在私有和共有网络间建立一道安全屏障&#xff0c;因为网上总有黑客和恶意攻击入侵私有网络来破坏&#xff0c;防火…

高质量阅读微信小程序ssm+论文源码调试讲解

第2章 开发环境与技术 高质量阅读微信小程序的编码实现需要搭建一定的环境和使用相应的技术&#xff0c;接下来的内容就是对高质量阅读微信小程序用到的技术和工具进行介绍。 2.1 MYSQL数据库 本课题所开发的应用程序在数据操作方面是不可预知的&#xff0c;是经常变动的&…

Linux部署oceanbase

一、源码部署 1. 下载官网安装包 https://www.oceanbase.com/softwarecenter 2. 上传安装包并解压缩 #在/home目录下创建oceanbase文件夹 mkdir oceanbase cd oceanbase/ tar -xzf oceanbase-all-in-one-4.2.1_bp10_20241122.el7.x86_64.tar.gz 3. 安装 cd oceanbase-all-in…

【论文阅读】Fifty Years of the ISCA: A Data-Driven Retrospective

学习体会&#xff1a; ISCA会议近五十年文章分析, 了解论文热点方向, 处理器依旧是热点! AI和并行是大趋势, 做XPU相关目前来说还是热点~ 摘录自原文 摘录: 数据来源和分析方法&#xff1a; 作者收集了 ACM 数字图书馆中所有 ISCA 论文&#xff0c;并使用 DBLP、Google Schol…

设置docker镜像加速器

阿里云镜像中心 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 登陆阿里云账号后&#xff0c;可以看到镜像加速器的配置&#xff0c;如下图所示 参考文章地址 Docker 镜像库国内加速的几种方法_docker 加速-CSDN博客

Mysql体系架构剖析——岁月云实战笔记

1 体系架构 理论内容阅读了mysql体系架构剖析&#xff0c;其他的根据岁月云的实战进行记录。 1.1 连接层 mysql最上层为连接服务&#xff0c;引入线程池&#xff0c;允许多台客户端连接&#xff0c;主要工作&#xff1a;连接处理、授权认证、安全防护、管理连接等。 连接处理&a…

Midjourney基础教程-功能界面详解

基础入门教程&#xff1a; 一.Midjourney快速入门(3步画出你的第一张图&#xff09; 注&#xff1a; 1.平台为大家设置了自动翻译&#xff0c;可以直接写中文提示词&#xff0c;自动翻译成英文。当然要求更准确&#xff0c;大家可以先翻译成英 文在输入进来。 2.提示词如何去…

【git】--- 通过 git 和 gitolite 管理单仓库的 SDK

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【git】--- 通过 git 和 gitolite 管理单仓库的 SDK 开发环境一、安装配置 gitolite二…

stm32 BOOT0与BOOT1设置问题

BOOT00时&#xff0c;不论 BOOT1等于多少&#xff0c; 都是从用户闪存启动的&#xff0c;也就是正常的工作模式&#xff1b;//一般我们调试用的就是这种&#xff0c;boot00&#xff0c;boot1悬空&#xff0c;悬空是指可以是0&#xff0c;也可以是1&#xff1b; BOOT01&#x…

TikTok无网络黑屏原因及解决方法

TikTok运营中最常见的问题就是出现黑屏和“Something went wrong”“No internet connection”等字样&#xff0c;这时TikTok往往已经无法正常使用&#xff0c;大大影响运营流程。那么这种情况是什么原因&#xff0c;又有什么解决办法&#xff1f; 一、无网络黑屏原因 1.‌地理…