背景介紹
2009年,業界提出DevOps理念。維基百科上給出的定義為“DevOps是軟件開發、運維和質量保證三個部門之間的溝通、協作和集成所采用的流程、方法和體系的一個集合。”
2011年,Forrester發布報告“擴大DevOps至NoOps”,預測在不久的將來,一些企業將越來越多的依賴于云,開發者將能更加自動地進行程序構建(building)、測試與部署等運維操作,最終達到NoOps。
雖然該術語表示這些公司將不再需要運維人員,但是報告本意談論的卻是開發者將使用更加自動化的工具,而這些工具需要更少的人工干預。隨后PaaS被視為是實現NoOps的最佳方式。
2014年,云廠商AWS推出了“無服務器”的范式服務。
最初,“無服務器”意在幫助開發者擺脫運行后端應用程序所需服務器設備的設置和管理工作。這項技術的目標并不是為了實現真正意義上的“無服務器”,而是指由第三方供應商負責后端基礎結構的維護,以服務的方式為開發者提供所需功能,例如數據庫、消息以及身份驗證等。這種服務基礎結構通??梢越凶龊蠖思捶?Backend-as-a-Service,BaaS),或移動后端即服務(MobileBackend-as-a-service,MBaaS)。
但Amazon在2014年發布的AWS Lambda讓“無服務器”這一范式提高到一個全新的層面,為云中運行的應用程序提供了一種全新的系統體系結構。至此再也不需要在服務器上持續運行進程以等待HTTP請求或API調用,而是可以通過某種事件機制觸發代碼的執行,通常這只需要在AWS的某臺服務器上運行一個簡單的功能。一些人將這種模式叫做功能即服務(Function-as-a-Service,FaaS)。
無服務器架構(又稱FaaS)是指企業或個人無需購買、租賃或配置用于支持后端代碼運行的物理或者虛擬服務器。無服務器解決方案通常由Web服務器、FaaS層、安全令牌服務(STS)、用戶驗證以及數據庫等要素組成。
無服務器代碼可以與傳統服務器風格的代碼(例如微服務)結合使用。例如,我們可以將一款Web應用中的部分代碼編寫成微服務形式,而另一部分則可以編寫成無服務器代碼形式?;蛘撸诰帉懼型耆恍枰魏畏掌髋渲靡氐膽贸绦蛞部梢詫崿F無服務器化。
FaaS提供了一個平臺,允許開發人員能夠響應事件執行代碼,而無需構建和維護復雜的基礎架構,只需要經由第三方應用程序或服務來管理服務器端的邏輯和狀態。
無服務器計算的4大弊端
1. 第三方API系統導致的問題
供應商控制、多租戶問題、供應商鎖定以及安全缺陷等,都有可能是由第三方API所導致的問題。在實施API時放棄系統控制可能會導致系統宕機、強迫性API升級、功能缺失、意外限制以及成本變更等后果。此外,多租戶問題也存在于其他云計算框架之中。
Salesforce(PaaS)就因其多租戶云結構而施加了部分監管限制,開發人員在使用Salesforce時必須要盡可能避免相關問題。具體而言,多租戶解決方案往往會在安全性、穩定性以及性能層面存在問題。
2. 操作工具缺失
開發人員依賴供應商為其提供調試與監控工具。一般來說,調試分布式系統的任務非常困難,通常需要訪問大量的相關指標才能確定產生問題的根本原因。
3. 架構的復雜性
開發人員通常需要花費大量時間來評估、實施和測試具體功能,才能最終決定這些功能應該如何進行細分。一次應用程序調用操作中所涉及的功能數量應該保持平衡。管理太多功能無疑將使問題變得更加復雜化,而忽略粒度將最終導致微服務架構變為“迷你整體”架構。
目前,Lambda(亞馬遜網絡服務AWS提供的一種計算服務,其能夠以一種大規模并行方式執行代碼,以響應事件)已經對用戶能夠在所有lambda表達式上運行的并發執行總數作出了限制。其中的問題在于,這個限制是適用于整體AWS帳戶的。一些組織會使用相同的AWS帳戶進行生產及測試。這就意味著,如果組織中的某位工作人員著手進行一項新的負載測試,并嘗試執行1000個并發Lambda函數,那么生產應用程序將立即遭遇拒絕服務(DoS)狀況。
4. 實施的困難性
集成測試無服務器應用程序的難度非常高。與其他體系機構相比,無服務器FaaS(即每項功能)的集成單元要小得多,因此我們需要將大量單元加以集成,方能正常完成測試。此外,也存在一些與部署、版本控制和打包相關的問題。大家可能需要為整體邏輯應用程序中的每項功能單獨部署一項對應的FaaS組件。這也就意味著,您不能以原子性方式對一組功能進行統一部署,而由于不存在版本化應用程序的概念,所以原子回滾(atomic rollback)也無法實現。這樣的話,您可能需要關閉任何觸發相應功能的事件源、部署整體功能組,然后再重新啟動事件源。
總結
無服務器架構是架構領域出現的一種激動人心的新變化,隨著開發人員積極采用 AWS Lambda 等計算服務,這種架構會更為迅速地發展起來。如今,一些無服務器應用程序支持成千上萬個用戶,并執行復雜的操作,包括處理繁重任務,比如視頻編輯和數據處理。在許多情況下,無服務器架構可獲得比傳統模式更好的效果,而且實施起來成本更低、速度更快。但是對于上文所述的有關這種架構的弊端也必須予以高度重視,并努力尋找解決方案應對上述弊端,以推動無服務器架構更加安全、穩定的發展。