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

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

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

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

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

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

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

文章目录

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

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 下面。

Apache APISIX 使用 routes 来提供灵活的网关管理功能,在一个请求中,routes 包含了访问路径和上游目标等信息。

目标:创建一个路由,将客户端的请求转发至 httpbin.org(这个网站能测试 HTTP 请求和响应的各种信息)。

  1. 创建一个_upstream_指向 httpbin.org
shell 复制代码
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
      }
    ]
}'
  1. 创建一个路由routes,绑定以上创建的upstream
shell 复制代码
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"			
}' 
  1. 发送一个请求进行验证,访问:http://127.0.0.1:9080/ip

2.2 Dashboard可视化操作

Apache APISIX 使用 routes 来提供灵活的网关管理功能,在一个请求中,routes 包含了访问路径和上游目标等信息。

目标:创建一个路由,将客户端的请求转发至 httpbin.org(这个网站能测试 HTTP 请求和响应的各种信息)。

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


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



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


三、Apisix常用命令

3.1 Apisix命令

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

3.2 Apisix-Dashboard命令

  1. 启动apisix-dashboard服务
shell 复制代码
systemctl start apisix-dashboard
  1. 停止apisix-dashboard服务
shell 复制代码
systemctl stop apisix-dashboard
  1. 重启apisix-dashboard服务
shell 复制代码
systemctl restart apisix-dashboard

3.3 ETCD命令

  1. 启动etcd
shell 复制代码
nohup sudo /usr/bin/etcd --data-dir=/data/etcd > /tmp/etcd.log 2>&1 &
  1. 停止etcd
shell 复制代码
# 查找etcd进程的PID
ps aux | grep etcd

# 假设找到的PID是12345,使用kill命令停止etcd
sudo kill 12345
  1. 重启etcd : 先停止再启动
shell 复制代码
# 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
相关推荐
W Y1 小时前
【架构-37】Spark和Flink
架构·flink·spark
Gemini19951 小时前
分布式和微服务的区别
分布式·微服务·架构
Dann Hiroaki10 小时前
GPU架构概述
架构
茶馆大橘10 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
coding侠客11 小时前
揭秘!微服务架构下,Apollo 配置中心凭啥扮演关键角色?
微服务·云原生·架构
lipviolet12 小时前
架构系列---高并发
架构
Phodal12 小时前
架构赋能 AI:知识工程推动下的软件架构数字化
人工智能·架构
曹申阳14 小时前
2. JVM的架构模型和生命周期
jvm·架构
车载诊断技术15 小时前
电子电气架构 --- 整车控制系统
网络·架构·汽车·soa·电子电器架构
一叶飘零_sweeeet15 小时前
Dubbo 构建高效分布式服务架构
分布式·架构·dubbo