初識Serverless無服務器架構

什么是Serverless

目前,開發人員使用OpenStack或Kubernetes進行業務開發時,仍然需要關心很多和虛機、容器相關的后端工作,如應用的負載均衡,虛機的存儲和計算資源,橫向/縱向的擴展能力,甚至容災穩定性等非專業邏輯的開發。這些后端的運維和開發知識降低了開發者的開發效率。

如果云平臺能自動解決上述問題,讓開發者只專注于業務邏輯,云平臺負責應用的部署和運行,這樣是否可以提升開發效率和產品質量?這種不用關心后端如何支撐服務運行而只需要實現服務本身的理念,稱之為Serverless。

Serverless

Serverless有一個更具有描述性的名字是FaaS(Function as a service),就像IaaS、PaaS、SaaS一樣,FaaS是云計算的一種。通過FaaS,用戶為應用的某一特定功能購買必要的功能。

Serverless也可以指一部分服務邏輯由應用實現,但跟傳統架構不同在于,他們運行于無狀態的容器中,可以由事件觸發、生命周期短暫、完全被云平臺管理。這種思路是Functions as a Service / FaaS。用戶通過云平臺可以運行自定義的代碼(函數),函數是無服務器架構中抽象語言運行時的最小單位。

Serverless的使用場景

Serverless架構主要分為以下特點

  • 實現了細粒度的計算資源分配

  • 不需要預先分配資源

  • 具備真正意義上的高度擴容和彈性

  • 按需使用,按需計費

FaaS

根據Serverless的這些通用特點,歸納出下面幾種典型使用場景,供大家參考

  1. 低頻請求

    在物聯網行業中,由于物聯網設備傳輸數據量小,且往往是固定時間間隔進行數據傳輸,因此經常涉及低頻請求場景。

    例如:物聯網應用程序每分鐘僅運行一次,每次運行50ms,這意味著CPU的使用率為0.1%/小時,這也意味著其實有1000個相同的應用可以共享計算資源。而Serverless架構下,用戶可以購買每分鐘100ms的資源來滿足計算需求,通過這種方式就能夠有效解決效率問題,降低使用成本。

  1. 定制事件

    例如用戶注冊時發郵件驗證郵箱地址,通過定制的事件來觸發后續的注冊流程,而無需再配置額外的應用來處理后續的請求。

  1. 固定時間觸發

    事件觸發固定時間觸發,例如在夜間或者服務空閑時間來處理繁忙時候的交易數據,或者運行批量數據,來生成數據報表,通過Serverless方式,不用再額外購買利用率并不高的處理資源。

  1. 流量突發型事件

    移動互聯網應用經常會面對突發流量場景。例如:移動應用的通常流量情況是QPS 20,但每隔5分鐘會有一個持續10s的QPS 200流量(10倍于通常流量)。在Serverless架構下,開發人員可以利用彈性擴展特性,快速構建新的計算能力來滿足當前需求,當業務高峰后,資源能夠自動釋放,有效節省成本。

使用案例(新浪微博 × 阿里云)

Weibo

用戶需求

微博客戶端上顯示多種格式的圖片,為了適配不同的手機屏幕和操作系統,需要對圖片進行個性化 的處理。微博有海量用戶,系統每日要能處理海量的調用請求,并保持穩定的延時。

解決方案

微博將用戶上傳的圖片存儲到阿里云對象存儲中,在函數中實現個性化的圖片處理邏輯。手機客戶端 獲取圖片時,通過阿里云 CDN 服務回源到函數計算,函數從阿里云對象存儲中下載原圖,實時處理后將結果圖片返回。

使用效果

開發人員只需要專注于圖片處理邏輯的開發,工程效率大幅提高。函數計算自動實時擴容底層計算資源,確保應用在負載動態變化時仍能保持穩定的延時,平滑處理海量的調用請求。使得微博不再為峰值負載預留計算資源,降低了成本。

Serverless的實施

OpenStack中的Serverless方案

Qinling

OpenStack中發起了新的項目,名字叫做 Qinling ( 靈感來自于中國的秦嶺山脈 ),目標就是在 OpenStack 平臺上提供 Function as a Service 的功能。

Qinling利用OpenStack中已有的組件來支撐用戶自定的Function運行。OpenStack提供豐富的IaaS層資源以及用戶驗證( Keystone ),事件監控( Adoh ),負載均衡等功能。用戶自定義Function可以靈活地利用這些資源和服務達到效果。

目前Qinling支持的功能比較簡單,對應的實現也比較簡單:

  • 用戶通過代碼的方式定義Function的行為。
  • 通過Qinling的CLI,指定代碼文件創建Function。
  • Qinling收到請求之后, 獲取用戶指定的代碼文件,生成Docker image,通過Container COE以容器的方式運行用戶定義的Function,執行結束回收這個容器。

最后,值得注意的是,目前Qinling只支持OpenStack Rocky以上版本

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容