文章目录

  • 引言:APISIX 概述
      • 基于Nginx构建的原因
      • 基于etcd构建的原因
  • 架构图示
  • 架构分层解析
        • 管理层:人机交互与配置入口
        • 控制层:配置管理与集群协调
        • 数据面:请求处理与流量转发
        • 说明:关于OpenRestry

引言:APISIX 概述

APISIX(Apache APISIX)是一个高性能、可扩展的云原生 API 网关,基于 Nginx 和 etcd 构建。

作为微服务架构的流量入口,它提供了动态路由、负载均衡、服务发现、认证授权、可观测性等核心能力。

其设计遵循"云原生"和"可扩展"理念,支持热加载、动态配置和插件化架构,已成为 Apache 顶级项目,被广泛应用于金融、电商、互联网等领域的关键业务场景。

Apisix 基于 Nginx 和 etcd 构建,主要有以下原因:

基于Nginx构建的原因

  • 高性能:Nginx 是一款基于 C 语言开发的高性能服务器软件,其底层开发经过了深度优化,在处理高并发连接时表现出色,能够同时处理超过十万个并发连接的请求,性能达到极致,并且在大规模应用中得到了充分有效的验证。Apisix 基于 Nginx 的网络层,可以利用 Nginx 的高性能优势,轻松应对高流量的 API 请求。
  • 事件驱动模型:Nginx 采用事件驱动的异步非阻塞模型,这种模型使得 Nginx 在处理大量并发请求时,能够避免线程切换带来的开销,提高资源利用率和响应速度。Apisix 基于 Nginx 内核的事件驱动模型,单进程即可支持 10 万+并发连接,能够高效地处理各种 API 流量。
  • 可扩展性:通过 Lua 和 LuaJIT 技术,Apisix 可以在 Nginx 的基础上进行灵活扩展。Lua 语言具有简洁高效、易于学习和扩展的特点,开发人员可以方便地编写 Lua 脚本,实现各种自定义的功能,如流量控制、日志记录、安全检测、故障注入等插件,同时支持用户编写自定义插件来对数据面进行扩充。

基于etcd构建的原因

  • 分布式配置管理:etcd 是一个高可用的分布式键值(key - value)存储系统,内部采用 raft 协议作为一致性算法,能够保证数据在分布式环境下的一致性和可靠性。Apisix 利用 etcd 来存储和同步网关的配置数据,管理员通过 admin API 或者 dashboard 对配置进行修改后,etcd 可以在毫秒级别内将配置变更通知到所有的数据面节点,确保整个集群的配置能够及时、一致地更新。
  • 服务发现与注册:由于 Apisix 使用 etcd 作为配置中心,在与其他组件配合时非常方便,可以直接将 etcd 当作服务注册发现中心来使用,支持服务的注册和发现功能。当然,Apisix 同时也支持 Consul、Eureka、Nacos 等其他服务注册中心,以满足不同用户的需求。
  • 配置灵活性与动态性:etcd 的 watch 机制允许客户端监控特定 key 的变化。在 Apisix 中,通过 etcd 的 watch 功能,各个节点可以实时感知配置的变化,并及时更新自身的配置,实现动态路由、动态插件配置等功能,无需手动重启或重新加载配置,大大提高了网关的灵活性和可管理性。

架构图示

数据面
控制层
管理层
RESTful请求
配置更新
Watch机制
Watch机制
Watch机制
请求处理
请求处理
请求处理
插件调用
插件调用
插件调用
流量治理/安全防护
OpenResty引擎
OpenResty引擎
OpenResty引擎
Plugin System
上游服务集群
etcd集群
APISIX Core节点1
APISIX Core节点2
APISIX Core节点N
Admin API
Dashboard

架构分层解析

管理层:人机交互与配置入口
  • Dashboard(可视化界面)

    • 提供图形化操作面板,支持路由、服务、插件的可视化配置
    • 集成监控看板,展示流量指标、错误率、插件运行状态等数据
    • 支持多租户权限管理和操作审计
  • Admin API(管理接口)

    • 基于RESTful设计的API接口,支持配置的增删改查
    • 具备灰度发布能力,可按版本、权重控制配置发布范围
    • 支持Webhook回调,可与CI/CD流程集成实现自动化部署
控制层:配置管理与集群协调
  • etcd集群(分布式配置中心)
    • 采用Raft共识算法保证配置强一致性,支持多节点高可用
    • 存储三类核心数据:
      • 路由规则(URI匹配规则、负载均衡策略)
      • 插件配置(限流策略、认证方式、日志格式)
      • 服务节点信息(上游服务IP:Port、健康检查状态)
    • 通过Watch机制实现配置变更的毫秒级推送,无需重启节点
数据面:请求处理与流量转发
  • APISIX Core(请求处理引擎)

    • 基于OpenResty构建,采用多worker进程模型(每个worker独立处理请求)
    • 核心流程:
      1. 接收客户端请求并解析URI
      2. 根据etcd配置执行路由匹配
      3. 按顺序调用插件链处理请求
      4. 转发请求到上游服务并处理响应
    • 性能优势:单节点可支撑10万+并发连接,CPU多核利用率达90%以上
  • Plugin System(插件系统)

    • 模块化设计,100+官方插件覆盖三大场景:
      • 流量治理(限流、熔断、重试、负载均衡)
      • 安全防护(JWT认证、IP黑白名单、SQL注入防护)
      • 可观测性(Prometheus监控、Skywalking追踪、Access Log记录)
    • 支持自定义插件开发,通过Lua脚本扩展功能,无需修改核心代码
说明:关于OpenRestry

(1)基于 Nginx 的事件驱动模型

  • 多进程架构:
    • Master-Worker 模型
      • Master 进程:负责读取配置、管理 Worker 进程(如启动、重启、优雅退出)。
      • Worker 进程:处理实际请求,多个 Worker 进程通过共享内存实现数据交换。
    • 异步非阻塞 I/O
      • 每个 Worker 进程采用 epoll/kqueue 等事件驱动机制,单进程可处理数万并发连接。
      • 请求处理过程中不阻塞线程,而是通过回调函数处理响应。

(2)请求处理阶段:
Nginx 将请求处理分为多个阶段(Phase),OpenResty 可在这些阶段中插入 Lua 代码:

  1. post-read:读取请求头后
  2. server-rewrite:服务器级别重写
  3. find-config:查找匹配的 location
  4. rewrite:location 级别重写
  5. access:访问控制(如权限验证)
  6. content:内容生成(核心处理阶段)
  7. log:日志记录
Lua脚本执行
客户端请求
Master进程
Worker进程1
Worker进程2
事件循环
处理请求阶段
LuaJIT引擎

(3)LuaJIT 与 Nginx 的深度集成

  • LuaJIT 引擎:

    • 即时编译(JIT):将 Lua 代码编译为机器码,性能接近 C 语言。
    • 协程支持:Lua 协程(coroutine)实现轻量级线程,避免阻塞 Worker 进程。
  • ngx_lua 模块:
    OpenResty 通过 ngx_lua 模块将 Lua 环境嵌入 Nginx,提供以下核心功能:

    • 请求上下文:通过 ngx 全局对象访问请求信息(如 ngx.varngx.req)。
    • 非阻塞 I/O:支持异步访问数据库、缓存(如 Redis、MySQL)。
    • 共享内存:通过 ngx.shared.DICT 实现 Worker 间数据共享。
    • 定时器:支持异步定时任务(如 ngx.timer.at)。

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

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

相关文章

【AI作画】第3章 LORA加载器

目录 LORA加载器 管道信息 ​编辑 ​编辑 ​编辑 lora模型的串接 作品集 LORA加载器 前面我们已经分析过节点目录了,现在我们来看一下LORA加载器。我们进行图片渲染,一般都需要LORA模型的。 首先,我们“鼠标右键——添加节点——…

Xilinx XC7A12T‑1CPG238I Artix‑7 FPGA

XC7A12T‑1CPG238I 以其独特的性能与封装组合,成为诸多工程师的首选方案。下面,我们从多个维度对这款芯片做深入剖析。 一、产品定位与封装特点 XC7A12T‑1CPG238I 属于赛灵思(Xilinx)28 nm Artix‑7 系列中的入门级型号&#x…

如何利用 Java 爬虫获得微店商品详情:实战指南

在电商领域,微店作为众多商家的线上销售渠道之一,其商品详情数据对于市场分析、竞品研究和商业决策具有重要价值。Java 爬虫技术可以帮助我们高效地获取这些数据。本文将详细介绍如何使用 Java 编写爬虫,获取微店商品详情。 一、准备工作 &…

【Bug】MAUI自定义弹窗在IOS有异常背景

文章目录 问题问题代码原因解决处理Bug的具体步骤 问题 自定义弹窗有异常背景 问题代码 <mct:Popup xmlns"http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x"http://schemas.microsoft.com/winfx/2009/xaml"xmlns:converters"clr-names…

C语言酒店管理系统:完整源码与深度解析

酒店管理系统通过自动化流程提升酒店运营效率。本系统采用C语言开发&#xff0c;基于模块化设计思想&#xff0c;包含以下核心功能&#xff1a; ​房间管理​&#xff1a;初始化房间信息、查看房间状态​预订管理​&#xff1a;按时间段预订房间、查询预订记录​入住管理​&am…

基于Gold-YOLO的聚合-分发机制改进YOLOv8教程

1. 引言 本文将详细介绍如何将Gold-YOLO的核心创新——聚合-分发(Gather-and-Distribute, GD)机制集成到YOLOv8架构中。Gold-YOLO是一种创新的目标检测架构,通过独特的信息融合策略实现了低延迟和高准确性的理想平衡。 1.1 Gold-YOLO核心特性 Gold-YOLO的主要创新点包括…

blob 的使用 文件下载 图片预览 大文件分片上传

1. 文件下载 function downloadFile(content, filename, type) {const blob new Blob([content], { type });const url URL.createObjectURL(blob);const a document.createElement(a);a.href url;a.download filename;a.click();URL.revokeObjectURL(url); }// 使用示例…

FlinkCDC-Hudi数据实时入湖原理篇

1.Hudi应用场景 面对海量数据开发场景&#xff0c;一种支持存储多种原始数据格式、多种计算引擎、高效的元数据统一管理的存储方式能极大的提高开发效率。所以在选择技术选型的时候&#xff0c;这种存储方式有以下几个特点&#xff1a; 存储原始数据&#xff0c;这些原始数据来…

sqldeveloper 创建新用户并访问其他空间特定表和视图

创建用户 右键选择创建用户 1.给用户取一个名字 VIEW_TEST 2.设置密码 123456&#xff08;建议用其他&#xff09; 3.选择表空间和临时空间 选择角色 CONNECT 连接角色 选择系统权限 然后点击应用就可以了 然后在用户哪里就能看到这个用户了 登录用户 出现成功就说明可以…

家用电器3d扫描逆向建模中科米堆手持式蓝光三维扫描仪数字建模

从厨房里的冰箱、微波炉&#xff0c;到客厅中的电视、空调&#xff0c;再到卧室的加湿器、空气净化器等&#xff0c;家用电器极大地提升了我们的生活品质。 家电市场的竞争日益激烈&#xff0c;产品更新换代速度加快&#xff0c;如何快速、精准地获取现有家电产品的三维数据&a…

从“数据困境”到“数据生态”:DaaS重塑三甲医院医疗数据治理

从“数据困境”到“数据生态”&#xff1a;DaaS如何重塑三甲医院医疗数据治理 医疗数据治理的现状剖析 在智慧医疗蓬勃发展的当下&#xff0c;三甲医院凭借其丰富的临床资源&#xff0c;积累了海量、多维度的医疗数据。这些数据犹如一座蕴藏着巨大价值的富矿&#xff0c;涵盖了…

LVS +Keepalived 高可用群集

目录 前言一. Keepalived 双机热备基础知识1. Keepalived 概述及安装&#xff08;1&#xff09;Keepalived 的热备方式&#xff08;2&#xff09;Keepalived 的安装与服务控制 2. 使用Keepalived 实现双机热备&#xff08;1&#xff09;主服务器的配置&#xff08;2&#xff09…

【Go语言基础】对齐边界与内存填充

文章目录 一、内存对齐的核心概念二、Go语言的内存对齐规则三、内存对齐示例示例1&#xff1a;字段顺序影响对齐示例2&#xff1a;指针与切片的对齐 四、如何查看内存对齐&#xff1f;五、内存对齐的优化建议六、总结&#xff1a;内存对齐的核心要点 在计算机科学中&#xff0c…

网络核心 - CNI、Service 与 Ingress/Gateway API 解析

网络核心 - CNI、Service 与 Ingress/Gateway API 解析 Kubernetes 的强大之处在于它极大地简化了容器化应用的部署和管理,但其网络模型的灵活性和复杂性也常常让初学者感到困惑。作为 SRE,我们需要拨开迷雾,理解流量在 K8s 集群内部以及进出集群时,到底是如何流转的。 Po…

20.jsBridge多页面交互与原生事件监听冲突问题

一、问题描述 • 安卓原生页面调起 H5A 页面&#xff1b; • H5A 页面跳转到 H5B 页面&#xff1b; • 在 H5B 页面点击“附件上传”&#xff0c;通过 JS Bridge 调用安卓的附件上传功能&#xff0c;弹出附件弹窗&#xff1b; • 然后 返回 到 H5A 页面&#xff0c;附件上传弹窗…

产品经理的自我救赎

思考自己的商业模式 很多人可能会奇怪&#xff0c;作为一个产品经理&#xff0c;为什么要思考商业模式呢&#xff1f;这个问题有点绕&#xff0c;但看完这一小节肯定大家就明白了。 首先&#xff0c;我们做产品经理&#xff0c;一般来说是为了挣钱&#xff0c;从挣一个月的钱…

DeepSeek提示词指南:从基础到高阶的全面解析

引言 在人工智能技术迅猛发展的今天&#xff0c;DeepSeek作为新一代智能大模型&#xff0c;正在为各行各业带来革命性的变革。而要充分发挥DeepSeek的潜力&#xff0c;掌握其提示词的使用技巧是关键。本指南旨在为用户提供一份全面、系统、实用的DeepSeek提示词指南&#xff0…

Linux tail 命令

Linux 的 tail 命令是一个非常实用的工具&#xff0c;用于查看文件的末尾内容&#xff0c;默认显示文件的最后 10 行。它在系统管理和日志监控中尤为常用&#xff0c;以下是其核心功能和用法总结&#xff1a; 一、基本语法 tail [选项] [文件]二、常用选项 选项功能示例-n 或…

【案例拆解】米客方德 SD NAND 在车联网中(有方模块)的应用:破解传统 TF 卡振动脱落与寿命短板

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

中泰制造企业组网新方案:中-泰企业国际组网专线破解泰国工厂访问国内 OA/ERP 卡顿难题

在东南亚开厂的中国制造企业&#xff0c;估计都遇到过这个糟心事&#xff1a;泰国工厂的员工想访问国内总部的 OA、ERP 系统&#xff0c;结果页面加载半天没反应&#xff0c;文件传输慢得像蜗牛&#xff0c;视频会议还时不时卡成 PPT。以前大家常用的 MPLS 专线&#xff0c;虽然…