天天看點

Serverless 初探

什麼是 Serverless

Serverless架構,或者稱為無伺服器架構,是最近幾年新冒出來的一種架構風格。這究竟是一種什麼樣的架構?無伺服器,就是真的沒有伺服器了麼?其實,對于Serverless來說,隻是使用者不用更多的去考慮伺服器的相關内容了,無需再去考慮伺服器的規格大小、存儲類型、網絡帶寬、自動擴縮容問題了;同時,也無需再對伺服器進行運維了,無需不斷的打系統更新檔、應用更新檔、無需進行資料備份、軟體配置等工作了。

但是沒有伺服器,如何來将程式、應用運作起來呢?這裡要介紹的是Serverless下包含的兩個概念:函數即服務,Function as a Service FaaS,後端即服務,Backend as a Service BaaS。

函數即服務 FaaS

函數即服務 FaaS,作為一種新的計算能力提供方式,讓使用者抛棄了對伺服器的配置和管理,僅需編寫和上傳核心業務代碼,交由平台完成部署、排程、流量分發、彈性伸縮等能力。FaaS的出現,會從底層開始變革計算資源的形态,提供了一種新的方式來提供計算資源,同時也會給軟體架構與應用服務部署帶來新的設計思路,進一步降低雲計算的使用門檻,推動全行業在服務架構上的創新步伐。

後端即服務 BaaS

後端即服務 BaaS,其實大家已經使用很久了,這裡的後端,指的就是各種雲産品和雲服務,例如對象存儲COS​,消息隊列CMQ,雲資料庫CDB、TDSQL,雲緩存CRedis、CMemcached,甚至到各種以 API 形式提供的服務如萬象優圖 CI,視訊處理 VC。這些産品或服務,使用者直接開通即可使用,無需考慮部署、擴容、備份、優化、安全等各種運維工作,做到了開箱即用,無需自己去進行伺服器或應用的維護和管理,是以同樣也是Serverless的一部分。

為什麼要 Serverless

介紹了什麼是Serverless,但是為什麼會出現 Serverless,或者為什麼要使用 Serverless 呢?我們這裡可以從三個方面來看看,這三個方面可以類比為:天時,地利,人和。

天時,這裡突出的時,即時間。傳統的伺服器模式,應用上線前,還得完成伺服器準備,環境部署,資料庫準備,存儲準備等各種工作;上線後,還得面臨計算擴容,存儲擴容,資料庫維護和擴容等各種運維工作。這這個過程中,應用上線和疊代的時間、節奏,受限于各種準備和維護工作。而利用Serverless,通過使用SCF産品,專注于完成業務相關的核心代碼,通過直接使用COS,CDB,CMQ,CRedis等産品,解決資料存儲,資料庫,消息隊列,緩存等問題,不再費心運維,而專注在業務開發和疊代上,能更快的完成應用上線,在這個網際網路加速發展的時代,做到一步領先,步步領先。

地利,這裡突出的利,即費用支出。傳統的伺服器模式,無論有沒有使用者正在通路,應用始終要保持運作,而在有使用者通路時,又要關注伺服器的資源使用率,在使用率達到一定程度時就要考慮擴容,避免突發通路量導緻的資源不足。在這個過程中的費用,始終是有一部分為未使用的計算資源而支付。而 Serverless 架構,能確定所有的費用,都是用在了實際的程式運作、資料存儲、使用者通路中。SCF 雲函數的計費方式,就是通過函數的調用次數和執行時間來統計費用,有使用者通路或事件産生,才會有函數執行,才會有費用計算;相反,沒有函數執行時,則沒有費用支出。同理,其他的相關雲産品,也是類似,例如 COS 僅收取存儲、外網流量的費用,CMQ 僅收取請求次數、外網流量費用,CRedis 僅按實際使用記憶體大小收費。據測算,根據不同使用者的應用壓力情況,SCF 能為使用者帶來 30%~70% 的費用節省程度。

人和,這裡突出的是人。傳統的伺服器模式,運維人員要投入大量的精力去維護伺服器、資料庫、存儲等各種基礎設施,解決各種叢集、分布式系統的搭建問題,而實際運維解決自身應用問題的時間,可能隻會占到很小一部分,而開發人員除了對自身業務應用的開發外,也需要投入時間,解決可能存在的各種外圍系統的問題。而 Serverless 架構,無需運維人員再投入到基礎設施中去了,而開發人員也可以全面關注業務系統的開發。SCF 産品,可以讓開發人員直接編寫業務邏輯核心代碼,利用微服務架構,快速上線應用。CMQ,CDB,COS,CRedis 各種雲産品,無需搭建配置,開通即可使用,而将基礎運維工作交由雲來完成。在這種情況下,脫離了基礎運維的運維人員,可以提升自身視野,從更高角度來看待運維工作,實作業務運維;而開發人員,可以充分利用 CICD、DevOps能力,提升整個應用或業務的內建能力。

怎麼用 Serverless

  • 事件觸發:SCF 的工作模式為事件觸發,是以要考慮好觸發方式。例如,利用 SCF 來處理圖檔生成縮略圖,就可以利用 COS 事件,在圖檔檔案上傳 COS 後,上傳事件就能自動觸發函數執行,來生成新的縮略圖并再次存入 COS 中。
  • 無狀态服務:函數需要是無狀态(stateless)的,緩存、日志、資料庫等全部通過CRedis、COS、CDB這類雲産品來支援,這樣才能保證在業務請求突增時服務能迅速擴充。
  • 微服務:事件驅動(event-driven)和無狀态(stateless)屬性正是微服務架構所需要的。是以,在一開始就将自身的應用設計為微服務架構,解耦各子產品間關聯,使得應用成為可生長可進化的系統。