APISIX 簡介:云原生 API 網關的架構與實踐

文章目錄

  • 引言: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;雖然…