在多租使用者方案中使用 Azure API 管理
Azure API 管理 是 API 的完整 API 閘道和反向 Proxy。 它提供許多功能,包括快取、回應模擬,以及開發人員入口網站,對於以 API 為主的應用程式很有用。 本文摘要說明適用於多租用戶解決方案之 API 管理的一些主要功能。
注意
本文著重於當您擁有裝載 API 供內部或外部使用的多租使用者應用程式時,如何使用 API 管理。
另一種形式的多租使用者是將 API 管理 閘道作為服務提供給其他小組。 例如,組織可能有多個應用程式小組部署及使用的共用 API 管理 實例。 本文不會討論這種形式的多租使用者。 請考慮使用工作區,協助您跨多個可能具有不同存取層級的小組共用 API 管理 實例。
隔離模型
API 管理 通常會部署為具有單一實例的共用元件,以提供多個租使用者的要求。 不過,根據您的租用模型,您有許多方式可以部署 API 管理。 本文假設您使用部署戳記來部署解決方案。
一般而言,不論隔離模型為何,您使用 API 管理 的方式都類似。 本節著重於隔離模型的成本和複雜度差異,以及每個方法如何將要求路由傳送至後端 API 應用程式。
考量 | 具有單一租使用者後端的共享實例 | 具有共用多租使用者後端的共享實例 | 每個租用戶的實例 |
---|---|---|---|
支援的租用戶數目 | 多 | 幾乎未繫結 | 每個實例各一個 |
成本 | 較低 | 較低 | 較高 |
部署複雜度 | 低:要針對每個戳記管理的單一實例 | 低:要針對每個戳記管理的單一實例 | 高:要管理的多個實例 |
路由設定複雜度 | 較高 | Lower | 較低 |
易受干擾鄰里問題的影響 | Yes | .是 | No |
租用戶層級的網路隔離 | No | 無 | Yes |
範例案例 | 每個租使用者的自定義功能變數名稱 | 具有共用應用層的大型多租用戶解決方案 | 租使用者特定的部署戳記 |
共用實例隔離模型
在多個租用戶之間共用 API 管理 實例很常見,這有助於降低成本和管理複雜度。 如何共用 API 管理 實例的詳細數據,取決於您如何將租使用者指派給後端 API 應用程式。
單一租使用者後端應用程式
如果您為每個租使用者部署不同的後端應用程式,則可以部署單一 API 管理 實例,併為每個要求將流量路由傳送至正確的租使用者後端。 此方法會要求您設定每個租使用者的後端主機名 API 管理,或有另一種方式將傳入要求對應至正確的租使用者後端。
因為需要額外的查閱,所以此方法可能不會調整為共用單一 API 管理 實例的大量租使用者。 當您查閱租使用者後端時,也可能會有一些效能額外負荷。 不過,此效能額外負荷的大小取決於您設計這類查閱的方式。
共用多租使用者後端應用程式
在租用戶共用通用後端應用程式的案例中,API 管理 路由程式會簡化,因為您可以將所有要求路由至單一後端。 如果您使用通配符網域或提供者發行的網域,您可以使用此方法達到幾乎未繫結的規模。 此外,由於要求不需要對應至租使用者的後端,因此自定義路由決策不會對效能造成影響。
每個租用戶的實例
在某些情況下,您可能會為每個租使用者部署 API 管理 實例。 只有當您有少量租使用者,或有嚴格的合規性需求,限制您在租用戶之間共用任何基礎結構時,才建議您使用此方法。 例如,如果您為每個租使用者部署專用虛擬網路,您可能也需要為每個租使用者部署專用 API 管理 實例。
提示
如果您部署多個實例的唯一原因是支援不同地理區域的使用者,您可能會想要考慮 API 管理 中的多重區域部署功能是否符合您的需求。
當您部署 API 管理 實例時,您必須考慮服務限制,包括任何可能套用至 Azure 訂用帳戶或區域內 API 管理 實例數目的限制。
單一租用戶實例通常具有最少的路由設定,因為您可以將所有要求路由傳送至單一後端。 此案例不需要自定義路由決策,因此不會對效能造成影響。 不過,通常會產生比部署共用實例更高的資源成本。 如果您需要部署單一租用戶實例,請考慮自我裝載網關是否可讓您重複使用您已部署的租使用者特定計算資源。
支援多租使用者 API 管理 功能
API 管理 使用原則來啟用彈性。 您可以自定義當您使用原則時,如何驗證、路由和處理要求。 當您使用 API 管理 設計多租使用者解決方案時,您可以使用原則來實作許多功能。
識別傳入要求的租使用者
請考慮如何識別每個傳入要求內的適當租使用者。 在多租用戶解決方案中,請務必清楚瞭解誰正在提出每個要求,以便您傳回該特定租使用者和其他人的數據。
API 管理 提供可用來驗證要求的訂用帳戶。 這些訂用帳戶會使用唯 一的訂用帳戶密鑰 ,協助識別提出要求的訂閱者。 如果您選擇使用訂用帳戶,請考慮如何將 API 管理 訂用帳戶對應至您自己的租用戶或客戶標識符。 訂用帳戶已緊密整合至開發人員入口網站。 針對大部分的解決方案,最好使用訂用帳戶來識別租使用者。
或者,您可以使用其他方法來識別租使用者。 以下是在您定義之自定義原則內執行的一些方法範例:
使用 URL 的自訂元件,例如子域、路徑或查詢字串。 例如,在 URL
https://api.contoso.com/tenant1/products
中,您可能會擷取路徑的第一個部分,tenant1
並將它視為租用戶標識碼。 同樣地,假設傳入 URLhttps://tenant1.contoso.com/products
,您可能會擷取子域tenant1
。 若要使用此方法,請考慮從Context.Request.Url
屬性剖析路徑或查詢字串。使用要求標頭。 例如,用戶端應用程式可能會將自定義
TenantID
標頭新增至要求。 若要使用此方法,請考慮從Context.Request.Headers
集合讀取。從 JSON Web 令牌擷取宣告 (JWT)。 例如,您在識別提供者所發出的 JWT 中可能有自定義
tenantId
宣告。 若要使用此方法,請使用 validate-jwt 原則並設定output-token-variable-name
屬性,讓您的原則定義可以從令牌讀取值。動態查閱租用戶標識碼。 處理要求時,您可以與外部資料庫或服務通訊。 藉由採用這種方法,您可以建立自定義租用戶對應邏輯,將邏輯租使用者標識符對應至特定 URL,或取得租使用者的其他資訊。 若要使用此方法,請使用 傳送要求 原則。
這種方法可能會增加要求的延遲。 若要減輕此影響,最好使用快取來減少對外部 API 的呼叫數目。 您可以使用 cache-store-value 和 cache-lookup-value 原則來實作快取方法。 請務必在影響後端查閱的每個新增、移除或移動的租使用者中,使快取失效。
具名值
API 管理 支援具名值,這是您可以在整個原則中使用的自定義組態設定。 例如,您可以使用具名值來儲存租使用者的後端URL,然後在原則內的數個位置重複使用相同的值。 如果您需要更新 URL,您可以在單一位置更新它。
警告
在多租使用者方案中,當您設定具名值的名稱時,請務必小心。 如果這些設定在租用戶之間有所不同,請務必在名稱中包含租用戶標識符。 例如,您可以在確認tenantId
適合要求之後,使用類似 tenantId-key:value
的模式。
包含標識碼,以減少當您處理另一個租使用者的要求時,不小心參考或作到參考另一個租使用者值的機會。
驗證傳入要求
對 API 管理 閘道提出的 API 要求通常需要經過驗證。 API 管理 提供數種方法來驗證閘道的連入要求,包括OAuth 2.0和客戶端憑證。 請考慮您應該支持的認證類型,以及應驗證認證的位置。 例如,請考慮驗證應該發生在 API 管理、後端應用程式中,或兩個位置。
如需詳細資訊,請參閱 Azure API 管理 中 API 的驗證和授權。
注意
如果您使用訂用帳戶密鑰或 API 金鑰,最好也使用另一個驗證方法。
單靠訂用帳戶密鑰不是強式驗證形式,但對於其他案例很有用,例如追蹤個別租使用者的 API 使用量。
路由至租使用者特定的後端
當您使用 API 管理 作為共用元件時,您可能需要將傳入 API 要求路由傳送至不同的租使用者特定後端。 這些後端可能位於不同的部署戳記中,或可能是單一戳記內的不同應用程式。 若要自定義原則定義中的路由,請使用 set-backend-service 原則。 您必須指定要求應該重新導向至的新基底 URL。
快取回應或其他數據
API 管理 具有功能強大的快取功能,可用來快取整個 HTTP 回應或任何其他數據。 例如,如果您使用自定義邏輯,或是從外部服務查閱對應,則可以使用租用戶對應的快取。
使用 cache-store-value 和 cache-lookup-value 原則來實作快取方法。
警告
在多租用戶解決方案中,當您設定快取索引鍵時,請務必小心。 如果快取的數據在租用戶之間可能會有所不同,請確定您在快取密鑰中包含租使用者識別碼。
包含標識符,以降低當您處理另一個租使用者要求時,不小心參照到參考另一個租使用者值的機會。
自訂網域
使用 API 管理 為 API 閘道和開發人員入口網站設定您自己的自訂網域。 在某些層中,您可以設定通配符網域或多個完整功能變數名稱(FQDN)。
您也可以將 API 管理 與 Azure Front Door 等服務搭配使用。 在這類設定中,Azure Front Door 經常處理自定義網域和傳輸層安全性 (TLS) 憑證,並使用單一功能變數名稱與 API 管理 通訊。 如果來自用戶端的原始 URL 包含您需要傳送至 API 管理 實例的租使用者資訊以供日後處理,請考慮使用X-Forwarded-Host
要求標頭,或使用 Azure Front Door 規則將資訊傳遞為 HTTP 標頭。
速率限制
在多租用戶解決方案中套用配額或速率限制很常見。 速率限制可協助您減輕 嘈雜的鄰近問題。 您也可以使用速率限制來強制執行服務品質,並區分不同的定價層。
使用 API 管理 來強制執行租使用者特定的速率限制。 如果您使用租使用者特定的訂用帳戶,請考慮使用 配額 原則來強制執行每個訂用帳戶的配額。 或者,請考慮使用 依密鑰 配額原則來強制執行配額,方法是使用任何其他速率限制密鑰,例如您從要求 URL 或 JWT 取得的租用戶標識碼。
創造營收
API 管理 檔提供關於獲利 API 的廣泛指引,包括範例實作。 獲利方法結合了許多 API 管理 功能,讓開發人員可以根據不同的使用模式發佈 API、管理訂用帳戶和收費。
產能管理
API 管理 實例支援一定數量的容量,代表可用來處理要求的資源。 當您使用複雜原則或將更多 API 部署到實例時,您會耗用更多容量。 您可以透過數種方式來管理實例的容量,例如購買更多單位。 您也可以動態調整實例的容量。
某些多租用戶實例可能會耗用比單一租用戶實例更多的容量,例如,如果您使用許多原則將要求路由傳送至不同的租使用者後端。 如果您看到使用量增加,請考慮仔細規劃容量規劃,並規劃調整實例的容量。 您也應該測試解決方案的效能,以事先瞭解您的容量需求。
如需調整 API 管理 的詳細資訊,請參閱升級和調整 Azure API 管理 實例。
多區域部署
API 管理 支援多區域部署,這表示您可以跨多個 Azure 區域部署單一邏輯 API 管理 資源,而不需要將其設定複寫到不同的資源。 當您全域散發或復寫解決方案時,這項功能特別有用。 您可以有效地跨多個區域部署一組 API 管理 實例,以允許低延遲要求處理,並以單一邏輯實例的形式加以管理。
不過,如果您需要完全隔離 API 管理 實例,您也可以選擇將獨立的 API 管理 資源部署到不同的區域。 此方法會分隔每個 API 管理 實例的管理平面。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
- John Downs |首席軟體工程師
- 丹尼爾·斯科特-倫斯福德 |合作夥伴技術策略師、全球合作夥伴解決方案
其他參與者:
- 阿森·弗拉基米爾斯基 | 首席客戶工程師
若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。
下一步
檢閱 多租用戶解決方案整合的架構方法。