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

什么是API網(wǎng)關(guān)?

網(wǎng)絡(luò)
本文通過(guò)分析客戶端向服務(wù)器發(fā)送一個(gè)HTTP請(qǐng)求的經(jīng)典流程,講解了網(wǎng)關(guān)及其主要作用。

大家好,我是猿java。

API 網(wǎng)關(guān)是什么?它有什么作用?為什么我們需要它?今天我們就來(lái)一起聊一聊。

一、定義 

在維基百科中,網(wǎng)關(guān)的定義是這樣的:

在計(jì)算機(jī)網(wǎng)絡(luò)中,網(wǎng)關(guān)(英語(yǔ):Gateway)是轉(zhuǎn)發(fā)其他服務(wù)器通信數(shù)據(jù)的服務(wù)器,接收從客戶端發(fā)送來(lái)的請(qǐng)求時(shí),它就像自己擁有資源的源服務(wù)器一樣對(duì)請(qǐng)求進(jìn)行處理。有時(shí)客戶端可能都不會(huì)察覺(jué),自己的通信目標(biāo)是一個(gè)網(wǎng)關(guān)。

從定義可以看出,網(wǎng)關(guān)也是一組服務(wù)器,它位于客戶端和服務(wù)器之間,是客戶端請(qǐng)求進(jìn)入服務(wù)器的唯一入口,如下圖,API 網(wǎng)關(guān)提供 幾個(gè)重要的功能:

  • 身份驗(yàn)證和安全策略實(shí)施;
  • 負(fù)載均衡和斷路;
  • 協(xié)議轉(zhuǎn)換和服務(wù)發(fā)現(xiàn);
  • 監(jiān)控、日志記錄、分析和計(jì)費(fèi);
  • 緩存;

二、典型流程分析

下面我們通過(guò)客戶端向服務(wù)器發(fā)起一個(gè)HTTP請(qǐng)求這個(gè)經(jīng)典的流程來(lái)講解API網(wǎng)關(guān)及其重要的功能。

第一步:客戶端向 API 網(wǎng)關(guān)發(fā)送請(qǐng)求

客戶端向服務(wù)器發(fā)起一個(gè)請(qǐng)求,該請(qǐng)求通常是基于 HTTP協(xié)議,它可以是 REST、GraphQL 或其他一些更高級(jí)別的抽象。如下圖:

第二步:API 網(wǎng)關(guān)驗(yàn)證 HTTP 請(qǐng)求

API網(wǎng)關(guān)收到客戶端的請(qǐng)求后,會(huì)對(duì) HTTP請(qǐng)求中的參數(shù)等進(jìn)行校驗(yàn),如下圖:

第三步:IP 黑白名單校驗(yàn)

為了安全,可以在API網(wǎng)關(guān)設(shè)置IP黑白單,標(biāo)志允許和不允許訪問(wèn)服務(wù)器的IP,API 網(wǎng)關(guān)根據(jù) IP黑白列表來(lái)允許和拒絕調(diào)用者的IP地址。如下圖:

同時(shí),API網(wǎng)關(guān)還可以針對(duì)IP 地址和 HTTP標(biāo)頭等屬性執(zhí)行基本的速率限制檢查。例如,它可以拒絕來(lái)自超過(guò)一定速率的 IP地址的請(qǐng)求。如下圖:

第四步:身份驗(yàn)證和授權(quán)

API 網(wǎng)關(guān)將 HTTP請(qǐng)求傳遞給身份提供商以進(jìn)行身份驗(yàn)證和授權(quán)。API 網(wǎng)關(guān)從提供商處接收經(jīng)過(guò)身份驗(yàn)證的會(huì)話,其中包含允許請(qǐng)求執(zhí)行的操作范圍。如下圖:

認(rèn)證是驗(yàn)證用戶或客戶端身份的過(guò)程,用于確認(rèn)一個(gè)實(shí)體是否為其所聲稱的那個(gè)實(shí)體。在API的上下文中,這意味著確保請(qǐng)求方是合法的用戶或客戶端,并且有權(quán)訪問(wèn)所請(qǐng)求的資源或服務(wù)。

常見(jiàn)的認(rèn)證方式包括:

  • 基本認(rèn)證(Basic Authentication):客戶端在請(qǐng)求頭中使用Base64編碼的用戶名和密碼進(jìn)行認(rèn)證。雖然簡(jiǎn)單易用,但不是最安全的認(rèn)證方法,因?yàn)閼{據(jù)會(huì)以明文形式在請(qǐng)求中傳輸,容易被攔截和解碼。
  • 令牌認(rèn)證(Token Authentication):客戶端在請(qǐng)求頭中使用特定的令牌(Token)進(jìn)行認(rèn)證。令牌通常由身份驗(yàn)證后的服務(wù)頒發(fā)給客戶端,有效期有限,并且在每次請(qǐng)求中傳遞。相對(duì)于基本認(rèn)證,令牌認(rèn)證更安全,因?yàn)榱钆仆ǔ2话舾行畔ⅲ铱梢酝ㄟ^(guò)HTTPS加密進(jìn)行傳輸。
  • OAuth認(rèn)證:OAuth是一種用于授權(quán)的開(kāi)放標(biāo)準(zhǔn)。它允許用戶授權(quán)第三方應(yīng)用訪問(wèn)他們存儲(chǔ)在另一個(gè)服務(wù)提供者上的資源,而無(wú)需提供他們的登錄憑據(jù)。OAuth通常用于允許用戶通過(guò)第三方身份驗(yàn)證進(jìn)行訪問(wèn)。

授權(quán)是在認(rèn)證成功后,決定用戶或客戶端是否有權(quán)訪問(wèn)特定資源或執(zhí)行特定操作的過(guò)程。它定義了用戶在系統(tǒng)中的權(quán)限和角色,并根據(jù)這些權(quán)限來(lái)限制對(duì)資源的訪問(wèn)。

常見(jiàn)的授權(quán)方式包括:

  • 角色-Based授權(quán)(Role-Based Authorization):在角色-Based授權(quán)中,用戶被分配到不同的角色,每個(gè)角色有不同的權(quán)限。例如,管理員角色可能有權(quán)訪問(wèn)所有資源,而普通用戶角色可能只有限制的權(quán)限。
  • 資源-Based授權(quán)(Resource-Based Authorization):在資源-Based授權(quán)中,訪問(wèn)權(quán)限是直接授予特定資源的,而不是基于角色。每個(gè)資源都可以定義其自己的權(quán)限規(guī)則,決定哪些用戶或角色可以訪問(wèn)它。
  • 訪問(wèn)令牌(Access Token):在OAuth認(rèn)證中,訪問(wèn)令牌是用于授權(quán)的重要組成部分。訪問(wèn)令牌包含有關(guān)用戶或客戶端的授權(quán)信息,以及所被授權(quán)訪問(wèn)的資源和權(quán)限。

綜合來(lái)說(shuō),認(rèn)證用于確認(rèn)用戶或客戶端的身份,而授權(quán)用于確定用戶或客戶端是否有權(quán)訪問(wèn)特定資源或執(zhí)行特定操作。這兩個(gè)步驟共同確保只有合法且有權(quán)訪問(wèn)的用戶或客戶端可以使用API,并保護(hù)系統(tǒng)免受未經(jīng)授權(quán)的訪問(wèn)。在API網(wǎng)關(guān)中,認(rèn)證和授權(quán)是非常重要的功能,因?yàn)樗鼈冎苯佑绊懙秸麄€(gè)系統(tǒng)的安全性和數(shù)據(jù)的保護(hù)。

第五步:流量控制和限流

客戶端請(qǐng)求的身份驗(yàn)證通過(guò)后,API網(wǎng)關(guān)可以做更高級(jí)別的流量控制和限流。如下圖:

流量控制和限流是在API網(wǎng)關(guān)中用于管理和控制請(qǐng)求流量的重要概念。它們有助于維護(hù)后端服務(wù)的穩(wěn)定性,防止過(guò)載,并提供更好的性能和可靠性。下面詳細(xì)解釋這兩個(gè)概念:

流量控制(Rate Limiting)是指對(duì)請(qǐng)求的速率進(jìn)行控制,以限制客戶端對(duì)API的請(qǐng)求頻率。這個(gè)過(guò)程可以確保后端服務(wù)不會(huì)受到過(guò)多請(qǐng)求的壓力,避免服務(wù)器資源過(guò)度消耗,導(dǎo)致系統(tǒng)崩潰或響應(yīng)緩慢。常見(jiàn)的流量控制方法包括:

  • 固定窗口計(jì)數(shù)器(Fixed Window Counter):在固定時(shí)間窗口內(nèi)(例如每分鐘),對(duì)每個(gè)客戶端或API密鑰的請(qǐng)求計(jì)數(shù)。超過(guò)預(yù)設(shè)的請(qǐng)求數(shù)量限制時(shí),拒絕額外的請(qǐng)求或延遲響應(yīng)。
  • 滑動(dòng)窗口計(jì)數(shù)器(Sliding Window Counter):類似于固定窗口計(jì)數(shù)器,但窗口是滑動(dòng)的,允許更靈活地控制請(qǐng)求速率。
  • 令牌桶算法(Token Bucket Algorithm):通過(guò)將令牌存放在桶中來(lái)控制請(qǐng)求速率。每個(gè)令牌代表一個(gè)請(qǐng)求,桶有一個(gè)固定容量。每當(dāng)有請(qǐng)求時(shí),一個(gè)令牌將被消耗,當(dāng)桶中沒(méi)有令牌時(shí),則限制進(jìn)一步的請(qǐng)求。

限流(Rate Limiting)是指在特定時(shí)間段內(nèi),對(duì)請(qǐng)求的數(shù)量或速率進(jìn)行限制,防止請(qǐng)求超出系統(tǒng)的處理能力。與流量控制不同,限流不會(huì)拒絕額外的請(qǐng)求,而是將多余的請(qǐng)求暫時(shí)放置在隊(duì)列中,等待后續(xù)處理。常見(jiàn)的限流方法包括:

  • 漏桶算法(Leaky Bucket Algorithm):漏桶算法維護(hù)一個(gè)固定容量的桶,所有的請(qǐng)求都被放入這個(gè)桶中。然后,請(qǐng)求按照固定的速率從桶中流出。如果請(qǐng)求過(guò)多,超過(guò)桶的容量,那么多余的請(qǐng)求將會(huì)被緩存或丟棄。
  • 令牌桶算法(Token Bucket Algorithm):除了作為流量控制的方法,令牌桶算法也可以用于限流。與流量控制類似,多余的請(qǐng)求將被放置在桶中等待處理。

流量控制和限流是保護(hù)后端服務(wù)免受過(guò)多請(qǐng)求的有效手段。通過(guò)合理設(shè)置請(qǐng)求速率限制,可以平衡客戶端和服務(wù)端的交互,確保服務(wù)的可用性和穩(wěn)定性。在API網(wǎng)關(guān)中,流量控制和限流通常與認(rèn)證、授權(quán)和其他安全措施一起使用,共同構(gòu)成了一個(gè)安全、高效的API管理解決方案。

第六步:匹配后端服務(wù)器

當(dāng)HTTP驗(yàn)證通過(guò)之后,API 網(wǎng)關(guān)通過(guò)路徑匹配找到適當(dāng)?shù)暮蠖朔?wù)來(lái)處理請(qǐng)求。如下圖:

第七步:動(dòng)態(tài)路由

匹配到對(duì)應(yīng)到服務(wù)器之后,則需要將請(qǐng)求動(dòng)態(tài)路由到任意一臺(tái)匹配到的服務(wù)器。如下圖:

第8步:協(xié)議轉(zhuǎn)換

因?yàn)橛行┕驹谑褂梦⒎?wù),微服務(wù)間使用了 RPC協(xié)議,所以在API網(wǎng)關(guān),需要把HTTP協(xié)議轉(zhuǎn)換成對(duì)應(yīng)的RPC協(xié)議。如下圖:

當(dāng)后端服務(wù)處理完請(qǐng)求后會(huì)將響應(yīng)返回給 API網(wǎng)關(guān),網(wǎng)關(guān)會(huì)將響應(yīng)轉(zhuǎn)換回HTTP協(xié)議,并將響應(yīng)返回給客戶端。API網(wǎng)關(guān)還 提供其他關(guān)鍵服務(wù)。例如,API網(wǎng)關(guān)應(yīng)跟蹤錯(cuò)誤,提供斷路功能以防止服務(wù)過(guò)載。API 網(wǎng)關(guān)還應(yīng)該提供日志記錄、監(jiān)控和分析服務(wù),以實(shí)現(xiàn)操作可觀察性。

監(jiān)視(Monitoring)和日志記錄(Logging)是在API網(wǎng)關(guān)和系統(tǒng)中實(shí)現(xiàn)可觀察性和故障排查的關(guān)鍵組成部分。它們幫助開(kāi)發(fā)人員和系統(tǒng)管理員實(shí)時(shí)跟蹤API的使用情況、性能指標(biāo)和錯(cuò)誤信息,從而更好地了解系統(tǒng)的健康狀況,快速發(fā)現(xiàn)并解決問(wèn)題。下面詳細(xì)解釋這兩個(gè)概念:

監(jiān)視(Monitoring)是指對(duì)API網(wǎng)關(guān)和系統(tǒng)中的各種指標(biāo)和性能數(shù)據(jù)進(jìn)行實(shí)時(shí)收集、分析和展示的過(guò)程。通過(guò)監(jiān)視,我們可以了解系統(tǒng)的運(yùn)行狀況、負(fù)載情況以及資源使用情況,以便及時(shí)采取措施預(yù)防或解決潛在的問(wèn)題。常見(jiàn)的監(jiān)視指標(biāo)包括:

  • 請(qǐng)求量和響應(yīng)時(shí)間:跟蹤API網(wǎng)關(guān)收到的請(qǐng)求數(shù)量以及處理請(qǐng)求所花費(fèi)的時(shí)間。
  • 錯(cuò)誤率:記錄API網(wǎng)關(guān)處理請(qǐng)求時(shí)發(fā)生錯(cuò)誤的次數(shù),包括HTTP錯(cuò)誤碼和自定義錯(cuò)誤。
  • 系統(tǒng)資源使用率:監(jiān)控CPU、內(nèi)存、磁盤和網(wǎng)絡(luò)的使用情況,以確保系統(tǒng)資源充足且沒(méi)有資源瓶頸。
  • 請(qǐng)求隊(duì)列長(zhǎng)度:跟蹤等待處理的請(qǐng)求隊(duì)列的長(zhǎng)度,以防止請(qǐng)求堆積導(dǎo)致性能下降。
  • 流量趨勢(shì):了解API的請(qǐng)求流量趨勢(shì),幫助預(yù)測(cè)系統(tǒng)的負(fù)載情況。

監(jiān)視可以通過(guò)各種監(jiān)控工具和服務(wù)實(shí)現(xiàn),例如Prometheus、Grafana、DataDog等。監(jiān)視的結(jié)果可以以圖表、儀表板或警報(bào)的形式展示,讓開(kāi)發(fā)人員和運(yùn)維團(tuán)隊(duì)能夠?qū)崟r(shí)了解系統(tǒng)的狀態(tài),做出相應(yīng)的優(yōu)化和調(diào)整。

日志記錄(Logging)是指在API網(wǎng)關(guān)和系統(tǒng)中記錄關(guān)鍵事件、狀態(tài)和錯(cuò)誤信息的過(guò)程。日志記錄是一種用于跟蹤和調(diào)試的重要工具,可以在出現(xiàn)問(wèn)題時(shí)提供有價(jià)值的信息,幫助開(kāi)發(fā)人員快速定位問(wèn)題并進(jìn)行故障排查。常見(jiàn)的日志記錄內(nèi)容包括:

  • 請(qǐng)求和響應(yīng)日志:記錄API網(wǎng)關(guān)收到的每個(gè)請(qǐng)求以及對(duì)應(yīng)的響應(yīng),包括請(qǐng)求頭、請(qǐng)求體、響應(yīng)碼、響應(yīng)內(nèi)容等。
  • 錯(cuò)誤日志:記錄API網(wǎng)關(guān)處理請(qǐng)求時(shí)發(fā)生的錯(cuò)誤,包括異常、HTTP錯(cuò)誤碼等。
  • 安全日志:記錄與安全相關(guān)的事件,如認(rèn)證失敗、授權(quán)拒絕等。
  • 性能日志:記錄請(qǐng)求的處理時(shí)間、資源使用情況等性能指標(biāo)。
  • 跟蹤日志:在多個(gè)微服務(wù)或后端服務(wù)之間,記錄請(qǐng)求的追蹤信息,幫助跟蹤請(qǐng)求的路徑和處理過(guò)程。

日志可以存儲(chǔ)在本地文件系統(tǒng)、數(shù)據(jù)庫(kù)中,也可以通過(guò)日志聚合工具(如ELK Stack:Elasticsearch、Logstash、Kibana)進(jìn)行集中管理和分析。日志記錄不僅在故障排查時(shí)有用,還可以幫助分析用戶行為、監(jiān)控安全風(fēng)險(xiǎn)等。

綜合來(lái)說(shuō),監(jiān)視和日志記錄是在API網(wǎng)關(guān)和系統(tǒng)中實(shí)現(xiàn)可觀察性和故障排查的重要手段。通過(guò)監(jiān)視和日志記錄,我們可以及時(shí)發(fā)現(xiàn)潛在的問(wèn)題,優(yōu)化系統(tǒng)性能,并提供更好的用戶體驗(yàn)。

三、總結(jié) 

本文通過(guò)分析客戶端向服務(wù)器發(fā)送一個(gè)HTTP請(qǐng)求的經(jīng)典流程,講解了網(wǎng)關(guān)及其主要作用,因?yàn)槊總€(gè)公司的業(yè)務(wù)不一樣,所以上述過(guò)程也會(huì)有差異,另外,因?yàn)槊總€(gè)公司基礎(chǔ)服務(wù)的完善程度不一樣,所以對(duì)網(wǎng)關(guān)的實(shí)現(xiàn)不一樣。

比如:有些小公司因?yàn)闃I(yè)務(wù)流量小,直接使用了Nginx充當(dāng)了網(wǎng)關(guān),然后購(gòu)買了一些云安全服務(wù),而有些業(yè)務(wù)體量大的公司,需要單獨(dú)開(kāi)發(fā)API網(wǎng)關(guān)然后集群部署。

總之,網(wǎng)關(guān)就是后端服務(wù)器的一座保護(hù)傘,它對(duì)于來(lái)自客戶端的請(qǐng)求,起到了屏障作用。

責(zé)任編輯:趙寧寧 來(lái)源: 猿java
相關(guān)推薦

2024-07-30 08:22:47

API前端網(wǎng)關(guān)

2023-12-21 21:39:44

2020-07-07 07:54:01

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

2020-12-04 09:11:50

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

2023-09-18 15:36:37

物聯(lián)網(wǎng)物聯(lián)網(wǎng)生態(tài)系統(tǒng)

2024-04-10 10:11:14

藍(lán)牙藍(lán)牙網(wǎng)關(guān)

2023-04-28 10:46:52

2022-07-07 16:48:10

API應(yīng)用安全

2022-01-10 13:06:13

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

2015-05-08 17:24:41

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

2023-06-26 18:13:56

開(kāi)源API

2023-11-06 07:23:06

API開(kāi)發(fā)生態(tài)系統(tǒng)

2020-10-16 19:14:48

物聯(lián)網(wǎng)網(wǎng)關(guān)物聯(lián)網(wǎng)IOT

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ò)

2024-09-03 13:59:37

2021-07-26 08:12:31

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

2021-11-23 06:02:20

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

2023-11-29 10:11:52

2020-03-26 10:41:02

API網(wǎng)關(guān)大公司
點(diǎn)贊
收藏

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