『Apisix入门篇』从零到一掌握Apache APISIX:架构解析与实战指南

2024-03-26 06:36

本文主要是介绍『Apisix入门篇』从零到一掌握Apache APISIX:架构解析与实战指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


📣读完这篇文章里你能收获到:

  • 🌐 深入Apache APISIX架构: 从Nginx到OpenResty,再到etcd,一站式掌握云原生API网关的构建精髓,领略其层次化设计的魅力。

  • 🔌 核心组件全解析: 路由、上游、服务、消费者、插件…这些不再是抽象的概念,而是你API管理中的强大工具。

  • 🛠 路由配置实操: 通过Admin API,轻松创建上游、配置路由,实现请求的精准转发,让理论与实践完美结合。

  • 🌟 APISIX的独特优势: 动态路由、热插拔插件、云原生兼容性…这些特性让APISIX在API网关领域独树一帜。

  • 🔧 常用命令速查: 从启动到停止,从重启到版本检查,一系列APISIX和etcd命令,让你的运维工作更加得心应手。

请添加图片描述

文章目录

  • 一、Apisix介绍
    • 1.1 基础架构剖析
    • 1.2 关键技术要素
    • 1.3 产品优势
  • 二、路由配置(入门初体验)
    • 2.1 Admin API应用
    • 2.2 Dashboard可视化操作
  • 三、Apisix常用命令
    • 3.1 Apisix命令
    • 3.2 Apisix-Dashboard命令
    • 3.3 ETCD命令

一、Apisix介绍

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

1.1 基础架构剖析

APISIX 的核心架构采用层次化设计

  1. Nginx:底层依赖 Nginx 提供高效的网络通信和数据传输;
  2. OpenResty:上层则通过 OpenResty 封装的 Lua 环境,实现灵活的逻辑控制和业务扩展。
  3. etcd:在配置管理方面,APISIX 利用 etcd 作为分布式键值存储系统,使得所有节点上的配置能够实时同步并动态更新,从而确保整个服务集群具备高度的弹性和一致性。
  4. 插件系统:APISIX 提供了一个强大的插件生态系统,这些插件可自由组合以满足不同场景下的功能需求,如身份验证(Key Auth、JWT、Basic Auth)、限流限速、熔断、灰度发布、A/B 测试等。

企业微信截图_17103154314004.png

1.2 关键技术要素

接下来我们来了解下 APISIX 的一些功能。在了解之前我们需要对 APISIX 的几个主要概念和组件简单了解下:

  • **路由(Routes):**定义了如何将不同的请求映射到指定的上游服务,可以根据请求的方法、路径、头部、查询参数等进行精确匹配。
  • **上游(Upstream):**代表一组后端服务实例,用于负载均衡,可以通过多种负载均衡策略(如轮询、权重、一致性哈希等)分配请求。
  • 服务(Service): 是一组提供相同功能的后端服务器实例的集合,通常对应着微服务架构中的一个具体服务。它通常与上游服务抽象是一一对应的,Route 与 Service 之间,通常是 N:1 的关系。
  • **消费者(Consumer):**需要与用户认证配合才可以使用。消费者在访问服务时,API 网关可以根据预先设定的规则对消费者的请求进行验证和过滤。。当不同的消费者请求同一个 API 时,APISIX 会根据当前请求的用户信息,对应不同的 Plugin 或 Upstream 配置。
    • 如果 Route、Service、Consumer 和 Plugin Config 都绑定了相同的插件,只有消费者的插件配置会生效。
    • 插件配置的优先级由高到低的顺序是:Consumer > Route > Plugin Config > Service。
  • **插件:**插件是 APISIX 的核心功能单元,每个插件可以实现特定的功能,如认证、限流、缓存、日志记录等。
  • **Admin API:**APISIX 提供了强大的 Admin API 和 Dashboard 供用户使用,Admin API 是一组用于配置 Apache APISIX 路由、上游、服务、SSL 证书等功能的 RESTful API。可以通过 Admin API 来获取、创建、更新以及删除资源。同时得益于 APISIX 的热加载能力,资源配置完成后 APISIX 将会自动更新配置,无需重启服务。

1.3 产品优势

APISIX 基于 Nginx 和 etcd,与传统 API 网关相比,APISIX 具有动态路由和热加载插件功能,避免了配置之后的 reload 操作,同时 APISIX 支持 HTTP(S)、HTTP2、Dubbo、QUIC、MQTT、TCP/UDP 等更多的协议。而且有 Dashboard提供强大而灵活的界面。同样也提供了丰富的插件支持功能,而且还可以让用户自定义插件。
主要具有以下几个优势:

  • 高性能:得益于 Nginx 的高性能内核和 LuaJIT 的快速脚本执行,APISIX 即使在大规模并发环境下也能保持优异的性能指标,低延迟、高吞吐量,即便启用大量插件也无损其响应速度。
  • **云原生兼容性:**APISIX 无缝集成于 Kubernetes 等容器编排平台,支持服务发现、自动注入标签等云原生特性。
  • 全动态能力:APISIX 支持实时从 etcd 获取最新配置,并立即生效。
  • 热插拔插件:无需停服即可添加、移除或修改插件配置,增强服务运维灵活性。
  • 易用性:APISIX 支持与以下工具和平台集成:HashiCorp Vault、Zipkin、Apache SkyWalking、Consul、Nacos、Eureka。通过 APISIX Dashboard,运维人员可以通过友好且直观的 UI 配置 APISIX。
  • 多语言插件支持:APISIX 支持多种开发语言进行插件开发,开发人员可以选择擅长语言的 SDK 开发自定义插件。

二、路由配置(入门初体验)

2.1 Admin API应用

下文中的的 X-API-KEY 的值在 APISIX 的配置文件中 apisix_config.yaml 中有配置,位于 deployment.admin.admin_key 下面。
image.png
Apache APISIX 使用 routes 来提供灵活的网关管理功能,在一个请求中,routes 包含了访问路径和上游目标等信息。
目标:创建一个路由,将客户端的请求转发至 httpbin.org(这个网站能测试 HTTP 请求和响应的各种信息)。

  1. 创建一个_upstream_指向 httpbin.org
curl http://127.0.0.1:9180/apisix/admin/upstreams  \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"id":"upstream-demo1-id","name": "upstream-demo1",	"type":"roundrobin",					"nodes": [										{"host": "httpbin.org","port": 80,"weight": 1}]
}'

image.png

  1. 创建一个路由routes,绑定以上创建的upstream
curl "http://127.0.0.1:9180/apisix/admin/routes" \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{"id":"routes-demo1-id","name": "routes-demo1",			"methods": ["GET","POST"],	"uris": ["/ip","/get"] ,		"upstream_id": "upstream-demo1-id"			
}' 

image.png

  1. 发送一个请求进行验证,访问:http://127.0.0.1:9080/ip

image.png

2.2 Dashboard可视化操作

Apache APISIX 使用 routes 来提供灵活的网关管理功能,在一个请求中,routes 包含了访问路径和上游目标等信息。
目标:创建一个路由,将客户端的请求转发至 httpbin.org(这个网站能测试 HTTP 请求和响应的各种信息)。

  1. 创建一个_upstream_指向 httpbin.org
  • 点击上游->创建->填写目标节点信息->下一步->提交

image.png
image.png

  1. 创建一个路由routes,绑定以上创建的upstream
  • 点击路由->创建->填写匹配路径->填写HTTP匹配方法->下一步->选择上游服务->下一步->提交

image.png
image.png
image.png

  1. 发送一个请求进行验证,访问:http://127.0.0.1:9080/ip

image.png

三、Apisix常用命令

3.1 Apisix命令

  1. 启动apisix服务
apisix start
  1. 停止apisix服务
apisix stop
  1. 优雅地停止apisix服务
apisix quit
  1. 重启apisix服务
apisix restart
  1. 重新加载apisix服务
apisix reload
  1. 初始化本地nginx.conf
apisix init
  1. 初始化etcd的数据
apisix init_etcd
  1. 测试生成的nginx.conf
apisix test
  1. 显示apisix的版本信息
apisix version
  1. 显示apisix帮助信息
apisix help

3.2 Apisix-Dashboard命令

  1. 启动apisix-dashboard服务
systemctl start apisix-dashboard
  1. 停止apisix-dashboard服务
systemctl stop apisix-dashboard
  1. 重启apisix-dashboard服务
systemctl restart apisix-dashboard

3.3 ETCD命令

  1. 启动etcd
nohup sudo /usr/bin/etcd --data-dir=/data/etcd > /tmp/etcd.log 2>&1 &
  1. 停止etcd
# 查找etcd进程的PID
ps aux | grep etcd# 假设找到的PID是12345,使用kill命令停止etcd
sudo kill 12345
  1. 重启etcd : 先停止再启动
# 1. 查找etcd进程的PID
ps aux | grep etcd# 2. 假设找到的PID是12345,使用kill命令停止etcd
sudo kill 12345# 3. 启动
nohup sudo /usr/bin/etcd --data-dir=/data/etcd > /tmp/etcd.log 2>&1 &# 4. 重新加载apisix
sudo apisix reload

这篇关于『Apisix入门篇』从零到一掌握Apache APISIX:架构解析与实战指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/847576

相关文章

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目