自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用開(kāi)源 API 網(wǎng)關(guān)實(shí)現(xiàn)可伸縮 API

開(kāi)源 開(kāi)發(fā)
本文介紹一種設(shè)計(jì)風(fēng)格,但只要你理解其中的重點(diǎn)內(nèi)容,它就能解決你的相關(guān)問(wèn)題。

采用 Apache APISIX 的 API 主導(dǎo)架構(gòu)。

API 網(wǎng)關(guān)是一個(gè)單一節(jié)點(diǎn),提供對(duì) API 調(diào)用入口。網(wǎng)關(guān)聚合了所請(qǐng)求的服務(wù),并相應(yīng)傳回合適的響應(yīng)信息。為了令你的 API 網(wǎng)關(guān)有效地工作,設(shè)計(jì)一個(gè)可靠、高效且簡(jiǎn)潔地 API 至關(guān)重要。本文介紹一種設(shè)計(jì)風(fēng)格,但只要你理解其中的重點(diǎn)內(nèi)容,它就能解決你的相關(guān)問(wèn)題。

由 API 主導(dǎo)的方法

API 主導(dǎo)的方法是將 API 置于應(yīng)用程序和它們需要訪問(wèn)的業(yè)務(wù)能力之間的通信核心,從而在所有數(shù)字通道上一致地交付無(wú)縫功能。API 主導(dǎo)的連接是指使用一種可重用、且設(shè)計(jì)得當(dāng)?shù)?API 來(lái)連接數(shù)據(jù)和應(yīng)用程序的方法。

API 主導(dǎo)的架構(gòu)

API 主導(dǎo)的架構(gòu)是一種架構(gòu)方法,它著眼于實(shí)現(xiàn)重用 API 的最佳方式。它能解決以下問(wèn)題:

  • 保護(hù) API,使外界無(wú)法在未授權(quán)情況下訪問(wèn) API
  • 確保應(yīng)用程序能找到正確的 API 端點(diǎn)
  • 限制對(duì) API 的請(qǐng)求次數(shù),從而確保持續(xù)的可用性
  • 支持持續(xù)集成、測(cè)試、生命周期管理、監(jiān)控、運(yùn)維等等
  • 防止錯(cuò)誤在棧間傳播
  • 對(duì) API 的實(shí)時(shí)監(jiān)測(cè)和分析
  • 實(shí)現(xiàn)可伸縮和靈活的業(yè)務(wù)能力(例如支持 微服務(wù) 架構(gòu))

API 資源路由

實(shí)現(xiàn)一個(gè) API 網(wǎng)關(guān),把它作為與所有服務(wù)通信的單一入口點(diǎn),意味著使用者只需要知道 URL 就能使用 API。將請(qǐng)求路由到相應(yīng)的服務(wù)端點(diǎn),并執(zhí)行相應(yīng)的功能是 API 網(wǎng)關(guān)的職責(zé)。

Image depicting the API routing traffic.

Image depicting the API routing traffic.

由于客戶端應(yīng)用程序不需要從多個(gè) HTTP 端點(diǎn)調(diào)用功能,這個(gè)辦法就減少了 API 使用者的操作復(fù)雜度。對(duì)每個(gè)服務(wù)來(lái)說(shuō),也不需實(shí)現(xiàn)一個(gè)單獨(dú)的層級(jí)去實(shí)現(xiàn)認(rèn)證、授權(quán)、節(jié)流和速度限制。大多數(shù)API 網(wǎng)關(guān),如開(kāi)源的 Apache APISIX,已經(jīng)包含了這些核心功能。

API 基于內(nèi)容的路由

基于內(nèi)容的路由機(jī)制也使用 API 網(wǎng)關(guān)根據(jù)請(qǐng)求的內(nèi)容進(jìn)行路由調(diào)用。例如,一個(gè)請(qǐng)求可能是基于 HTTP 請(qǐng)求的頭部?jī)?nèi)容或消息體被路由,而不只基于它的目標(biāo) URI。

考慮這樣一個(gè)場(chǎng)景:為了將負(fù)載在多個(gè)數(shù)據(jù)庫(kù)實(shí)例間均分,需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行分區(qū)。當(dāng)記錄總數(shù)較大,單個(gè)數(shù)據(jù)庫(kù)實(shí)例難以管理負(fù)載時(shí),常常會(huì)用這個(gè)辦法。

還有一個(gè)更好的辦法,就是把記錄在多個(gè)數(shù)據(jù)庫(kù)實(shí)例間分散開(kāi)來(lái)。然后你實(shí)現(xiàn)多個(gè)服務(wù),每個(gè)不同的數(shù)據(jù)庫(kù)都有一個(gè)服務(wù),把一個(gè) API 網(wǎng)關(guān)作為訪問(wèn)所有服務(wù)的唯一入口。然后,你可以配置你的 API 網(wǎng)關(guān),根據(jù)從 HTTP 頭或有效載荷中獲得的密鑰,將調(diào)用路由到相應(yīng)的服務(wù)。

Image of the API gateway exposing a single customer.

Image of the API gateway exposing a single customer.

在上面的圖表中,一個(gè) API 網(wǎng)關(guān)向多個(gè)客戶服務(wù)暴露一個(gè)單一的 /customers 資源,每個(gè)服務(wù)都有對(duì)應(yīng)的不同數(shù)據(jù)庫(kù)。

API 地理路由

API 地理路由解決方案根據(jù) API 調(diào)用的來(lái)源將其路由到最近的 API 網(wǎng)關(guān)。為了防止地理距離導(dǎo)致的延遲問(wèn)題(例如一個(gè)位于亞洲的客戶端調(diào)用了位于北美地區(qū)的 API),你可以在多個(gè)地區(qū)部署 API 網(wǎng)關(guān)。對(duì)于一個(gè) API 網(wǎng)關(guān),你可以在每個(gè)區(qū)域使用不同的子域名,讓應(yīng)用程序基于業(yè)務(wù)邏輯選擇最近的網(wǎng)關(guān)。因此 API 網(wǎng)關(guān)就提供了內(nèi)部負(fù)載均衡,確保進(jìn)入的請(qǐng)求分布于可用的實(shí)例之間。

Image of a DNS traffic management system.

Image of a DNS traffic management system.

通常使用 DNS 流量管理服務(wù)和 API 網(wǎng)關(guān),針對(duì)該區(qū)域的負(fù)載均衡器解析子域名,定位到距離最近的網(wǎng)關(guān)。

API 聚合器

這項(xiàng)技術(shù)對(duì)多個(gè)服務(wù)執(zhí)行操作(例如查詢),并向客戶端服務(wù)以單個(gè) HTTP 響應(yīng)的形式返回結(jié)果。API 聚合器使用 API 網(wǎng)關(guān)在服務(wù)器端代表使用者來(lái)執(zhí)行這項(xiàng)工作,而非讓客戶端程序多次調(diào)用 API。

假定你有一款移動(dòng)端 APP,對(duì)不同的 API 發(fā)起多次調(diào)用。這增加了客戶端代碼的復(fù)雜性,導(dǎo)致網(wǎng)絡(luò)資源的過(guò)度使用,而且由于延遲性,用戶體驗(yàn)也不好。網(wǎng)關(guān)可以接收所有需要的信息,可以要求認(rèn)證和驗(yàn)證,并理解來(lái)自每個(gè) API 的數(shù)據(jù)結(jié)構(gòu)。它也可以傳遞響應(yīng)的有效載荷,因此它們也會(huì)作為一個(gè)用戶需要的統(tǒng)一負(fù)載傳回移動(dòng)端。

Image of an API gateway.

Image of an API gateway.

API 集中認(rèn)證

在這種設(shè)計(jì)中,API 網(wǎng)關(guān)就是一個(gè)集中式認(rèn)證網(wǎng)關(guān)。作為一個(gè)認(rèn)證者,API 網(wǎng)關(guān)在 HTTP 請(qǐng)求頭中查找訪問(wèn)憑據(jù)(例如不記名的令牌)。然后它借助于身份驗(yàn)證提供方執(zhí)行驗(yàn)證憑據(jù)的業(yè)務(wù)邏輯。

Image of a tree showing API gateway's centralized authentication.

Image of a tree showing API gateway's centralized authentication.

使用 API 網(wǎng)關(guān)的集中式身份驗(yàn)證能解決很多問(wèn)題。它完全取代了應(yīng)用程序中的用戶管理模塊,通過(guò)對(duì)來(lái)自客戶端應(yīng)用程序的身份驗(yàn)證請(qǐng)求的快速響應(yīng)來(lái)提高性能。Apache APISIX 提供了一系列插件,支持不同的 API 網(wǎng)關(guān)認(rèn)證方法。

Image showing Apache ASPISIS and various plugins.

Image showing Apache ASPISIS and various plugins.

API 格式轉(zhuǎn)換

API 格式轉(zhuǎn)換是通過(guò)同一傳輸方式將有效載荷從一種格式轉(zhuǎn)換為另一種格式的能力。例如,你可以通過(guò) HTTPS 從 XML/SOAP 格式轉(zhuǎn)換為 JSON 格式,反之亦然。API 網(wǎng)關(guān)提供了支持 REST API 的功能,可以有效地進(jìn)行負(fù)載和傳輸?shù)霓D(zhuǎn)換。例如,它可以把消息隊(duì)列遙測(cè)傳輸(MQTT)轉(zhuǎn)換為 JSON 格式。

Image depicting APISIX transfers.

Image depicting APISIX transfers.

Apache APISIX 能夠接收 HTTP 請(qǐng)求,對(duì)其進(jìn)行代碼轉(zhuǎn)換,然后將其轉(zhuǎn)發(fā)給 gRPC 服務(wù)。它通過(guò) gRPC Transcode 插件獲取響應(yīng)并將其以 HTTP 格式返回給客戶端。

API 的可觀察性

現(xiàn)在,你知道 API 網(wǎng)關(guān)為進(jìn)入各種目的地的流量提供了一個(gè)中心控制點(diǎn)。但它也可以是一個(gè)中心觀察點(diǎn),因?yàn)榫捅O(jiān)控客戶端和服務(wù)器端的流量來(lái)說(shuō),它有獨(dú)特的資格。為了收集監(jiān)測(cè)工具所需要的數(shù)據(jù)(結(jié)構(gòu)化日志、度量和跟蹤),你可以對(duì) API 網(wǎng)關(guān)作出調(diào)整。

Apache APISIX 提供了 預(yù)先構(gòu)建的連接器,因此你可以跟外部監(jiān)測(cè)工具結(jié)合使用。你可以利用這些連接器從你的 API 網(wǎng)關(guān)收集日志數(shù)據(jù),進(jìn)一步獲得有用的指標(biāo),并獲取完整可見(jiàn)的服務(wù)使用情況。

API 緩存

API 緩存通常在網(wǎng)關(guān)內(nèi)部實(shí)現(xiàn)。它可以減少對(duì)端點(diǎn)的調(diào)用次數(shù),同時(shí)通過(guò)緩存上游的響應(yīng),改進(jìn)了請(qǐng)求延遲的情況。如果網(wǎng)關(guān)緩存對(duì)請(qǐng)求資源有一個(gè)新副本,它會(huì)直接使用這個(gè)副本來(lái)響應(yīng)這個(gè)請(qǐng)求,而不必對(duì)端點(diǎn)發(fā)出請(qǐng)求。如果緩存數(shù)據(jù)不存在,就將請(qǐng)求傳到目標(biāo)上游服務(wù)。

Image depicting how the API gateway cache functions.

Image depicting how the API gateway cache functions.

API 錯(cuò)誤處理

由于各種原因,API 服務(wù)可能會(huì)出錯(cuò)。在這種情況下,API 服務(wù)需要有一定的彈性,來(lái)應(yīng)對(duì)可預(yù)見(jiàn)的錯(cuò)誤。你也希望確保彈性機(jī)制能正常工作。彈性機(jī)制包括錯(cuò)誤處理代碼、斷路器、健康檢查、回退、冗余等等。新式的 API 網(wǎng)關(guān)支持各種常見(jiàn)錯(cuò)誤處理功能,包括自動(dòng)重試和超時(shí)設(shè)置。

Image depicting some of the many mechanisms that the modern API Gatway can support.

Image depicting some of the many mechanisms that the modern API Gatway can support.

API 網(wǎng)關(guān)作為一個(gè)協(xié)調(diào)器,它會(huì)根據(jù)各方面情況來(lái)決定如何管理流量、將負(fù)載均衡發(fā)送到一個(gè)健康的節(jié)點(diǎn),還能快速失敗。當(dāng)有異常狀況,它也會(huì)向你發(fā)出警示。API 網(wǎng)關(guān)也保證路由和其他網(wǎng)絡(luò)級(jí)組件能協(xié)同將請(qǐng)求傳給 API 進(jìn)程。它能幫助你在早期檢測(cè)出問(wèn)題,并修復(fù)問(wèn)題。網(wǎng)關(guān)的錯(cuò)誤注入機(jī)制(類似于 Apache APISIX 使用的那種)可用于測(cè)試應(yīng)用程序或微服務(wù) API 在各種錯(cuò)誤發(fā)生時(shí)的彈性。

API 版本管理

版本管理是指定義和運(yùn)行多個(gè)并發(fā)的 API 版本的功能。這點(diǎn)也很重要,因?yàn)?API 是隨著時(shí)間推移不斷改進(jìn)的。如果能對(duì) API 的并發(fā)版本進(jìn)行管理,那么 API 使用者就可以較快地切換到新的版本。這也意味著較老的版本可以被廢棄并最終退役。API 也跟其他應(yīng)用程序類似,無(wú)論是開(kāi)發(fā)新功能還是進(jìn)行錯(cuò)誤修復(fù),都存在演變的過(guò)程。

Image of using the API Gateway to implement API versioning.

Image of using the API Gateway to implement API versioning.

你可以使用 API 網(wǎng)關(guān)來(lái)實(shí)現(xiàn) API 版本管理。版本管理可以是請(qǐng)求頭,查詢參數(shù)或路徑。

APISIX 的網(wǎng)關(guān)

如果你需要令 API 服務(wù)可伸縮,就需要使用 API 網(wǎng)關(guān)。Apache APISIX 提供了必要的功能,可以實(shí)現(xiàn)健壯的入口,它的好處是顯而易見(jiàn)的。它遵循 API 主導(dǎo)的架構(gòu),并且有可能改變客戶端與托管服務(wù)交互的方式。

本文經(jīng)作者許可,從 Apache APISIX 博客改編并轉(zhuǎn)載。

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2015-05-08 17:24:41

APIAPI網(wǎng)關(guān)Kong

2021-07-26 08:12:31

開(kāi)源API網(wǎng)關(guān)

2019-04-02 14:20:14

微服務(wù)API網(wǎng)關(guān)

2023-06-26 10:51:56

開(kāi)源API

2019-09-24 08:44:09

OpenrestyAPI網(wǎng)關(guān)

2011-09-20 17:08:21

JavaScript

2020-12-21 13:13:35

API網(wǎng)關(guān)Kong代碼

2023-09-07 10:56:36

2020-07-07 07:54:01

API網(wǎng)關(guān)微服務(wù)

2012-02-21 22:55:55

MDT 2010Windows 7

2024-09-03 13:59:37

2021-11-23 06:02:20

APIOpenResty網(wǎng)關(guān)

2019-07-02 14:17:18

API網(wǎng)關(guān)網(wǎng)關(guān)流量

2021-09-03 13:48:07

API網(wǎng)關(guān)網(wǎng)絡(luò)

2022-07-07 16:48:10

API應(yīng)用安全

2023-09-21 11:20:46

2022-01-17 10:55:50

微服務(wù)API網(wǎng)關(guān)

2020-07-28 08:32:57

微服務(wù)API網(wǎng)關(guān)熔斷

2020-12-04 09:11:50

CTOAPI網(wǎng)關(guān)

2019-06-03 10:14:07

API網(wǎng)關(guān)微服務(wù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)