隨著 Serverless 架構的不斷髮展,各雲廠商和開源社群都已經在佈局 Serverless 領域,一方面表現在雲廠商推出傳統服務/業務的 Serverless 化版本,或者 Serverless 計算平臺,另一方面表現在開源社群中 Serverless 相關專案逐漸豐富起來,無論是平臺類還是工具類的開源專案,再或者是框架類的開源專案,都如雨後春筍般快速成長。
任何技術,在這樣繁榮發展背後,都會快速升級和迭代,Serverless 架構也不例外,從阿里雲的 FaaS 產品發展過程中,不難看出 Serverless 架構在提效和降本的道路上不斷的場景化,特色化;在產品形態上也不斷的趨於完整化,統一化,雖然距離「大道至簡」還有一定的距離,但是也只是時間的問題了。
Serverless 架構在不斷髮展,無論是產品形態還是技術架構都可以用日新月異來描述。
最初,Serverless 架構指的是 FaaS 與 BaaS 的結合,認為開發者可以不用花費更多的精力在伺服器等底層資源上,而是可以將精力放在更具價值的業務邏輯之上。這也是文章《Serverless Architectures》中所強調的觀點。
但隨著時間發展,大家發現,對於 Serverless 架構這樣的描述過於單薄,沒有凸顯出 Serverless 架構為業務帶來的技術紅利,也沒能表現出 Serverless 所交付的心智。所以 UC 伯克利在《Cloud Programming Simplified: A Berkeley View on Serverless Computing》中對 Serverless 架構進一步的定義:對於被認為是Serverless 架構的服務/產品還需要具備按量付費和彈性伸縮的特點,並認為, long-run 的執行模式並不符合 Serverless 精神。
雲端計算相關技術的發展,往往有一個特點:雲廠商的驅動性非常強,因為雲廠商往往會最先感知到普遍性的使用者需求,並且有足夠的資料支撐其做出合理的判斷與創新。所以 Serverless 架構的創新很多時候也都是由廠商驅動的;在事件驅動與函數計算的發展下,廠商逐漸發現函數計算的模式「短時執行」沒有辦法滿足更多使用者的訴求,此時一種 long-run 模式的 Serverless 計算服務就逐漸的被孵化出來了,至此,Serverless 架構也從最初的單薄,逐漸完善,通過「自我革新」,完成了新一輪業務能力的自我豐富與產品功能的自我完善。
隨著 long-run 模式逐漸被開發者們認可,傳統 Serverless 架構的定義有點「格格不入」:既不能在模式上覆蓋最新的 Serverless 產品緯度,也不能在形態上描述清 Serverless 的特性。此時 Serverless 架構定的義,就自然而然的得以升級,例如:
至此,Serverless 架構實現了此階段下的產品形態升級與 Serverless 精神的更迭。
通過阿里雲官網,不難發現其 Serverless 產品形態還是相對完整的:
Serverless 架構的熱度不斷增加,各產品也需要藉著熱度進一步突破和創新,所以 Serverless 這個詞「被亂用」再所難免;每個團隊都有自己的特色,基於 Serverless 架構完善和更迭自身能力,也是產品發展的必經之路,就像資料庫發展到雲資料庫,再發展到雲原生資料庫,再發展到 Serverless 資料庫一樣;
所以,Serverless 架構需要一個「粘合劑」,將各種 Serverless 產品進行進一步的連結,使其不是「混雜在諸多產品中的某些產品」,而是「可以聯合起來解決某個問題的具體功能」,換句話來說將不同的產品聯合到一起,以應用的維度為開發者提供場景化支援,這也是 Serverless 架構從資源朝著應用,再朝著業務發展的必經之路。
阿里雲推出「應用的概念」,試圖以計算平臺和核心,通過BaaS 產品的聯動,讓本來「雜亂的花園」,逐漸的變得規矩,有條理起來;讓本來需要開發者「痛苦的選擇」,逐漸的變成場景化推薦,流程化引導。
本次活動是阿里雲 Serverless 函數計算評測,所以本文僅對函數計算與其相關產品進行體驗,包括函數計算本身(包括三個主要模組:基礎模組服務與函數和上層封裝模組應用、任務),Serverless 工作流以及開源專案 Serverless Devs。
函數與服務的功能如下圖所示:
函數計算產品形態為兩層結構:服務、函數。
函數計算的兩層概念為開發帶來了一定的便利:
函數計算的上手流程相對簡單,通過函數計算檔案,可以看到整體流程:
即,開發者只需要完成程式碼的開發和部署,即可實現業務的彈性伸縮和按量付費能力的夾持,這也符合 CNCF 在白皮書中對 Serverless 架構流程定義的規範。通過阿里雲函數計算控制檯可以快速進行這個流程的體驗,點選「服務及函數」選項,就可以看到服務列表:
此時可以根據需要,建立服務和函數:
完成之後,可以線上編輯程式碼與線上測試:
至此,完成了函數計算上手,在整個過程中,有幾個明顯的感覺:
除服務與函數,函數計算還有一個模組:任務。
在任務頁面的描述彙總,不難看出它實際上是函數的一種變形:
通過建立任務的過程,以及建立任務結束頁面:
同樣可以驗證剛剛的想法:任務的本質依舊是函數計算,只不過:
由於任務往往是非同步的,所以從上游經過函數的處理再傳遞到下游,整個鏈路的串聯是非常重要的,這也是對雲廠商服務一致性與可觀測性的一種考驗。
通過對任務的體驗,整體感覺是比較順暢的,通過抽象出來的產品化能力,讓任務的建立流程和步驟更加精簡,可以幫助「特定的開發者快速使用」;但是也會對一些新手使用者產生困擾:應用、任務、服務及函數是什麼關係?任務和函數有什麼區別?
與任務相同的是,應用也是建立在服務與函數之上的;與任務不同的是,應用不僅僅是函數計算。可以認為,應用是函數計算中,聯動其他產品的入口或者 Serverless 應用的管理平臺。
通過應用建立頁面,可以快速體驗 Serverless 應用:
可以看到,應用與任務,服務及函數的很大區別在於,應用是場景化非常明確的一個模組,所有的建立過程和匯入的過程均是在建設「場景化」的心智。通過應用建立頁面,可以看到目前已經有框架、音視訊處理等多個場景的應用,以其中的圖片壓縮為例進行體驗:
可以通過引導快速完成應用建立,整個流程最為精簡。建立完成之後,可以得到最終的體驗頁面:
在體驗頁面中,可以體驗當前應用的功能。
應用的出現,無疑是 Serverless 架構多產品逐漸「一起戰鬥」的表現,即開發者對應用進行管理,而不再是對程式碼和資源進行分別的管理。通過應用模組,開發者可以:
值得注意的是,應用功能預設有一套標準的 GitOps 設定,通過基於程式碼倉庫進行應用部署之後可以發現應用本身是基於 Serverless Devs 開發者工具實現的,這也充分的將線上平臺與線下工具進行聯動,在一定程度上可以進一步保證開發者使用體驗的一致性。另外,在體驗應用模組之後,會產生一些想法:
Serverless 工作流在一定程度上可以認為是任務模組的一種升級表現。即單純的任務模組是基於函數計算的,是非同步的,Serverless 工作流在此基礎上增加了編排能力:
通過 Serverless 工作流夾持的任務將會:
在體驗 Serverless 工作流之後,也有一些思考:
關於阿里雲 Serverless Devs 上手,可分為三個流程:
由於 Serverless Devs 專案是釋出在 Npm 的,所以在安裝之前需要開發者先設定 Node.js 開發環境,再通過 npm 工具進行工具的安裝。安裝完成之後,可以通過 s config
命令進行金鑰資訊設定:
可以通過s init
命令,進行案例程式碼的初始化:
完成初始化之後,可以直接進行業務的部署:
部署完成後,可以通過瀏覽器開啟專案,進行預覽:
同樣基於這三個流程,Serverless Devs 也是可以快速的與常見的流水線進行整合,目前官方提供的案例包括Github Action,Gitee Go,Jenkins,以及雲效等,但是閱讀過相關檔案後,不難發現,即便是其他的流水線,也是同樣的操作流程。
Serverless Devs 開發者工具針對阿里雲 Serverless 架構來說,其最大的意義和價值,應該就在於:
從開發角度來看,Serverless Devs 開發者工具解決了 Serverless 領域常見的幾個痛點:
天下大同也許是不可能的,但是技術發展的結局,趨於同質化卻是一種趨勢。
Serverless 架構同樣如此,在雲原生技術日益發展的今天,Serverless 架構已經不再是單純的某個產品或者某種形態,他應逐漸的發展成為一種思想。
基於 Serverless 架構所傳遞的精神,已經有越來越多的 Serverless 產品出現,儘管如今,他們依舊是「單打獨鬥」的多,但隨著時間的發展,這些產品註定會以一種」粘合劑「為核心,統一的,一致的為開發者提供服務。
雖然 Serverless 架構並沒有確切的定義,但他所要傳達的心智卻一定不是更復雜。
所以在未來的發展過程中,Serverless架構的發展方向之一,就是做減法,減掉那些」看似合理,卻又沒有道理的能力「。例如,為什麼要透露出各種範例型別(彈性範例、GPU範例、效能範例、按量範例等)?為什麼需要設定預留,需要設定彈性策略?
也許,很多為什麼現在看來是合情合理,但是站在另一個維度上,他可能就是不合理的,所以做減法,不僅僅是一種勇氣,更是一種對技術的挑戰,對產品抽象能力的挑戰。
Serverless 架構的下一站是什麼?這是一個很多人思考的問題。
函數計算僅僅是一個計算平臺,可以單打,但也不能獨鬥,想要更容易被接受,資源的聚合、聯動是必不可少的。儘管函數計算的應用模組,在一定程度上正在聯動更多資源,但是這也僅僅是管理層面的,開發者所接觸Serverless 架構後,開發也是非常重要的一環節,那麼雲開發模式就值得考慮。
Serverless 架構在一定程度上是可以讓很多功能模組化的,而模組化的進一步發展,就可能是低程式碼模式。
基於 Serverless 架構的低程式碼有望將 Serverless 思想應用到產品建設思想上,模組化的快速部署、更新,平穩釋出與下線也都是符合 Serverless 思想的。
Serverless架構,在未來將會像雲主機,容器服務一樣,成為雲端計算時代新的基礎設施;在對基礎設施的維護的基礎上,為開發者提供更為場景化的服務有望成為 Serverless 架構突破自我瓶頸的突破口。
在未來,Serverless 將會是一種「形態不統一,但是目標很統一」的技術架構思想,開發者可以以一種更為一致性的體驗,快速使用 Serverless 架構構建自己的場景化應用,當然這裡的Serverless包括了不同形態的服務,例如資料庫、閘道器、函數計算等。
綜上所述,Serverless 架構在不斷的發展,Serverless 架構的精神也在不斷的更迭,從函數計算到應用,從開發、運維到全生命週期,Serverless架構要回答的問題很多,要做的事情更多。
更多內容關注 Serverless 釘群(ID:35154841 ),彙集 Serverless 技術最全內容,定期舉辦 Serverless 活動、直播,使用者最佳實踐。