官术网_书友最值得收藏!

4.1 Serverless接入層:API網(wǎng)關

本節(jié)主要介紹API網(wǎng)關的基本概念及網(wǎng)關和FaaS聯(lián)動的應用場景。API網(wǎng)關作為接入層服務,是Serverless架構重要的組成部分,通過了解網(wǎng)關和FaaS函數(shù)的結合方式,可以更好地了解并構建Serverless應用架構。

4.1.1 基本概念

當前的軟件服務都由大量API組成,因此如何更好地管理服務對內(nèi)對外的API,成為許多企業(yè)面臨的問題。API網(wǎng)關主要實現(xiàn)了API托管的能力,能夠?qū)PI提供完整的生命周期管理,如API的創(chuàng)建、維護、發(fā)布、測試、下線等。此外,網(wǎng)關通過集成認證鑒權、流量控制、黑白名單、監(jiān)控告警等能力,可以作為通用接入層,對外部的多個終端(Web/H5/iOS/Android/IoT等)提供服務。業(yè)界比較知名的商業(yè)化產(chǎn)品有谷歌Apigee、AWS API Gateway、騰訊云API Gateway等,開源的API網(wǎng)關產(chǎn)品有Kong、Apache基金會頂級項目APISIX等,如圖4-1所示。

053-1

圖4-1 API管理平臺主流產(chǎn)品

許多讀者對于傳統(tǒng)架構下以Nginx為代表的負載均衡(Load Balance,LB)的轉(zhuǎn)發(fā)方式更為熟悉,相對于負載均衡,API網(wǎng)關提供了更加抽象的管理能力,并支持一些高級配置。分析和對比業(yè)界較為成熟的API網(wǎng)關產(chǎn)品,可以看出它們主要覆蓋以下幾個方面的能力。

  • API管理和配置:如API分組、增刪改查等管理能力;基礎配置如協(xié)議支持、CORS跨域、自定義域名等配置,降低了用戶的配置成本。
  • API認證能力:如密鑰支持鑒權、SAML、JWT、OAuth2等認證方式。
  • 多后端支持:除了支持FaaS的對接之外,后端支持主機、容器、微服務架構的接入和轉(zhuǎn)發(fā),且相對于傳統(tǒng)的網(wǎng)關服務而言更加靈活可控。
  • 版本和環(huán)境管理:支持針對API在開發(fā)、測試、發(fā)布等不同環(huán)境的發(fā)布,支持API的版本管理和切換,并提供灰度發(fā)布、回滾等功能。
  • 高級配置:針對IP進行訪問控制,針對API進行流量控制、熔斷、緩存配置等。
  • 導入和導出:支持導入和導出OpenAPI/Swagger等標準規(guī)范,支持生成API文檔和SDK等。
  • 靈活的排障能力:支持多種監(jiān)控指標和時間維度,幫助用戶知悉業(yè)務運行情況;日志支持類似ELK平臺的運算符檢索能力,便于快速定位問題。
  • 安全可靠:自帶高防IP,抵抗DDoS攻擊;具備被攻擊后自動更換IP的能力,最大限度避免業(yè)務損失。

由上述特性可以看出,API網(wǎng)關可以讓用戶專注于核心業(yè)務的開發(fā),無須為接入層投入過多精力,與Serverless的核心理念非常契合。

4.1.2 網(wǎng)關和FaaS的聯(lián)動

FaaS平臺主要基于事件模型,因此網(wǎng)關和FaaS平臺的聯(lián)動也是通過事件觸發(fā)的,并通過特定的event格式進行傳輸。配置網(wǎng)關的后端為FaaS函數(shù),就能實現(xiàn)API接收客戶端請求后觸發(fā)FaaS函數(shù),并將處理結果作為API響應返回給客戶端,流程如圖4-2所示。

054-1

圖4-2 API網(wǎng)關和FaaS請求流程

需要注意的是,上述流程是API網(wǎng)關開啟了集成響應配置后的結果,此時網(wǎng)關會解析FaaS函數(shù)的返回內(nèi)容,并根據(jù)解析內(nèi)容構造HTTP響應。可以通過代碼自主控制響應的狀態(tài)碼、響應頭header、響應體body等內(nèi)容,進而實現(xiàn)自定義格式的響應,例如響應XML、HTML、JSON,甚至JavaScript等格式。因此設置集成響應時,也需要返回特定的數(shù)據(jù)結構給網(wǎng)關。HTTP是目前最主流的傳輸方式,集成響應主要是為了支持HTTP場景而提供的配置。

在Web框架支持的場景下,由于涉及路由,對于HTTP的適配和改造會更為復雜,例如Node.js的Express.js框架、Python的Django框架等。在這種場景下,需要一個中間層或適配層對API網(wǎng)關和FaaS函數(shù)的事件觸發(fā)進行改造,即將JSON結構體改造成標準的HTTP請求,并將HTTP響應轉(zhuǎn)換為API網(wǎng)關標準數(shù)據(jù)結構并返回。在第10章會介紹一個Web服務部署的案例實踐,下面對于FaaS平臺的一些限制和常用配置進行說明。

1. 上傳文件的處理

在傳統(tǒng)架構中,上傳文件可以直接通過POST表單加上文件類型的標簽multipart/form-data的形式實現(xiàn),但在Serverless架構中,由于使用了API網(wǎng)關和函數(shù),涉及客戶端上傳文件到FaaS服務時,一般要用下面兩種方式進行處理。

第一種是客戶端將上傳的文件轉(zhuǎn)換為Base64編碼,API網(wǎng)關再將Base64編碼作為文本傳遞給云函數(shù),由云函數(shù)進行解碼。

第二種是客戶端將文件上傳到對象存儲COS的存儲桶中,再由API網(wǎng)關將上傳文件的對象地址傳遞給云函數(shù),云函數(shù)通過對象地址從COS中拉取文件。

可以看出,當前的兩種處理方式都涉及對服務端和客戶端的改造,并不友好,因此各云服務商也提供了直接通過網(wǎng)關進行請求的Base64編解碼配置,帶給用戶接近原生的上傳文件體驗。關于Serverless架構下的文件上傳方案和效果對比,在4.2.4節(jié)中也有專門的說明和示例代碼,供讀者參考。

2. 請求/響應大小限制

通常情況下,F(xiàn)aaS平臺對同步請求和響應事件大小的限制為6MB ,因此涉及大于6MB的請求時,需要進行切分和優(yōu)化。結合上述上傳文件的限制,網(wǎng)關向云函數(shù)中傳入文件時,若文件在Base64編碼后小于6MB,則將編碼后的內(nèi)容傳入FaaS;若文件在Base64編碼后大于或等于6MB,建議將文件上傳至對象存儲,并將對象地址傳遞給FaaS函數(shù),從而完成大文件的上傳。

3. 集成響應

鑒于網(wǎng)關和函數(shù)的交互方式,對于有HTTP需求的場景,F(xiàn)aaS平臺提供了集成響應的配置,即網(wǎng)關會解析云函數(shù)返回的內(nèi)容,并根據(jù)解析內(nèi)容構造HTTP響應。開啟集成響應后,函數(shù)需要按照特定的數(shù)據(jù)結構返回才能被成功解析。如未開啟集成響應,則網(wǎng)關會將函數(shù)的返回內(nèi)容直接傳遞給API請求方,一般為JSON格式。集成響應返回的數(shù)據(jù)結構如代碼清單4-1所示。

代碼清單4-1 集成響應返回的數(shù)據(jù)結構

{
    "isBase64Encoded": false,
    "statusCode": 200,
    "headers": {"Content-Type":"text/html"},
    "body": "<html><body><h1>Heading</h1><p>Paragraph.</p></body></html>"
}

4. CORS跨域訪問

CORS即跨域資源共享(Cross-origin resource sharing),開啟CORS后,允許瀏覽器向跨源服務器發(fā)出XMLHttpRequest請求,因此涉及跨域請求的頁面需要在API網(wǎng)關開啟該配置。

此外,API網(wǎng)關也能聯(lián)合FaaS服務提供WebSocket協(xié)議的支持,詳細實現(xiàn)可以參考第14章WebSocket外賣點單系統(tǒng)的案例,這里就不再贅述了。

主站蜘蛛池模板: 铜川市| 兰考县| 株洲县| 康平县| 巴彦县| 甘谷县| 石城县| 太康县| 工布江达县| 巴彦淖尔市| 南宁市| 万源市| 萨嘎县| 涿鹿县| 丰台区| 康平县| 临西县| 赞皇县| 新河县| 阿克苏市| 鲁甸县| 神农架林区| 北流市| 临安市| 赤城县| 固始县| 江津市| 政和县| 桐庐县| 瑞丽市| 抚州市| 开平市| 鲜城| 盐亭县| 汽车| 通城县| 霍林郭勒市| 加查县| 永和县| 齐河县| 盐边县|