2020年6月12日13:48:33
github:https://github.com/apache/incubator-apisix
目前此項目已有成為apache孵化項目
官方中文文檔 :https://github.com/apache/incubator-apisix/blob/master/README_CN.md
支持的功能很多,我個人比較推薦服務發現,這個很省資源,不然得吧java的一套全部上上去,這樣其他語言的也可以輕松做微服務了
APISIX
- QQ 交流群: 552030619
- 郵件列表: 發郵件到 dev-subscribe@apisix.apache.org, 然后跟着回復郵件操作即可。

APISIX 是一個雲原生、高性能、可擴展的微服務 API 網關。
它是基於 Nginx 和 etcd 來實現,和傳統 API 網關相比,APISIX 具備動態路由和插件熱加載,特別適合微服務體系下的 API 管理。
為什么選擇 APISIX?
如果你正在構建網站、移動設備或 IoT(物聯網)的應用,那么你可能需要使用 API 網關來處理接口流量。
APISIX 是基於雲原生的微服務 API 網關,它是所有業務流量的入口,可以處理傳統的南北向流量,也可以處理服務間的東西向流量,也可以當做 k8s ingress controller 來使用。
APISIX 通過插件機制,提供動態負載平衡、身份驗證、限流限速等功能,並且支持你自己開發的插件。

功能
你可以把 Apache APISIX 當做流量入口,來處理所有的業務數據,包括動態路由、動態上游、動態證書、
A/B 測試、金絲雀發布(灰度發布)、藍綠部署、限流限速、抵御惡意攻擊、監控報警、服務可觀測性、服務治理等。
-
全平台
- 雲原生: 平台無關,沒有供應商鎖定,無論裸機還是 Kubernetes,APISIX 都可以運行。
- 運行環境: OpenResty 和 Tengine 都支持。
- 支持 ARM64: 不用擔心底層技術的鎖定。
-
多協議
- TCP/UDP 代理: 動態 TCP/UDP 代理。
- 動態 MQTT 代理: 支持用
client_id對 MQTT 進行負載均衡,同時支持 MQTT 3.1.* 和 5.0 兩個協議標准。 - gRPC 代理:通過 APISIX 代理 gRPC 連接,並使用 APISIX 的大部分特性管理你的 gRPC 服務。
- gRPC 協議轉換:支持協議的轉換,這樣客戶端可以通過 HTTP/JSON 來訪問你的 gRPC API。
- Websocket 代理
- Proxy Protocol
- Dubbo 代理:基於 Tengine,可以實現 Dubbo 請求的代理。
- HTTP(S) 反向代理
- SSL:動態加載 SSL 證書。
-
全動態能力
- 熱更新和熱插件: 無需重啟服務,就可以持續更新配置和插件。
- 代理請求重寫: 支持重寫請求上游的
host、uri、schema、enable_websocket、headers信息。 - 輸出內容重寫: 支持自定義修改返回內容的
status code、body、headers。 - Serverless: 在 APISIX 的每一個階段,你都可以添加並調用自己編寫的函數。
- 動態負載均衡:動態支持有權重的 round-robin 負載平衡。
- 支持一致性 hash 的負載均衡:動態支持一致性 hash 的負載均衡。
- 健康檢查:啟用上游節點的健康檢查,將在負載均衡期間自動過濾不健康的節點,以確保系統穩定性。
- 熔斷器: 智能跟蹤不健康上游服務。
- 動態服務發現:支持基於注冊中心的服務發現功能,降低反向代理維護成本。
-
精細化路由
- 支持全路徑匹配和前綴匹配
- 支持使用 Nginx 所有內置變量做為路由的條件,所以你可以使用
cookie,args等做為路由的條件,來實現灰度發布、A/B 測試等功能 - 支持各類操作符做為路由的判斷條件,比如
{"arg_age", ">", 24} - 支持自定義路由匹配函數
- IPv6:支持使用 IPv6 格式匹配路由
- 支持路由的自動過期(TTL)
- 支持路由的優先級
- 支持批量 Http 請求
-
安全防護
-
運維友好
- OpenTracing 可觀測性: 支持 Apache Skywalking 和 Zipkin。
- 監控和指標: Prometheus
- 集群:APISIX 節點是無狀態的,創建配置中心集群請參考 etcd Clustering Guide。
- 高可用:支持配置同一個集群內的多個 etcd 地址。
- 控制台: 內置控制台來操作 APISIX 集群。
- 版本控制:支持操作的多次回滾。
- CLI: 使用命令行來啟動、關閉和重啟 APISIX。
- 單機模式: 支持從本地配置文件中加載路由規則,在 kubernetes(k8s) 等環境下更友好。
- 全局規則:允許對所有請求執行插件,比如黑白名單、限流限速等。
- 高性能:在單核上 QPS 可以達到 18k,同時延遲只有 0.2 毫秒。
- 故障注入
- REST Admin API: 使用 REST Admin API 來控制 Apache APISIX,默認只允許 127.0.0.1 訪問,你可以修改
conf/config.yaml中的allow_admin字段,指定允許調用 Admin API 的 IP 列表。同時需要注意的是,Admin API 使用 key auth 來校驗調用者身份,在部署前需要修改conf/config.yaml中的admin_key字段,來保證安全。 - 外部日志記錄器:將訪問日志導出到外部日志管理工具。(HTTP Logger, TCP Logger, Kafka Logger, UDP Logger)
-
高度可擴展
- 自定義插件: 允許掛載常見階段,例如
init,rewrite,access,balancer,header filer,body filter和log階段。 - 自定義負載均衡算法:可以在
balancer階段使用自定義負載均衡算法。 - 自定義路由: 支持用戶自己實現路由算法。
- 自定義插件: 允許掛載常見階段,例如
安裝
APISIX 在以下操作系統中可順利安裝並做過運行測試,需要注意的是:OpenResty 的版本必須 >= 1.15.8.1:
CentOS 7, Ubuntu 16.04, Ubuntu 18.04, Debian 9, Debian 10, macOS, ARM64 Ubuntu 18.04
安裝 APISIX 的步驟:
- 安裝運行時依賴:OpenResty 和 etcd,參考依賴安裝文檔
- 有以下幾種方式來安裝 Apache APISIX:
- 通過源碼包安裝;
- 如果你在使用 CentOS 7,可以使用 RPM 包安裝;
- 其它 Linux 操作系統,可以使用 Luarocks 安裝方式;
- 你也可以使用 Docker 鏡像 來安裝。
快速上手
- 啟動 APISIX
sudo apisix start
- 入門指南
入門指南是學習 APISIX 基礎知識的好方法。按照 入門指南的步驟即可。
更進一步,你可以跟着文檔來嘗試更多的插件。
控制台
APISIX 內置了對 Dashboard 的支持,使用步驟如下:
-
確保你的運行環境中使用了最新的 Node.js 版本(>= 10)。
-
下載 dashboard 子模塊的源碼:
git submodule update --init --recursive
-
安裝 yarn
-
安裝依賴並構建
cd dashboard
yarn && yarn build:prod
- 與 APISIX 集成
把編譯后的在/dist目錄下的所有文件,拷貝到apisix/dashboard目錄下。
cp -r dist/* .
使用瀏覽器打開 http://127.0.0.1:9080/apisix/dashboard/ 即可使用,
不用填寫用戶名和密碼,直接登錄。
Dashboard 默認只允許 127.0.0.1 訪問。你可以自行修改 conf/config.yaml 中的 allow_admin 字段,指定允許訪問 dashboard 的 IP 列表。
性能測試
使用 AWS 的 8 核心服務器來壓測 APISIX,QPS 可以達到 140000,同時延時只有 0.2 毫秒。
文檔
Apache APISIX 和 Kong 的比較
API 網關核心功能點,兩者均已覆蓋
| 功能 | Apache APISIX | KONG |
|---|---|---|
| 動態上游 | 支持 | 支持 |
| 動態路由 | 支持 | 支持 |
| 健康檢查和熔斷器 | 支持 | 支持 |
| 動態SSL證書 | 支持 | 支持 |
| 七層和四層代理 | 支持 | 支持 |
| 分布式追蹤 | 支持 | 支持 |
| 自定義插件 | 支持 | 支持 |
| REST API | 支持 | 支持 |
| CLI | 支持 | 支持 |
Apache APISIX 的優勢
| 功能 | Apache APISIX | KONG |
|---|---|---|
| 項目歸屬 | Apache 軟件基金會 | Kong Inc. |
| 技術架構 | Nginx + etcd | Nginx + postgres |
| 交流渠道 | 微信群、QQ群、郵件列表、Github、meetup | Github、論壇、freenode |
| 單核 QPS (開啟限流和prometheus插件) | 18000 | 1700 |
| 平均延遲 | 0.2 毫秒 | 2 毫秒 |
| 支持 Dubbo 代理 | 是 | 否 |
| 配置回滾 | 是 | 否 |
| 支持生命周期的路由 | 是 | 否 |
| 插件熱更新 | 是 | 否 |
| 用戶自定義:負載均衡算法、路由 | 是 | 否 |
| resty <--> gRPC 轉碼 | 是 | 否 |
| 支持 Tengine 作為運行時 | 是 | 否 |
| MQTT 協議支持 | 是 | 否 |
| 配置生效時間 | 事件通知,低於1毫秒更新 | 定期輪詢,5 秒 |
| 自帶控制台 | 是 | 否 |
| 對接外部身份認證服務 | 是 | 否 |
| 配置中心高可用(HA) | 是 | 否 |
| 指定時間窗口的限速 | 是 | 否 |
| 支持任何 Nginx 變量做路由條件 | 是 | 否 |
視頻和文章
- 2020.1.17 API 網關 Apache APISIX 和 Kong 的選型對比
- 2019.12.14 從 0 到 1:Apache APISIX 的 Apache 之路
- 2019.12.14 基於 Apache APISIX 的下一代微服務架構
- 2019.10.30 Apache APISIX 微服務架構極致性能架構解析
- 2019.9.27 想把 APISIX 運行在 ARM64 平台上?只要三步
- 2019.8.31 APISIX 技術選型、測試和持續集成
- 2019.8.31 APISIX 高性能實戰2
- 2019.7.6 APISIX 高性能實戰
用戶實際使用案例
- 貝殼找房:如何基於 Apache APISIX 搭建網關
- 360:Apache APISIX 在基礎運維平台項目中的實踐
- HelloTalk:基於 OpenResty 和 Apache APISIX 的全球化探索之路
- 騰訊雲:為什么選擇 Apache APISIX 來實現 k8s ingress controller?
- 思必馳:為什么我們重新寫了一個 k8s ingress controller?
APISIX 的用戶有哪些?
有很多公司和組織把 APISIX 用戶學習、研究、生產環境和商業產品中,包括:
歡迎用戶把自己加入到 Powered By 頁面。
全景圖
APISIX 被納入 雲原生軟件基金會 API 網關全景圖
參與社區
如果你對 APISIX 的開發和使用感興趣,歡迎加入我們的 QQ 群來交流:
致謝
靈感來自 Kong 和 Orange。


