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.mzph.cn/news/889638.shtml

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

相关文章

项目15:简易扫雷--- 《跟着小王学Python·新手》

项目15&#xff1a;简易扫雷 — 《跟着小王学Python新手》 《跟着小王学Python》 是一套精心设计的Python学习教程&#xff0c;适合各个层次的学习者。本教程从基础语法入手&#xff0c;逐步深入到高级应用&#xff0c;以实例驱动的方式&#xff0c;帮助学习者逐步掌握Python的…

HTML+CSS+Vue3的静态网页,免费开源,可当作作业使用

拿走请吱一声&#xff0c;点个关注吧&#xff0c;代码如下&#xff0c;网页有移动端适配 HTML <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…

Python的3D可视化库【vedo】2-1 (plotter模块) 绘制器的使用

文章目录 1 相关用语及其关系2 Plotter类的基本使用3 Plotter类具体的初始化设置3.1 全部初始化参数3.2 使用不同的axes vedo是Python实现的一个用于辅助科学研究的3D可视化库。 vedo的plotter模块封装了绘制器类Plotter。 Plotter实例可以用于显示3D图形对象、控制渲染器行为、…

职业院校人工智能实验室解决方案

随着人工智能技术的迅猛发展&#xff0c;企事业单位对具备高素质技术应用能力的人才需求愈发迫切&#xff0c;目前人工智能已经逐步从感知理解阶段转变为生成创造阶段&#xff0c;可以为各行各业提供多维的智能化应用服务。2024年的《政府工作报告》中首次提出了“人工智能”行…

steel-browser - 专为AI应用构建的开源浏览器自动化 API

Steel是一个开源浏览器 API&#xff0c;可以轻松构建与 Web 交互的 AI 应用程序和代理。您无需从头开始构建自动化基础设施&#xff0c;而是可以专注于 AI 应用程序&#xff0c;而 Steel 会处理复杂性。 2300 Stars 99 Forks 4 Issues 5 贡献者 Apache-2.0 License TypeScript …

ElasticSearch - 使用 Composite Aggregation 实现桶的分页查询

文章目录 官方文档概述Composite Aggregation 概述示例&#xff1a;基本分页查询分页&#xff1a;获取下一页结果使用场景注意事项 官方文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-bucket-composite-aggregation.html#_pagin…

基于Python+Sqlite3实现的搜索和推荐系统

基于Python实现的搜索和推荐系统 一、引言 伴随着科技的不断进步&#xff0c;互联网&#xff0c;万维网的不断发展。我们越来越热爱万维网&#xff0c;也欣赏他的发展方式。20世纪90年代初&#xff0c;万维网还只是一个将文档联系起来的简单网络。如今&#xff0c;他已经成为…

Oracle:VARCHAR2(100)与VARCHAR2(100 CHAR)的差异导致的报错

目录 >> 问题背景&#xff1a;>> 阴差阳错&#xff1a;>> 问题出现&#xff1a;>> 问题排查&#xff1a;>> 知识点&#xff1a;>> 问题复盘&#xff1a;>> 问题拓展&#xff1a; >> 问题背景&#xff1a; Oracle下&#xff1…

右玉200MW光伏电站项目 微气象、安全警卫、视频监控系统

一、项目名称 山西右玉200MW光伏电站项目 微气象、安全警卫、视频监控系统 二、项目背景&#xff1a; 山西右玉光伏发电项目位于右玉县境内&#xff0c;总装机容量为200MW&#xff0c;即太阳能电池阵列共由200个1MW多晶硅电池阵列子方阵组成&#xff0c;每个子方阵包含太阳能…

最短路----Dijkstra算法详解

简介 迪杰斯特拉&#xff08;Dijkstra&#xff09;算法是一种用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。它是由荷兰计算机科学家艾兹格迪科斯彻&#xff08;Edsger Dijkstra&#xff09;在1956年提出的。Dijkstra算法适用于处理带有非负权重的图。迪杰斯特拉…

从零开始学docker(五)-可用的docker镜像

最近docker镜像都不能访问&#xff0c;目前亲测可用的docker镜像可用&#xff0c;并拉取mysql测试完成。 [缺点] docker search 查不到镜像的索引列表&#xff0c;只能手动查询索引目录&#xff08;解决方案在最后&#xff09;。 linux服务器vim打开镜像文件daemon.json vim /e…

安卓获取所有可用摄像头并指定预览

在Android设备中&#xff0c;做预览拍照的需求的时候&#xff0c;我们会指定 CameraSelector DEFAULT_FRONT_CAMERA前置 或者后置CameraSelector DEFAULT_BACK_CAMERA 如果你使用的是平板或者工业平板&#xff0c;那么就会遇到多摄像头以及外置摄像头问题&#xff0c;简单的指…

【报错记录】Ubuntu22.04解决开机卡在 /dev/sda5 : clean , *files , *blocks

一个愿意伫立在巨人肩膀上的农民...... 一、错误现象 本人的电脑安装Windows10和Ubuntu22.04双系统&#xff0c;一次训练中电脑死机无法开机&#xff0c;重启之后便出现如下错误&#xff0c;在网上寻找过很多方法均无效&#xff0c;在root下禁用了samba服务&#xff0c;也无济…

利用代理IP爬取Zillow房产数据用于数据分析

引言 最近数据分析的热度在编程社区不断攀升&#xff0c;有很多小伙伴都开始学习或从事数据采集相关的工作。然而&#xff0c;网站数据已经成为网站的核心资产&#xff0c;许多网站都会设置一系列很复杂的防范措施&#xff0c;阻止外部人员随意采集其数据。为了解决这个问题&a…

Kafka系列教程 - Kafka 生产者 -2

1. 生产者简介 不管是把 Kafka 作为消息队列系统、还是数据存储平台&#xff0c;总是需要一个可以向 Kafka 写入数据的生产者和一个可以从 Kafka 读取数据的消费者&#xff0c;或者是一个兼具两种角色的应用程序。 使用 Kafka 的场景很多&#xff0c;诉求也各有不同&#xff…

语音芯片赋能可穿戴设备:开启个性化音频新体验

在科技日新月异的今天&#xff0c;语音芯片与可穿戴设备的携手合作&#xff0c;正引领我们步入一个前所未有的个性化音频时代。这一创新融合&#xff0c;用户可以享受到更加个性化、沉浸式的音频体验。下面将详细介绍语音芯片与可穿戴设备合作的优点和具体应用。 1. 定制化音效…

1. Flink自定义Source

一. Source 简介 DataStream是Flink的低级API&#xff0c;用于进行数据的实时处理&#xff0c;Flink编程模型分为Source、Transformation、Sink三个部分&#xff0c;如下图所示。 默认Flink提供了大量的内置Source&#xff0c;常见的Source如下&#xff1a; 基于文件的Sour…

Yolov8界面可视化

本教程使用的是Pyside6 1、安装PySide6模块 pip install pyside6 安装完成之后&#xff0c;会有一个designer.exe可执行文件&#xff0c;打开之后&#xff0c;我们可以通过拖拉拽的方式来布局我们的界面。 designer.exe文件位置&#xff0c;一般位于当前虚拟环境下面的路径…

谷粒商城—分布式高级①.md

1. ELASTICSEARCH 1、安装elastic search dokcer中安装elastic search (1)下载ealastic search和kibana docker pull elasticsearch:7.6.2 docker pull kibana:7.6.2(2)配置 mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "h…

系统性能优化

一、概述 性能优化的目标&#xff1a;是提高系统或应用程序的响应时间、吞吐量、cpu、内存、磁盘IO、网络、流量、JVM、Tomcat、DB等方面的性能指标。 性能优化需要有一些技巧&#xff1a;对于整个产品或项目而言&#xff0c;比如可以从前端优化、后端优化、架构优化、高并发…