Apache APISIX介紹
API網關的需求
兩個基本功能,突出了對API的需求,即普通網絡服務器無法提供的東西。
1)復雜的速率限制
速率限制是一種通用的能力,可以保護自己的信息系統免受DDoS攻擊。然而,當你區分消費者時,例如免費與付費,你需要從簡單的費率轉移到更復雜的業務邏輯規則。
2)計費
如果支付了訂閱費用,可能會訪問一個有常規內容的資源。然而,當你的業務是銷售數據時,你可能會根據數量消費來銷售它們。雖然服務本身有可能嵌入計費功能,但它阻止了更多的分布式架構,即依靠幾個服務來提供所需的數據。在這一點上,只有一個中央接入點可以可靠地測量和收取使用費。
3)負載均衡
目前行業中的API網關的一個非詳盡列表包括:
Apache APISIX
Kong Gateway
Tyk
Gloo
Ambassador
Gravitee
APISIX於2019年6月捐贈給Apache基金會,並在2020年7月成為一個頂級項目。在技術方面,APISIX是基於流行的Nginx網絡服務器,上面有一個Lua引擎(OpenResty)和一個插件架構。
APISIX提供了幾個核心對象:
Upstream
虛擬主機抽象,根據配置規則在一組給定的服務節點上執行負載均衡
Consumer
客戶端的身份
Route
路由通過定義規則匹配客戶的請求,然后根據匹配結果加載和執行相應的插件,並將請求轉發給指定的Upstream
Service
一個可重復使用的對象,它同時綁定了一組插件和一個Upstream
對象被存儲在etcd中,這是一個分布式的鍵值存儲,也被Kubernetes使用。Apache APISIX暴露了一個REST API,這樣你就可以以一種技術無關的方式訪問配置。在這里,我們請求所有現有的路由。
curl http://apisix:9080/apisix/admin/routes -H 'X-API-KEY: xyz' # 1
配置訪問默認是受保護的。需要傳遞API密鑰。
使用其他對象的對象可以定義它們或指向現有的引用。例如,人們可以將一個獨立的Route定義為:
curl http://apisix:9080/apisix/admin/routes/1 -H 'X-API-KEY: xyz' -X PUT -d '
{
"uri": "/foo",
"upstream": {
"type": "roundrobin",
"nodes": {
"127.0.0.1:8080": 1
}
}
}'
定義upstream
curl http://apisix:9080/apisix/admin/upstreams/1 -H 'X-API-KEY: xyz' -X PUT -d '
{
"type": "roundrobin",
"nodes": {
"127.0.0.1:8080": 1
}
}'
現在我們可以在一個新的Route中引用新創建的Upstream:
curl http://apisix:9080/apisix/admin/routes/2 -H 'X-API-KEY: xyz' -X PUT -d '
{
"uri": "/bar",
"upstream_id": 1
}'
初試牛刀
嘗試Apache APISIX的最快捷方式是通過Docker。Apache APISIX的配置依賴於etcd,所以讓我們使用Docker Compose:
version: "3" services: apisix: image: apache/apisix:2.12.1-alpine command: sh -c "/opt/util/wait-for etcd:2397 -- /usr/bin/apisix init && /usr/bin/apisix init_etcd && /usr/local/openresty/bin/openresty -p /usr/local/apisix -g 'daemon off;'" volumes: - ./apisix_log:/usr/local/apisix/logs - ./apisix_conf/config.yaml:/usr/local/apisix/conf/config.yaml:ro - ./util:/opt/util:ro ports: - "9080:9080" - "9091:9091" - "9443:9443" depends_on: - etcd etcd: image: bitnami/etcd:3.5.2 environment: ETCD_ENABLE_V2: "true" ALLOW_NONE_AUTHENTICATION: "yes" ETCD_ADVERTISE_CLIENT_URLS: "http://0.0.0.0:2397" ETCD_LISTEN_CLIENT_URLS: "http://0.0.0.0:2397" ports: - "2397:2397"
引用了wait-for
https://github.com/Eficode/wait-for
我們在config.yaml文件中配置了Apache APISIX。一個最小的配置文件看起來像這樣:
apisix:
node_listen: 9080
allow_admin:
- 0.0.0.0/0
admin_key:
- name: "admin"
key: edd1c9f034335f136f87ad84b625c8f1
role: admin
etcd:
host:
- "http://etcd:2397"
prefix: "/apisix"
timeout: 30
我們現在可以創建一個簡單的路由。我們將代理http://httpbin.org/ 服務:
#!/bin/sh
curl http://localhost:9080/apisix/admin/routes -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X POST -d '
{
"name": "Route to httpbin",
"uris": ["/*"],
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org": 1
}
}
}'
我們現在可以測試這個路由了,http://httpbin.org/ 提供了幾個端點。命名合適的/anything端點返回請求數據中傳遞的任何內容。我們可以使用這個端點來檢查與測試所有的工作是否符合預期:
curl 'localhost:9080/anything?foo=bar&baz' -X POST -d '{ "hello": "world" }' -H 'Content-Type: application/json'
輸出結果應與以下內容非常相似:
{
"args": {
"baz": "",
"foo": "bar"
},
"data": "{ \"hello\": \"world\" }",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "20",
"Content-Type": "application/json",
"Host": "localhost",
"User-Agent": "curl/7.79.1",
"X-Amzn-Trace-Id": "Root=1-6239ae8e-633a33fb0d5fe44e354c9149",
"X-Forwarded-Host": "localhost"
},
"json": {
"hello": "world"
},
"method": "POST",
"origin": "172.21.0.1, 176.153.7.175",
"url": "http://localhost/anything?foo=bar&baz"
}
對比KONG
從 API 網關核心功能點出發:
詳細比較:
在API時代,網絡服務器已經達到了另一個階段。API網關。Apache APISIX就是這樣一個網關。它不僅具有友好的Apache v2許可證,而且是Apache基金會的一部分。
使用Apache APISIX很容易。使用Docker,加上APISIX和Etcd鏡像,就可以開始了。
今天先到這兒,希望對雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 項目管理, 產品管管,團隊建設 有參考作用 , 您可能感興趣的文章:
領導人怎樣帶領好團隊
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
視頻直播平台的系統架構演化
微服務與Docker介紹
Docker與CI持續集成/CD
互聯網電商購物車架構演變案例
互聯網業務場景下消息隊列架構
互聯網高效研發團隊管理演進之一
消息系統架構設計演進
互聯網電商搜索架構演化之一
企業信息化與軟件工程的迷思
企業項目化管理介紹
軟件項目成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共享
高效能的團隊建設
項目管理溝通計划
構建高效的研發與自動化運維
某大型電商雲平台實踐
互聯網數據庫架構設計思路
IT基礎架構規划方案一(網絡系統規划)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之采購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之性能實時度量系統演變
如有想了解更多軟件設計與架構, 系統IT,企業信息化, 團隊管理 資訊,請關注我的微信訂閱號:
作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 該文章也同時發布在我的獨立博客中-Petter Liu Blog。