Serverless,即無服務架構。是指由第三方雲計算供應商以服務的方式爲開發者提供所需功能,例如數據庫、消息,以及身份驗證等。它的核心思想是讓開發者專一構建和運行應用,而無需管理服務器。前端
Serverless 技術的應用通常有兩種:Faas(Function as a Service) 函數即服務和 Baas(Backend as a Service) 後端即服務。git
Serverless 最大的優勢就是自動擴展伸縮、無需本身管理。github
在以往部署一個應用時,須要經歷購買服務器、安裝操做系統、購買域名等等一系列步驟,應用才能真正的上線。後來有了雲服務器,咱們就省去了購買服務器、安裝操做系統這些操做步驟。只須要在雲服務器上搭建環境、安裝數據庫就能夠部署應用了。數據庫
可是這仍然有個問題,當網站訪問量過大時,你須要增長服務器;訪問量太小時,須要減小服務器。若是使用 Serverless,你就不須要考慮這些,雲服務商會幫你管理這一切。雲服務商會根據你的訪問量自動調整所需的資源。後端
當應用部署在雲上,而且使用雲存儲或雲數據庫,那可能會讓咱們的應用訪問速度變得比較慢。由於網絡的訪問速度比內存和硬盤差了一到兩個數量級。性能優化
什麼是函數即服務?服務器
一個函數一般用於處理某種業務邏輯,例如一個 abs()
函數,它將返回所傳參數的絕對值。咱們能夠把這個函數託管到 Faas 平臺,由平臺提供容器並運行這個函數。當執行函數時,只須要提供函數所需的參數,就能夠在不部署應用的狀況下獲得函數的執行結果。網絡
Faas 運行函數的容器是無狀態的,上一次的運行效果和下一次的運行效果是無關的。若是須要存儲狀態,則須要使用雲儲存或者雲數據庫。架構
Faas 函數若是長時間未使用,容器就會對其進行回收。因此函數在首次調用或長時間未使用時,容器就須要從新建立該函數的實例,這個過程稱爲冷啓動,通常耗時爲數百毫秒。框架
既然有冷啓動,就有熱啓動。例如容器剛剛調用完函數,過一會又有新的事件觸發。這時因爲函數仍未被回收,因此能夠直接複用原有的函數實例,這被稱爲熱啓動。
Faas 函數須要經過觸發事件來運行。咱們能夠指定不一樣的觸發器:
...
其中 HTTP 觸發器是最多見的,即經過 HTTP 請求觸發。
像以往咱們購買的雲服務器通常是採起包月、包年的計費方式,即便你買了不用也要收取費用。Faas 採起的是按需付費的方式,雲服務商會根據你的實際使用量來收取費用,不使用不收費(通常來講,Baas 可按需付費,也可包年包月)。
Faas 若是單獨使用的話,那它只適合部署一些工具類函數。由於它是無狀態的,每次運行均可能是在不一樣的容器上,它不知道上一個函數的運行結果。因此若是要使用 Serverless 來部署整個應用,還得額外購買 OSS 雲存儲或者雲數據庫來提供數據存儲服務(也就是須要配合 Baas 來使用)。
什麼是後端即服務?
假設你是一個前端,如今要開發一個網站。前端部分你能夠本身完成,但後端部分怎麼辦呢?這個時候就可使用 Baas 了。也就是說,你只需編寫和維護前端頁面。其餘的一切,例如數據庫、身份驗證、對象存儲等等都由雲服務商提供。你只須要在前端經過 API 調用它們就可使用所需的服務。
Faas 實際上是一個雲計算平臺,用戶能夠將本身寫的函數託管到平臺上運行。而 Baas 則是提供一系列的服務給用戶運用,用戶經過 API 調用。
其餘不一樣點:
能夠說 Faas 和 Baas 是兩個不一樣的東西,但它們有一個共同點,就是無需本身管理服務器和資源的分配、整理,因此都屬於 Serverless。
如今的阿里雲、騰訊雲均可以避免費體驗 Faas,下面以阿里云爲例,演示一下如何使用 Faas。
打開阿里雲 serverless,點擊當即開通:
開通後(阿里雲每月提供必定額度的免費流量,能夠利用這一點來學習如何使用 Serverless)若是沒打開函數計算頁面,請點擊控制檯搜索函數計算:
而後會提示是否受權,受權成功後,就能夠查看剛纔建立的函數。
箭頭所指處是一個 API 地址,調用它能夠觸發你設置的函數。
從剛纔的示例能夠發現,要想編寫 Faas 函數只能在線編寫,或者提早寫好複製到阿里雲。爲了改善這種狀況,如今有不少 Serverless 框架,可讓你在本地進行開發,開發完後再部署到阿里雲或其餘雲上。
在這裏推薦一下 midway 框架,主要是國人開發,具備很是詳細的中文文檔。根據文檔的快速指引,就能夠成功將函數部署到阿里雲或其餘雲上。
Serverless 最大的優勢就是彈性擴容和無需親自管理服務器。即便它也有很多缺點,但相對於優勢來講,是能夠忽略的,近幾年來 Serverless 技術的火熱程度也證明了這一點。目前 Serverless 技術仍有很大的發展空間值得咱們去探索,畢竟仍是一門「出生」不久的新技術。
帶你入門前端工程 全文目錄: