教你 4 步搭建彈性可擴充套件的 WebAPI
作者 | 蕭起 阿里云云原生團隊
本文整理自 《Serverless 技術公開課》 ,“Serverless”公眾號後臺回覆“入門”,即可獲取 Serverless 系列文章 PPT。
導讀:本節課程主要分為三個部分,基本概念中介紹基於函式計算的 WebAPI 與普通的 WebAPI 的區別及優勢;開發流程中介紹如何在函式計算的控制檯進行 WebAPI 的開發;操作演示中會例項演示函式計算 WebAPI 的開發過程。
基本概念
常見的 WebAPI 架構如上圖所示,主要包括客戶端(瀏覽器)、伺服器、資料庫,WebAPI 由伺服器提供,同時伺服器要完成負載均衡、登入鑑權的相關操作。
當客戶端流量快速增大時,伺服器端只能通過水平擴充套件加機器的方式來增加提高服務能力。
這種常規模式主要有兩點侷限性:
-
技術同學除了開發業務程式碼,有大量的伺服器運維成本,來保證服務的穩定性、可用性,技術同學要花費很多時間進行運維工作,佔用開發時間,降低專案研發效率。
-
流量突然增加時,需要水平擴充套件加機器,彈性的響應能力差,擴容速度往往要數十分鐘,無法實現秒級極速擴容,導致一段時間內的服務能力不足。同時當流量變少時,難以做到及時縮容,造成機器的成本浪費。
基於函式計算的 WebAPI 架構如上圖所示,與常規的 WebAPI 架構相比,客戶端和資料庫未發生變化,但伺服器變化巨大,主要體現在:
-
之前需要開發團隊維護的路由模組以及鑑權模組都將接入服務商提供的 API 閘道器係統以及鑑權系統,開發團隊無須再維護這兩部分的業務程式碼,只需要持續維護相關規則即可。
-
在這個結構下,業務程式碼也被拆分成了函式粒度,不同函式表示不同的功能。
-
我們已經看不到伺服器的存在,是因為 Serverless 的目的是讓使用者只關注自己的業務邏輯即可,所以一部分安全問題、資源排程問題(例如使用者量暴增、如何實現自動擴容等)全都交給雲廠商負責。
-
相對於傳統專案而言,傳統專案無論是否有使用者訪問,服務都在執行中,都是有成本支出,而 Serverless 而言,只有在用去發起請求時,函式才會被啟用並執行,且會按量收費,可以實現在有流量的時候才有支援,沒有流量的時候就沒有支出,相對來說,成本會進一步降低。
開發流程
1. 登入函式計算控制檯,建立應用
可以通過兩種方式來建立應用,如果是已有的 Web 專案,可以選擇上圖中的第一種方式:“常見 Web 應用”;對於新專案則推薦使用第二種方式:“基於模板建立應用”。我們這裡使用模板方式,選擇基於 Python 的 Web 應用。
模板可以當做應用腳手架,選擇適合的模板,可以自動完成相關依賴資源的建立,如角色、OSS、域名閘道器等,降低開發成本。
2. 新建函式
在應用下,建立函式,我們是開發 WebAPI,所以選擇“HTTP”函式,這種函式會將指定的 http 請求作為觸發器,來排程對應函式的執行。
函式新建好之後,是個返回 helloWorld 的 demo,我們在此基礎上來開發我們的業務邏輯。
首先介紹下上圖程式碼中的 handler 函式,這個函式是入口函式,http 觸發器接收到呼叫後會通過這個入口來啟動整個函式。函式有兩個入參,environ 和 start_response:
- environ
environ 中主要包含兩部分內容:http 請求的入參和函式執行上下文 fcContext,函式上下文引數中包含一些函式執行時的資訊(例如 request id 、 臨時 AK ),您在程式碼中可以使用這些資訊。資訊型別是 FCContext。
- start_response
該引數主要用於生成 http 請求的 response。
3. 配置觸發器,繫結域名
在新建函式時會自動建立一個 http 觸發器,這個觸發器的路徑是“aliyun.com”的一個測試路徑,只能用於測試,真實的應用需要通過自定義域名將真實域名與函式繫結,這樣訪問指定域名時,對應函式就會被觸發執行。
4. 日誌與監控
在每個函式編輯頁面,日誌和監控服務,函式的每次執行都會生成唯一的 requestId,日誌中通過 requestId 進行查詢,看到本次函式執行的所有日誌。
操作演示
點選連結即可觀看演示視訊: https://developer.aliyun.com/lesson_2024_18999
課程推薦
為了更多開發者能夠享受到 Serverless 帶來的紅利,這一次,我們集結了 10+ 位阿里巴巴 Serverless 領域技術專家,打造出最適合開發者入門的 Serverless 公開課,讓你即學即用,輕鬆擁抱雲端計算的新正規化——Serverless。
點選即可免費觀看課程:https://developer.aliyun.com/learning/roadmap/serverless
Serverless 公眾號,釋出 Serverless 技術最新資訊,彙集 Serverless 技術最全內容,關注 Serverless 趨勢,更關注你落地實踐中的遇到的困惑和問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69953029/viewspace-2718758/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 可擴充套件性套件
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- 提高擴充套件性套件
- bash的特有擴充套件屬性套件
- 編寫可擴充套件程式套件
- Swift 擴充套件 Storyboard 屬性Swift套件
- 聊聊如何讓你的業務程式碼具有可擴充套件性套件
- Spring擴充套件介面(4):InstantiationAwareBeanPostProcessorSpring套件Bean
- Node v4 – 字串的擴充套件字串套件
- 手把手教你配置php的redis擴充套件PHPRedis套件
- 實用的可選項(Optional)擴充套件套件
- dubbo是如何實現可擴充套件的?套件
- MySQL - 擴充套件性 2 擴充套件策略:氪金氪腦任君選MySql套件
- 實現近乎無限可擴充套件性的7種設計模式套件設計模式
- [譯] 論資料流的擴充套件性套件
- MySQL Sharding可擴充套件設計YMMySql套件
- MySQL 複製 - 效能與擴充套件性的基石 4:主備切換MySql套件
- 可擴充套件的使用者表設計套件
- dubbo是如何實現可擴充套件的?(二)套件
- 雲端CRM系統排名:靈活性與可擴充套件性的較量套件
- aardio教程) 搭建自己的擴充套件庫倉庫套件
- 讀構建可擴充套件分散式系統:方法與實踐15可擴充套件系統的基本要素套件分散式
- COLA的擴充套件性使用和原始碼研究套件原始碼
- 基於Apache Spark以BigDL搭建可擴充套件的分散式深度學習框架ApacheSpark套件分散式深度學習框架
- SAP S/4HANA擴充套件欄位建立過程的單步除錯套件除錯
- 重構聚合支付案例教你如何寫出高擴充套件性易讀的程式碼套件
- 可擴充套件性對物聯網管理系統有哪些影響?套件
- OAM v1alpha2 新版:平衡標準與可擴充套件性套件
- Django內建許可權擴充套件案例Django套件
- 擴充套件.Django-許可權系統套件Django
- ?用Chrome擴充套件管理器, 管理你的擴充套件Chrome套件
- Kubernetes 節點彈性擴充套件實踐元件 Amazon Karpenter:部署 GPU 推理應用套件元件GPU
- 可擴充套件物件導向的canvas畫圖程式套件物件Canvas
- 簡要剖析:可擴充套件的微服務架構套件微服務架構
- WPF如何封裝一個可擴充套件的Window封裝套件
- MySQL 8.0:無鎖可擴充套件的 WAL 設計MySql套件
- 谷歌的三大可擴充套件核心架構谷歌套件架構