API Gateway

更新於 發佈於 閱讀時間約 6 分鐘
API Gateway

API Gateway 是什麼?

參考上圖,API Gateway 是一個程式,位於 Client 和 Microservice 之間。當伺服器架構採用這種設計後,會有以下優點:
  1. 架構彈性 - 當伺服器架構需要調整的時候,Client 不需要調整(前提是 API 維持不變)。
  2. 安全性 - Internet 的使用者都無法直接存取 API Gateway 後面的 service,只能透過 API Gateway 間接存取。所以 service 可開放存取的 API 是有限的,降低惡意使用者攻擊的範圍。

API Gateway 的功能

具代表性的 API Gateway 有 HAProxy、NGINX、Kong、Traefik。我們也可以用自己熟悉的程式語言撰寫 API Gateway,比如用 Ocelot 撰寫。
這些 API Gateway 提供的功能都非常的接近,但是不同的 API Gateway 有廠商自己提供的特殊功能,而以下是常見的功能。

Load balancing

將負載適當的分攤到不同的 service 上,讓伺服器可以服務更多的使用者。
以 Traefik 為範例,以下設定是將 Request 送到不同的 serivce 上:
## Dynamic configuration
http:
  services:
    my-service:
      loadBalancer:
        servers:
        - url: "http://<private-ip-server-1>:<private-port-server-1>/"
        - url: "http://<private-ip-server-2>:<private-port-server-2>/"

Authentication and Authorization

API Gateway 通常會有 Basic Authentication 的功能,Client 提供帳號、密碼才可以存取;甚至更進階的有提供 JWT Authentication,提供 JWT 才可以存取。
以下是 Traefik 設定 Basic Authentication,設定了兩位使用者(帳號、密碼分別是 test/test, test2/test2):
# Declaring the user list
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: test-auth
spec:
  basicAuth:
    secret: authsecret
---
# Note: in a kubernetes secret the string (e.g. generated by htpasswd) must be base64-encoded first.
# To create an encoded user:password pair, the following command can be used:
# htpasswd -nb user password | openssl base64
apiVersion: v1
kind: Secret
metadata:
  name: authsecret
  namespace: default
data:
  users: |2
    dGVzdDokYXByMSRINnVza2trVyRJZ1hMUDZld1RyU3VCa1RycUU4d2ovCnRlc3QyOiRhcHIxJGQ5
    aHI5SEJCJDRIeHdnVWlyM0hQNEVzZ2dQL1FObzAK

request routing

API Gateway 收到 HTTP Request 後,可以根據 HTTP resource path 決定將 HTTP Request 送到內部網路的服務上,比如 https://www.company.com.tw/api/auth 將 HTTP Request 送到內部網路的 auth service;https://www.company.com.tw/api/order 將 HTTP Request 送到內部網路的 order service。

protocol translation

當 API Gateway 轉發 HTTP Request 的時候,可能內部服務並不是使用 HTTP 通訊協定,比如可能使用 gRPC、TCP、UDP 等等,API Gateway 可以將 HTTP Request 轉換成 gRPC、TCP、UDP 後,送給內部的服務。

Rate-Limiting

Rate-Limiting 可以限制 API 請求的頻率,比如全部的使用者每分鐘只能呼叫 API 10000 次;限制免費使用者每月只能呼叫 1000 次 API。

IP Listing

可以設定 IP 黑名單、白名單。以下是 Traefik 的設定:
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
  name: test-ipwhitelist
spec:
  ipWhiteList:
    sourceRange:
      - 127.0.0.1/32
      - 192.168.1.7

monitoring

提供監控的功能,比如提供 Prometheus, Datadog, InfluxDB, StatsD 的 Metrics。
為什麼會看到廣告
專注於 C#, DevOps 的工程師
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
我發現從統計學、電子、電腦繪圖的角度來看取樣,在說法上有點不同,但我認為大致上的概念是相同的。 資料實在是「太多了」,沒辦法拿這麼多的資料處理,但我們可以降低資料的數量,但和原本的資料大致上差不多,我們就可以做分析,得到我們想要的結果。 Reference:
監控的解決方案有很多種,我這裡選擇的是 Prometheus。實際上只有 Prometheus 還不夠,真正其實會安裝以下項目: 以上這些安裝項目都可以用 kube-prometheus-stack 這個專案提供的 helm chart 安裝。 用 helm 安裝: Reference:
Autoscaling 的目的是當有大量請求時,系統可以自動的增加運算資源,處理當下的大量請求;也可以根據當下資源使用率低時,自動降低運算資源,達到省錢的目的。
我發現從統計學、電子、電腦繪圖的角度來看取樣,在說法上有點不同,但我認為大致上的概念是相同的。 資料實在是「太多了」,沒辦法拿這麼多的資料處理,但我們可以降低資料的數量,但和原本的資料大致上差不多,我們就可以做分析,得到我們想要的結果。 Reference:
監控的解決方案有很多種,我這裡選擇的是 Prometheus。實際上只有 Prometheus 還不夠,真正其實會安裝以下項目: 以上這些安裝項目都可以用 kube-prometheus-stack 這個專案提供的 helm chart 安裝。 用 helm 安裝: Reference:
Autoscaling 的目的是當有大量請求時,系統可以自動的增加運算資源,處理當下的大量請求;也可以根據當下資源使用率低時,自動降低運算資源,達到省錢的目的。
你可能也想看
Google News 追蹤
Thumbnail
在創作的路上真的很多人問我說 到底要怎麼做出符合自己期待 但又可以表現得很有美感的作品?🥹 這個問題真的應該是每個創作者都一直在學習的課題吧!
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
API(應用程序接口)和SDK(軟件開發工具包)雖然然在功能上有些重叠,但它們是不同的概念: API(Application Programming Interface) 定義:API是一組規則和協議,允許一个軟件程序與另一個軟件程序進行通信。簡單來說,API定義了如何使用某個軟件組件或服務。
本文詳細闡述如何建立強大的API模型,涵蓋API需求分析、資源定義、資源層級架構、操作事件設計、流程補充,以及時序圖驗證等步驟,旨在確保API滿足業務需求並具備良好的可維護性和擴展性。文章以圖書館管理系統為例,逐步說明API建模流程,並解釋HTTP方法和API安全特性在API設計中的重要性。
本文討論 API 設計中界定 API 邊界的重要性,說明如何避免多合一 API 的缺點,並透過理解業務需求、識別核心資源和劃分功能責任等步驟,設計出清晰、高效且易於維護的 API。文章以圖書館管理系統為例,說明如何界定 API 邊界,並說明正確使用 HTTP 方法和狀態碼的重要性。
Thumbnail
  API人機介面的應用前景分析 API人機介面是Immense Oak Technologies 全新開發的一種透過標準化通訊協定實現設備互動和控制的智慧終端。結合即時資料通訊技術(如WebSocket)和電力品質分析設備(如肯革陸科技的EDC系統),這項技術在智慧建築、工業物聯網(IIoT)
Thumbnail
AWS Lambda是? AWS Lambda 就像是開發者的救星,因為它是一種 Serverless 服務,意思是你不用再為架設和維護伺服器煩惱了。對於每天都忙得焦頭爛額的開發者來說,產品開發已經夠讓人抓狂了,還要處理伺服器的設定和維運(e.g. OS、Network、機器管理、防火牆),想想就
Thumbnail
API(Application Programming Interface,應用程式介面)可以視為不同軟體系統之間的溝通橋梁,讓雙邊可以交換數據並執行各種功能。這篇會記錄產品經理一定要知道的幾個 API 概念,像是常見的錯誤代碼以及不同的 HTTP 方法(如 PUT、GET、POST)和實際案例說明
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 什麼是Middleware (中介層)? Middleware 一般翻譯作「中間件」或是「中介軟體」,其實 Express 應用程式就是由一連串的 middleware 串連而成: 從 request 進來到 response 回去會經過一系列的流程。 這個流程會按照路由清單由上而下執行。
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包
Thumbnail
在創作的路上真的很多人問我說 到底要怎麼做出符合自己期待 但又可以表現得很有美感的作品?🥹 這個問題真的應該是每個創作者都一直在學習的課題吧!
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
API(應用程序接口)和SDK(軟件開發工具包)雖然然在功能上有些重叠,但它們是不同的概念: API(Application Programming Interface) 定義:API是一組規則和協議,允許一个軟件程序與另一個軟件程序進行通信。簡單來說,API定義了如何使用某個軟件組件或服務。
本文詳細闡述如何建立強大的API模型,涵蓋API需求分析、資源定義、資源層級架構、操作事件設計、流程補充,以及時序圖驗證等步驟,旨在確保API滿足業務需求並具備良好的可維護性和擴展性。文章以圖書館管理系統為例,逐步說明API建模流程,並解釋HTTP方法和API安全特性在API設計中的重要性。
本文討論 API 設計中界定 API 邊界的重要性,說明如何避免多合一 API 的缺點,並透過理解業務需求、識別核心資源和劃分功能責任等步驟,設計出清晰、高效且易於維護的 API。文章以圖書館管理系統為例,說明如何界定 API 邊界,並說明正確使用 HTTP 方法和狀態碼的重要性。
Thumbnail
  API人機介面的應用前景分析 API人機介面是Immense Oak Technologies 全新開發的一種透過標準化通訊協定實現設備互動和控制的智慧終端。結合即時資料通訊技術(如WebSocket)和電力品質分析設備(如肯革陸科技的EDC系統),這項技術在智慧建築、工業物聯網(IIoT)
Thumbnail
AWS Lambda是? AWS Lambda 就像是開發者的救星,因為它是一種 Serverless 服務,意思是你不用再為架設和維護伺服器煩惱了。對於每天都忙得焦頭爛額的開發者來說,產品開發已經夠讓人抓狂了,還要處理伺服器的設定和維運(e.g. OS、Network、機器管理、防火牆),想想就
Thumbnail
API(Application Programming Interface,應用程式介面)可以視為不同軟體系統之間的溝通橋梁,讓雙邊可以交換數據並執行各種功能。這篇會記錄產品經理一定要知道的幾個 API 概念,像是常見的錯誤代碼以及不同的 HTTP 方法(如 PUT、GET、POST)和實際案例說明
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 什麼是Middleware (中介層)? Middleware 一般翻譯作「中間件」或是「中介軟體」,其實 Express 應用程式就是由一連串的 middleware 串連而成: 從 request 進來到 response 回去會經過一系列的流程。 這個流程會按照路由清單由上而下執行。
Thumbnail
※ 什麼是路由? 當我們說「路由」時,可能是在談論路由器(實體設備),也可能是在談論路由(選擇路徑的過程),或者是在談論路徑(資料封包的傳輸路徑)。 路由器 (Router):這是一種實體設備,負責將資料封包 (Packet) 從一個網路傳送到另一個網路。它的工作方式類似於交通指揮,確保資料封包