天天看點

與微服務一脈相承,Serverless适用何種場景?會帶來哪些沖擊?

與微服務一脈相承,Serverless适用何種場景?會帶來哪些沖擊?

serverless 架構用來描述那些顯著或完全依賴于第三方應用或服務(“在雲端”)的應用程式。這些程式經常是移動端 app 或者是最近幾年比較火熱的單頁 web 應用。這些應用可以完全基于雲的服務進行建構,比如 aws 的 s3 和 dynamodb 或者是阿裡雲的 oss 和 tablestore。

不過,問題在于總是有一些獨立的伺服器邏輯代碼需要運作,傳統的部署方法是使用雲伺服器來進行程序的托管。好在 faas (functions as a service) 的出現改變了這種情況。faas 能夠讓使用者将自己伺服器邏輯代碼以 serverless 的方式托管到雲上,讓使用者以應用函數為機關對應用進行開發、運作、管理,無需基礎設施層面的關心建構和維護工作。

serverless 架構于 2014 年進入大衆視線,aws、谷歌雲、微軟 azure 和 ibm bluemix 等雲廠商提供服務。業界認為,serverless 化可大幅降低 it 成本,将雲的費用減少 10%-90%。可口可樂架構師 patrick brandt 曾向外媒披露,向 serverless 架構轉移是主要出于降低 it 運維費用并且提高服務部署效率。

2017 年 4 月雲栖大會・南京峰會,阿裡雲釋出了函數計算産品。阿裡雲函數計算負責人不瞋認為,從雲計算整體發展趨勢而言,serverless 的出現是意料之中。雲計算的第一階段是基礎設施即服務,使用者能夠使用和調動大規模的計算資源;接下來需要攻關的是如何高效利用資源、更加有效的降低成本,更加彈性的面對業務波動,這就是函數計算的用武之地。infoq 對不瞋進行了專訪,并将内容整理如下。

什麼是 serverless?什麼是 faas?  

其實,廣義的 serverless 覆寫範圍很大,很多雲服務産品可以被視作 serverless 化的。以存儲服務的發展曆程為例:最初常見是雲伺服器,此種情況對使用者熟悉的原有開發方式的模拟,但是需要自行處理雲伺服器當機帶來的資料不可用問題,雲磁盤上的資料也不便于分享;後來,對象存儲(oss),檔案存儲(nas),表格存儲(tablestore),消息服務(mns)等都屬于 serverless 服務。這些服務不再有機器的概念,使用者能夠享受自動的擴容和負載平衡,性能水準擴充,通過 api 友善的讀寫資料,易于共享,并且按實際存儲的資料量以及通路次數付費。此外,類似阿裡雲大資料計算服務(maxcompute) 也是 serverless 的,提供了 mapreduce,和 streaming 等多種計算架構,使用者不需要管理計算資源。

serverless 是一個寬泛的概念,很多存儲、計算和中間件服務都是 serverless 的。而 faas 是 serverless 的子集,也是實作整個應用 serverless 化的核心服務。

faas 的關鍵特征是:事件驅動、細粒度調用、實時彈性伸縮,無需管理伺服器等底層資源。在不瞋看來,faas 興起是對現有技術很好的補充,配合使用已有的雲服務産品,即可以真正建構 serverless 的應用。阿裡雲之是以研發 faas 産品 - 函數計算,也是觀察到在存儲和計算業務中,從 server-base 到 serverless 的演變趨勢和使用者的需求。

serverless 與微服務是一脈相承的  

微服務和 serverless 是契合的,都強調系統的解耦。

将業務邏輯的實作拆分到 function 的粒度再去實作,這種方法其實并不新奇;微服務本身是被越來越廣泛使用的模式,并且已經有 netflix、uber 等公司的成功經驗。使用者完全可以把一個微服務實作為 function。阿裡雲函數計算設計的一個重要目标也是使之成為以微服務方式建構應用的最好平台。微服務式架構其實是很有挑戰的,在拆成成百上千的服務之後,需要高度自動化的釋出部署系統,管理各個微服務之間的依賴。從某種角度而言,serverless 和微服務是不同層面、但又互相促進的:微服務式是開發模式,serverless 是計算平台。

不瞋稱其個人了解是,讓 serverless 這種計算平台變成支撐微服務開發模式的最好的平台。當越來越多公司熟悉并實踐微服務的開發模式,那麼遷移到 serverless 就會更順理成章,因為系統已經被解耦成了衆多松耦合的微服務。

是以,serverless 和微服務的未來發展是互相借力的。一個有力的例子就是,大規模使用微服務的方式建構系統的公司,例如 netflix,也在廣泛的使用 aws lambda 這類 faas 服務來建構 serverless 應用。

但是,微服務化改造并非易事。将一個巨型單體應用以微服務的方式拆分解耦,繼而改造為 serverless 應用,是采用漸進的方式逐漸替換還是完全重寫?這是業界非常關心也經常讨論的問題,不瞋認為需要依據情況而定:有時直接重寫更快;而在系統錯綜複雜的情況下,為了保險起見也可平滑過渡,一點點向微服務化演進。

拆分微服務有三個考量,組織結構(參考康威定律),運維釋出頻率(比如将每周釋出兩次的服務與每兩個月釋出一次的服務進行拆分)和邏輯調用頻度(将高頻調用邏輯和低頻調用邏輯分開,在 serverless 架構下能夠進一步降低成本)。

以上三點需根據業務需求情況進行綜合考量,沒有普适性的優先級之分。

serverless 适用的兩大場景      場景一:應用負載有顯著的波峰波谷

serverless 化與否的評判标準并不是公司規模的大小,而是其業務背後的具體技術問題,比如業務波峰波谷明顯,如何實作削峰填谷。一個公司的業務負載具有波峰波谷時,機器資源要按照峰值需求預估;而在波谷時期機器使用率則明顯下降,因為不能進行資源複用而導緻浪費。

業界普遍共識是,當自有機器的使用率小于 30%,使用 serverless 後會有顯著的效率提升。對于雲廠商,在具備了足夠多的使用者之後,各種波峰波谷疊加後平穩化,聚合之後資源複用性更高。比如,外賣企業負載高峰是在用餐時期,安防行業的負載高峰則是夜間,這是受各個企業業務定位所限的;而對于一個雲廠商,如果其平台足夠大,使用者足夠多,是不會有明顯的波峰波谷的現象的。

    場景二:典型用例 - 基于事件的資料處理

視訊處理的後端系統,常見功能需求如下:視訊轉碼、抽取資料、人臉識别等,這些均為通用計算任務,可由函數計算執行。

開發者需要自己寫出實作邏輯,再将任務按照控制流連接配接起來,每個任務的具體執行由雲廠商來負責。如此,開發變得更便捷,并且建構的系統天然高可用、實時彈性伸縮,使用者不需要關心機器層面問題。

與微服務一脈相承,Serverless适用何種場景?會帶來哪些沖擊?

使用小 tips:函數的執行本身是無狀态的,如果要持久化資料則需使用 oss 等存儲服務。雖然使用者可以使用本地的磁盤,但是需要假定這些資料在函數執行完成後就不再需要了。

serverless 會帶來哪些沖擊?      serverless 不等于沒有運維,但是運維内容變了。  

在 serverless 出現之前,使用者運維時要考慮機器挂了怎麼辦,連接配接數暴漲了怎麼辦等等。

使用者用雲,從某種意義上講是為了提高效率,而效率又分為開發效率、運維效率和成本效率。serverless 之後,運維從事的更多是業務運維,摸清依賴關系,設定監控項進行健康報警。

運維不再負責機器運維,而是業務運維。比如函數 a 調用函數 b,這樣的依賴關系是否合理;從業務邏輯上去評估哪些關鍵路徑需要報警,哪些是允許失敗的。原來的機器運維需要關心配置問題、作業系統、kernel 更新和網絡設定等。是以其實 serverless 更加推動了 devops,ops 工作被改變了,serverless 對開發人員也更加友好。

    長遠而講,會沖擊傳統 paas  

如果 serverless 平台可以解決通用問題,并且有吸引力,那确實會對傳統的雲計算有沖擊;但是,這是個漸進的過程。serverless 可以部署在公有雲、私有雲和混合雲上。(備注:目前阿裡雲推出的産品尚限于公有雲。)

在不瞋看來,cloud-native 應用是指基于各種雲的服務建構的高可用、可伸縮的應用。例如通過函數計算實作控制流邏輯、整合對象存儲、離線資料處理等雲服務,就能快速搭建一個實時彈性伸縮、高可用的業務系統。是以 serverless 是建構 cloud-native 應用的理想方式。

    開發模式和職責的改變  

未來,serverless 一旦流行開來,使用者可以依托于雲計算廠商提供的平台類服務,快速建構彈性高可用的系統,進而專注于業務邏輯的創新。

四問阿裡雲的函數計算      阿裡雲函數計算是不是一種跟風行為?

不瞋稱,函數計算的推出其實是因為客戶在使用過程中産生了這種需求,并且同時也确實契合了雲的發展趨勢。

阿裡雲做産品是由使用者需求驅動,比如觀察到使用者在使用 oss 對象存儲時,通常需要由存儲事件觸發的資料處理。例如在音視訊行業中,上傳的視訊檔案通常會進行轉碼、鑒黃等處理。通過對這些需求的分析,然後去思考是否可以抽象為通用的技術解決方案。這是主要驅動力,當然同時也會觀察業界的發展,不過本質上還是與所服務使用者的需求相關。

    從什麼時候開始積累函數計算的技術能力?

函數計算的技術可以分成兩個部分去看:

第一部分是 服務的核心:包括資源動态的排程,使用者函數的隔離運作,還有自動的負載均衡和流控,這是背景必須要具備的能力。

第二部分是 服務的外延:當提供成計算服務供其他人去使用時,平台需要為使用者提供優秀的 debugging 和 tracing 能力、函數依賴的管理、持續內建持續釋出等功能。

對于核心部分的技術,包括資源的排程,程式運作的隔離等等,阿裡雲飛天計算平台有長期的積累。相對而言,外延部分比較新;業界也處于早期階段,目前尚沒有統一的廠商建構标準,還有很大的發展空間。打造好的服務外延的出發點是,怎麼可以讓使用者基于函數計算建構複雜的 serverless 應用,隻有解決了這個本質問題,函數計算才能變成主流的通用計算服務。

除了函數計算技術本身,,函數計算的産品生态非常重要,函數計算本身是事件、消息和資料驅動的計算模式,還需要其他雲服務與之協同配合應用于不同的場景中,比如 oss 的多媒體資料寫入和通路、logservice 的日志、api gateway 的請求、消息服務的消息到達,這些都為函數計算的技術生态提供了協作關系。此外,對于資料處理方案,不瞋稱使用者也可以接入第三方的資料處理服務。

    按需付費,如何面對“缺斤短兩”的問題?  

serverless 計算的一個核心優勢是按需付費。是以關鍵的問題是,如何讓使用者能很容易預估費用?如何證明費用的真實性?

不瞋稱,雲服務的費用問題不是新問題,serverless 服務需要給使用者提供簡潔的,易于預估的費用模型,非常豐富的計量名額和細粒度的賬單,讓使用者能夠推敲驗證。

此外,好的産品設計還需要考慮到如何幫使用者規避錯誤。有時候使用者實作的函數邏輯可能會有 bug,導緻突然間錯誤消耗大量資源,比如在具有巨大計算能力的雲平台上寫出了無限遞歸調用的函數;在這個方面,不瞋稱阿裡雲也有考量,函數計算允許使用者設定費用上限,并且提供豐富的監控和報警功能,幫助使用者減少因為自身失誤帶來的資源過度使用的損失。

    函數計算産品短期和長期的目标是什麼?  

阿裡雲的 faas 産品與業界相比的差異在哪裡?坦白講,目前還在發展的初期階段,未來則會根據使用者場景進行不斷優化。目前使用函數計算的使用者來自于電商、遊戲、iot 等領域,使用者的主要訴求是可以專注于業務邏輯開發,不再維護後端伺服器;此外使用者也非常看重按需付費,削峰填谷等特性。

短期主攻數個典型的使用者場景,打造出尖銳的使用者體驗,自下向上的積累了解和經驗。阿裡雲的函數計算目前還隻支援 node.js,在多語言支援上有待提高。還有一種做法是去語言化,定一個與語言無關的 http 互動協定。但是後者的使用門檻稍微高一些:前者是寫一個 function,而後者卻需要使用者實作一個 mini web server。

在此基礎上,從雲發展的宏觀角度思考,自上而下地制定中長期目标。持續改進服務的核心和外延能力,讓平台變成建構複雜應用的核心計算平台。

還有,如何拓展技術的邊界,計算場景是否可以發生在不同的計算環境中,不同的計算媒體如 fpga、gpu、邊緣節點、端裝置。其中邊緣節點計算需求在工控領域中尤為突出,比如如何收集偏遠地區風力發電站的資料以實作智能化?在惡劣環境下,網絡傳輸并不總是可靠且成本很高,這時就需要在本地對資料進行處理,然後再将提煉的資料傳到雲端。為什麼這種情況函數計算适合?因為它已經脫離了機器概念,抽象出了統一的計算模型去支撐雲端和邊緣計算。

基于 serverless 寫的程式,是不需要考慮如何部署、管控和重度運維。使用者可以自己在遠端的辦公室進行調控,比如将某些計算任務部署到邊緣節點上,實作和雲端類似的監控,在網絡良好時,再進行資料的傳輸。而且在本地對噪聲資料進行處理提煉,能有效的降低傳輸到雲端的資料量,大幅降低成本。

serverless 未來光明,但挑戰猶在  

比起微服務、devops,serverless 的落地和流行将更快。

使用函數計算建構 serverless 架構,以很高的開發效率去建構一個系統,并且這個系統天然就是實時可伸縮的。對于使用者而言,良好落地 serverless 的要點主要在于架構設計,使用者需要首先了解 serverless,然後從現有的業務中提煉出業務邏輯。即 serverless 流行起來難度不在于開發門檻,而在于思維和架構的轉變。如果熟知微服務,對 serverless 的了解會更加友善。

正如前文所說,serverless 讓微服務的實作更輕松,更适應基于微服務的松耦合系統設計。但是反觀微服務化和 devops 改造實施起來比較重,技術門檻不低。而 serverless 很輕,和微服務的目标趨同,但是釋出、運維等環節的雲服務化更徹底;使用者隻需設定資源和釋出部署等規則,是以 serverless 會更加容易落地。

不過,serverless 對于使用者而言,還是很新的概念。縱然 devops、微服務等已經被廣泛認知了,但是全面落地尚且遙遠,怎麼看待 serverless 的推進呢?任何新的概念的落地,本質上都是要和具體業務去結合,去真正解決具體問題。這要取決于,一開發人員對技術的了解度,二是使用者在實施中的漸進與積累,三是企業對按需付費的強烈意願。

沒有什麼業務需求是空穴來風,也沒有什麼技術發展是一蹴而就。

受訪人簡介  

不瞋,函數計算研發經理。2010 年加入阿裡雲,參與了阿裡雲飛天分布式系統的研發,曆任批量計算的架構師,表格存儲(nosql)研發經理,深度參與了阿裡雲系統研發和産品疊代的全過程。對大規模分布式計算,大規模資料存儲和處理有非常深入的了解。現為阿裡雲函數計算産品研發負責人,緻力于建構下一代彈性、高可用的無伺服器計算平台。