一文拆解Faas的真實案例

歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~前端

本文來自騰訊雲技術沙龍,本次沙龍主題爲Serverless架構開發與SCF部署實踐python

劉敏潔:具備多年雲計算行業經驗,曾任職於華爲、UCloud等企業擔任產品開發、產品經理。目前負責騰訊雲API生態的推廣,幫助開發者進行API網關與無服務器函數、容器、微服務等產品的結合使用,提供完整解決方案。算法

img

此次咱們主要介紹面向於API網關和SCF深度結合應用,API網關與SCF結合能夠造成比較完整的Serverless方案。數據庫

今天的內容分爲四部分:第一,API網關這個產品自己的簡單介紹和一些能力。第二,API網關和SCF也就是是咱們無服務器函數結合使用的時候提供了哪些能力跟它結合方便你們使用。第三,在比較經常使用的場景中咱們總體的使用架構以及如今客戶真正使用的案例。最後是你們關心的費用問題。小程序

咱們作API網關這個產品的初衷不僅僅是必定說跟SCF強綁定的,是在用戶使用中,遇到了不少問題。那麼最開始咱們爲何會作這個產品?在場你們多數都是作開發的應該很清楚了,好比前端的調用方式愈來愈多了,後端的部署方式愈來愈多了,能夠用本身的物理機,能夠買一個雲主機,能夠搞一個容器,能夠像使用如今更新的微服務,無服務器計算。那麼在這種複雜的狀況下前端和後端的耦合就會形成業務上在擴容,在作一些新的業務增長的時候變得麻煩。那麼此時,解耦就變得異常重要。後端

市面上也有一些API網關這樣的開源產品,可是運維的成本,費用問題也會分攤到每一個開發同窗身上,既然如此咱們就在想何不作一個以服務的形式提供API網關能力的產品給客戶呢。因此有了今天給你們介紹的API網關這樣一款產品。跨域

img

API網關在通常場景下怎麼使用的?有一個很簡單的電商例子,多數狀況下客戶後端有不少的業務模塊,有商品、用戶這些經常使用的業務模塊。若是在之前,多是前端的APP,小程序,直接調用這些模塊,後端也是以API形式提供給前端調用的。可是前端須要理解每一個模塊的API。如今咱們提供API網關服務,客戶在使用API網關後,咱們建議客戶把他們的每一個業務模塊跟咱們API網關進行對接。由API網關統一輸出一個API提供給前端調用。包括前面說的小程序,外部API,都是這樣的一種能夠在前端調用的方式。瀏覽器

其實用一句話來總結一下,咱們API網關這個服務是什麼呢?就是API的一個託管服務,能夠對多種後端能力進行統一的管理,輸出無狀態服務的API給到前端調用。用戶能夠在API網關上建立API,發佈API,上線、下線等。包括建成限流,監控這樣的一些能力,這些能力在解耦過程當中都是很是須要的。安全

img

這裏總結了幾個比較大的能力點:首先,統一鑑權認證,這是很是重要安全防禦的能力。API轉化和隱藏,像參數,位置,名稱均可以作轉化和映射,通過映射後真正的調用者不必定拿到這些後端的真實數據。服務器

流控和配額也是常見的能力,一般後端業務資源實際上是有限的,因此前端須要將API的QPS和配額作限制。另外還有輸出API能力,如今騰訊雲提供了API市場,若是用戶後臺有一些業務,有一些能力,有一些數據,想經過API提供出去給第三方夥伴直接進行售賣,均可以經過這個網關輸出到API網關進行直接售賣。

自動化文檔和SDK這個能力呢,實際上是針對方便調用者進行調用的,若是咱們有了業務後再手寫文檔,這個工做量也很大,因此API網關能夠自動幫助客戶生成文檔,還有SDK供客戶調用。

強負載能力,騰訊雲API網關依賴於騰訊大的負載平臺,能夠應對大的突發請求不害怕大的負載,性能方面是頗有保證的。最後,API網關能夠對API進行安全防禦,對調用API原IP作白名單。

img

這裏實際上是比較完整的流轉方式。API網關分兩種角色:一個是發佈API的人,一個是調用API的人,他們多是同一些人,也多是分別兩撥人。發佈者先把API發佈到API網關中,參數,認證,鑑權,映射等等都須要進行配置,發佈者配置後能夠直接在API網關控制檯上進行調試,在控制檯上看看這個通不通,後臺響應正不正常,Ok不Ok。若是調試都成功了進行API的發佈。發佈後就能夠把API提供給調用者了。

那麼API網關怎麼提供API給調用者呢?咱們的服務實際上是以域名的形式提供給調用者的。咱們會提供默認的二級域名。固然客戶有本身的域名,也能夠把這個域名綁到咱們二級域名上。另外API網關能夠生成文檔SDK,提供給調用者。調用者直接使用文檔、SDK能夠方便的調用。調用後,前端請求到API網關後,API網關會根據以前發佈的配置作一些認證,鑑權這樣一些基礎的校驗。到後端咱們會作參數的映射,最終把這個請求發到後端業務。其實後端能夠對接不少雲服務,像SCF,像其餘雲服務通通都是能夠對接的。固然今天主角是無服務器函數,因此咱們主要講一下對接到SCF。對接後它會拉起它的服務響應,根據響應看是否是作一些映射,最後把結果丟會調用者。在這個過程當中發佈者能夠看到監控的信息是怎樣,也能夠查詢到調用。若是調用失敗,或者有什麼錯誤,是前端的仍是後端的,整個日誌都是能夠查詢到的。這是一個比較完整的流程。

img

咱們如今能夠看一下API怎麼跟SCF結合使用。其實很簡單,前面是API網關作一個觸發器。用觸發器的形式來觸發SCF後端的函數。而後SCF作一些計算處理,結束後它可能落到後邊的像數據庫這些服務,在圖中的沒有畫出來。這種方式如今APP,小程序都是很經常使用的,包括給第三方合做夥伴,就是它們直接提供API給第三方合做夥伴,不走任何的平臺,這種都是很是經常使用的一種方式。

img

安全與限流,剛剛在咱們整個功能裏其實有作了一個簡單的說明。這裏分幾塊說:第一,咱們提供認證能力。認證的能力像密鑰對是如今經常使用的認證方式,咱們在網關上生成密鑰對,把這個提供給調用者。這個密鑰對經常使用是服務器端對服務器端。也有像用OAuth這種單點登陸,客戶有本身認證服務器的,咱們也是支持的,能夠去用API網關對接認證服務器。認證服務器去對調用作認證鑑權,而後咱們在作一些校驗。這是對整個認證管理作一個安全性的保障。

其實還有剛纔說的源IP黑白名單。這個常見於你們內部用的,好比我是一個大的公司,內部幾個部門之間用。另外限流的部分,當後端業務能承載的QPS有限的時候,在API這邊作一個限流控制,若是超過這個QPS,就把這個調用丟掉,後端不會過載。

img

CORS,如今跨域的調用很是多的,好比電商,還有一些WEB頁,像CSS、JS靜態調用,訪問時須要瀏覽器跨域調用。當請求是跨域請求時,API網關會根據發佈者的配置作一些處理,好比配置支持跨域,API網關會把這個CORS頭去。直接響應回來後咱們再把CORS頭放回響應中。這完成的是跨域調用。這樣的話其實對SCF開發者會比較方便使用,就不用再操心跨域的問題。

img

響應集成這種也是常見的使用,用戶開發小程序時的場景也是響應集成可能比較經常使用到。好比在對接前面的接口時,須要把SCF抽取成真正的HTTP格式請求返回給前端。API網關與SCF之間一樣爲HTTP請求,SCF函數返回的響應在響應透傳模式時,會被所有放進API網關的響應body中,返回給調用者。這樣的話能夠直接對接不少已經有一些規範,已經有一些接口的,像小程序這種,會不適用這種方式。那麼就須要API網關把SCF的響應抽取爲一個標準HTTP的respond返回個標準接口。

img

Websocket能力算是在函數計算裏的一個難點,由於自己函數不是常駐的,好比說這個函數跑一跑,在沒有觸發的時候,可能有一個時間段過去後,目前的資源就釋放掉了,下次再觸發的時候再拉起來,這很難跟前端保持長鏈接。那咱們怎麼幫SCF處理長鏈接問題的呢?API網關會幫每個前端的調用者生成一個惟一的ID,這個ID就註冊到後面客戶的業務函數裏。當客戶業務函數須要推送的時候,他只要帶到這個惟一ID給API網關,API網關就會將這個惟一ID的消息丟給前端,這樣咱們惟一ID和前面的鏈接保持了長鏈接,也保證了後端推送的正確性。舉個例子,一個聊天室,有三我的聊天,范冰冰,李晨和黃曉明。他們三個都有惟一ID。黃曉明發出來一句話,後面的函數收到這句話,而且要把他說的話推送給范冰冰和李晨,那麼經過惟一ID,能夠識別到三我的,後端業務將黃曉明ID的聊天語句推送到API網關,告訴API網關要將此信息推送給范冰冰和李晨ID的前端,API網關收到信息後,則將此信息推送到與范冰冰李晨的客戶端保持的長鏈接中,他們就看到了這條信息。這就是處理Websocket長鏈接的方式。

img

開放到API市場上,剛纔咱們也簡單說了一下,其實不少能力,咱們本身一些能力和數據想直接開放出去給別人,可是並不想作一個頁面,計費流程,那麼能夠放到API市場來進行售賣。其實後端業務放到SCF上是提供服務的一種方式,這樣有些用戶業務是放在API市場上來進行售賣的。這是把咱們技術能力變現的一種方式。

img

文檔與SDK剛纔也說了不少,這裏再來介紹一下。若是用戶配了10個API,API網關會幫用戶生成這10個API的文檔和SDK。swagger文檔有點像代碼式的文檔另外還有普通文字描述的API文檔,這兩種咱們都能生成。生成後能夠直接下載下來提供給別人。SDK中有鑑權相關的代碼,調用者使用時把本身的參數填進去,對調用者來講更方便。

img

高併發,這裏咱們仍是想強調一下,API網關能夠扛住很是很是大的併發請求。當用戶請求的併發量極大時,而且有大量HTTPS時,大量請求十分消耗CPU。ABI網關的高性能,及時HTTPS請求的異步處理,能夠應對高併發場景,保證服務可用。

img

場景方面,剛纔說的是一些具體功能,咱們能幫SCF作哪些具體的能力。在總體結構的使用場景這裏作一些介紹,這裏是小程序公衆號,電商這種業務場景如今使用的一些客戶的架構,客戶的不少業務模塊放到SCF上面,而後用API網關做爲API服務提供出去。前端不管是小程序仍是APP只要有鑑權,有密鑰對均可以來進行調用。後端根據本身的業務去跟MySQL等能力來進行對接。

img

剛剛這種方式,像樂凱撒是一個很典型的例子。他們把他們的菜單系統,還有微信支付都放在SCF上面。前端會對接一些固有的HTTP接口,因此用了咱們的響應集成的能力,就是API網關幫他抽取成一個標準的HTTP響應返回給前面的調用者。另外由於有不少圖片靜態資源,他們也使用了跨域能力,這樣後端上線的時候很是快。樂凱撒如今有一個小程序用戶能夠直接在上面下單買披薩,這個小程序中的不少能力是使用上述架構完成的。他們的ERP也有一些後臺的系統,也是直接在SCF上進行後臺計算,用API網關直接出接口。其實不少能力能夠複用,那麼API自己就能夠進行復用。這樣的開發流程,會讓整個上線過程很是的迅速。

img

如今用的多的還有AI推理和翻譯。用戶將自身的計算模型,翻譯模型等放在SCF上,每次經過API網關觸發來觸發計算。API網關將請求帶來的數據給到後端,並對每一個請求作鑑權認證或ACL管理保障使用的安全性。

img

比較典型的就是搜狗,搜狗在這裏其實有一個翻譯推理的模型,放在SCF上, SCF跑在GPU上,而後經過API網關作觸發。這裏用API網關主要是想作先後的解耦。由於搜狗的業務自己解耦是C++寫的,全部的請求都是用http的方式傳遞,請求端和後臺解耦合後,不少後端業務再也不須要用python重寫。

img

荔枝微課是一個在線教育課程。它的狀況是,後端SCF跑了一個模型計算。每次當客戶在他的頁面上搜某個課程。它的前端會把這個課程,用戶感興趣的課程信息,包括客戶的ID,以前的一些信息帶到後端帶給SCF。SCF模型拿到了客戶信息,它自己也會有一些本身的原有的信息,這些信息結合起來,再根據其算法進行計算。最後得出的結論,這個客戶喜歡某些課程,再把這個課程推送到前端來,最終展現在WEB頁上。在這個中間,其實API網關和SCF解耦的時候,對API網關的模型調用,須要有安全保證的,就是有不一樣IP的時候有源IP調用,還有密鑰對的鑑權對後端進行安全保障。另外若是說這個SCF或者調用有任何問題的話,監控報警也是能夠快速讓我感知到這個模型的狀態。

img

最後看一下費用,咱們費用也是有很大力度減免的,每個月有一百萬次的免費調用。網絡費用跟公網的的價格是同樣的,調用次數0.04元/萬次。目前沒有收費,預計到年末收費。可是整個資源費用是很是便宜的,因此若是有想試用的同窗不用很猶豫。

Q:主要想請問涉及到有時候有本身的線上環境和咱們的測試環境,我想知道咱們如今若是使用大家的API網關還有SCF,咱們怎麼去部署這樣兩套環境?怎麼樣去完成像咱們如今使用的這些持續集成,怎麼結合到我現有的產品?由於我目前看到的展現都是基於控制檯,沒有看到說基於CLI的操做,因此想了解一下。

A:其實咱們API網關有環境管理和版本管理。版本管理也分了環境,測試環境這些標準環境。後續還會開放這些環境讓用戶自定義這些環境。CLI部分我理解須要在公臺操做,仍是命令行操做,自己跟我提不提供環境管理,版本能力應該是兩個事情。因此CLI後續會提供。可是自己須要的開發和測試環境咱們已經分環境提供。

Q:新的代碼更新後要上線到SCF上怎麼部署?

A:後面咱們會作一個工具,在這個工具上,好比CLI,能夠一鍵上傳,而且配一些API網關。目前這個都在開發中。

Q:怎麼樣買服務器便宜,怎麼樣買按調用次數的偏移?

A:這個仍是須要你自己業務來計算一下。好比說我這個業務就是一個觸發型的業務,我若是用一個CPM或者物理機部署的話,若是常駐型的話須要佔到多少錢,這個錢實際上是固定的,每月須要多少錢。可是若是我知道這個業務是觸發型,假如天天就調用一萬次,這個也是能算出來的錢。這個錢一比較就很簡單就出來了。可是這個都得基於你自己業務的調用量和你自己業務後端消耗資源的狀況來進行計算的。因此我無法兒給你一個直接的值。

若是真的須要一個常駐的業務,一天二十四小時一直在跑的話,其實這個也是要看,這二十四小時在跑的,我對我自己的服務器個人消耗狀況,好比說我買完了一臺服務器,市面上的服務器可能就那麼多,或者說CPM就那麼多,即使買了最小的4核服務器都沒跑滿,若是計算很輕量無法兒跑滿的話,用SCF也會很划算。可是須要大量的,可能用自己的傳統的方式會比較簡單。

Q:在調用的穩定性,延時方面Serverless會有優點嗎?

A:其實調用的穩定性是咱們服務穩定性的保障,這個不用擔憂,由於咱們有承諾。至於延時,是有不少因素影響的,若是你是公網調用,這基於網絡的一些狀況。若是說API網關到SCF結合的話,自己API網關和SCF能夠走內網和公網。API網關自己的延時是在毫秒級別,這個咱們測試過的,仍是很小的。若是部署一個服務器或者資源,你到那個網絡之間的延時,你本身自己原來延時是多少仍是要算一下。我能夠告訴你咱們的延時自己是多少,在可測的環境下咱們的延時是多少。可是到大傢俱體的網絡環境下仍是要具體測量的。

本文PPT附件請點擊原文下載。

問答

Serverless:如何刪除一個函數?

相關閱讀

多個場景中的AI落地實踐

低於0.01%的極致Crash率是怎麼作到的?

【每日課程推薦】機器學習實戰!快速入門在線廣告業務及CTR相應知識

此文已由做者受權騰訊雲+社區發佈,更多原文請點擊

搜索關注公衆號「雲加社區」,第一時間獲取技術乾貨,關注後回覆1024 送你一份技術課程大禮包!

海量技術實踐經驗,盡在雲加社區

相關文章
相關標籤/搜索