Serverless 生態下的開發者工具

2019-09-16 08:02:01

作者 | 方坤丁、張遠哲
來源 | ServerlessCloudNative(ID:ServerlessGo)
由於 Serverless 平臺具備彈性擴縮、免運維、按需付費等特點,越來越多的公司和個人開始使用 Serverless 承載專案。但對於開發者而言,Serverless 一定程度上減少了開發難度,可以讓我們聚焦業務邏輯進行開發;但同時,由於 Serverless 顛覆了傳統的開發模式,從而在相關的開發工具,函式編排組織上也面臨著重大挑戰。本文會重點介紹 Serverless 生態下的開發者工具,並簡述這些工具是怎樣貫穿開發,除錯,測試,部署的生命週期,提升開發者效率。
什麼是 Serverless?  

Serverless ,按中文翻譯,稱為無伺服器。這究竟是一種什麼樣的形態或產品呢?無伺服器,就是真的沒有伺服器嗎?其實,在行業內,目前對於 Serverless 有幾種解讀方法:在某些場景可以解讀為一種軟體系統架構方法,通常稱為 Serverless 架構;而在有些情況下,又可以代表一種產品形態,稱為 Serverless 產品。

在說起 Serverless 架構時,Serverless 代表的是利用 Serverless 形態的產品實現的應用架構,這種架構完全依託於雲廠商或雲平臺提供產品完成系統的組織及構建。在這種架構中,使用者無需關注支撐應用服務執行的主機,而將關注點投入在系統架構,業務開發,業務支撐運維上。

而說起 Serverless 產品時,代表的是無需理解、管理伺服器,按需使用,按使用付費的產品。Serverless 產品中,其實也可以包含儲存、計算等多種型別的產品,而典型的計算產品,就是雲函式這種形態。

雲函式,或者稱為函式即服務 Function as a Service,它和後端即服務 Backend as a Service 一起,都可以稱為 Serverless 產品;而通過組合使用這些產品,開發者可以構建自身的業務 Serverless 架構。

Serverless 的價值  

Serverless 技術為什麼會獲得越來越多的關注?我們可以從幾個角度來看。

首先,從開發者使用的來說,不用更多的去考慮伺服器的相關內容,無需再去考慮伺服器的規格大小、儲存型別、網路頻寬、自動擴縮容問題;同時,也無需再對伺服器進行運維了,無需不斷的打系統補丁、應用補丁、無需進行資料備份、軟體配置等工作了。

其次,Serverless 產品是完全自動化的彈性擴縮容的;在業務高峰時,產品的計算能力、容量自動擴容,承載更多的使用者請求,而在業務下降時,所使用的資源也會同時收縮,避免資源浪費。

再次,跟隨著完全自動化的彈性所帶來的,是全新的計量計費模式;開發者僅需根據使用量來付費,而在深夜無業務量的情況下,不會有空閒資源佔用,因此也不會有費用產生。

隨著如上提到的特性,Serverless 給開發者或使用者帶來了具體的商業價值:

1、降低運維需求  
  • Serverless 使得應用與伺服器解耦,業務上線前無需預估資源,無需進行伺服器購買、配置;

  • Serverless 也使得底層運維工作量進一步降低,業務上線後,也無需擔憂伺服器運維,而是全部交給了雲平臺或雲廠商;

2、降低運營成本  
  • Serverless 的應用是按需執行的。應用只在有請求需要處理或者事件觸發時才會被載入執行,在空閒狀態下 Serverless 架構的應用本身並不佔用計算資源;

  • 而在使用 Serverless 產品時,使用者只需要為處理請求的計算資源付費,而無須為應用空閒時段的資源佔用付費;

3、縮短迭代週期、上線時間  
  • Serverless 架構帶來的是進一步的業務解耦,應用功能被解構成若干個細顆粒度的無狀態函式,開發可以聚焦在單功能的快速開發和上線上;

  • 同時拆解後的雲函式,也都可以進行獨立的迭代升級,更快速的實現業務迭代,縮減功能的上市時間;

4、快速試錯  
  • 利用 Serverless 架構的簡單運維、低成本及快速上線能力,可以來快速嘗試業務的新形態、新功能;

  • 利用 Serverless 產品的強彈性擴容能力,在業務獲得成功時,也無需為資源擴容而擔心;

面向 Serverless 開發的挑戰   

從一個開發者的角度而言,Serverless 開發和傳統的開發方式相比發生了很大的改變。開發者習慣了在本地進行開發,除錯,測試和持續整合,持續部署等流程,在面向 Serverless 進行開發時,免不了會有很多疑問:

  • 怎樣本地開發一個 Serverless 專案?

  • 怎樣對 Serverless 函式進行本地除錯?

  • 開發過程中列印的日誌是否可以方便的檢索並用於 debug?

  • 如何保證本地環境和雲端環境的一致?

  • 釋出時怎樣將多個函式一次性發布到雲環境中?

面向 Serverless 的工具建設邏輯  


面臨開發過程中的種種挑戰,開發者工具將從開發者的視角出發,使 Serverless 的專案開發更貼近使用者習慣。下面是一張專案開發的生命週期流程圖,可以看到,在專案的開發過程中,至少要經歷需求、編碼、構建、測試、釋出、部署和運維等幾個階段。在程式碼的編碼和構建階段通過持續整合完成程式碼的自動構建,成為持續整合 CI(Continuous Integration);在程式碼的釋出和部署階段,通過配置灰度策略,告警和回滾計劃等,從而可以完成程式碼的持續交付 CD(Continuous Delivery)。此外,在開發者的開發過程中,也會遇到編碼、除錯和單元測試,整合測試等場景,這些功能的支援也是面向 Serverless 架構進行開發中必不可少的一環。對開發者工具的建設,則會重點解決在整個生命週期中的痛點。

        

面向 Serverless 的開發者工具  

在 Serverless 技術趨勢大熱的今天,已經湧現出很多面向開發者的解決方案和工具,例如開源的 Serverless Framework,Zappa 和  ClaudiaJS 等工具。開發者工具大部分都通過呼叫雲廠商中 Serverless 產品的 API/SDK,封裝底層能力,並提供給客戶更加直觀便捷的使用方式。目前比較常見的開發工具中,主要分為 CLI 命令列工具以及 IDE 外掛這兩種形態。雖然展現方式不同,但本質上都是降低了本地開發 Serverless 專案的門檻,並在雲平臺提供的基礎能力上,封裝了更多組織和編排的方式。

由於篇幅有限,本文會以騰訊雲的雲函式為例,介紹較為典型的開發工具:

騰訊雲Serverless本地開發工具及VS Code外掛  

騰訊雲 Serverless 本地開發工具(SCF CLI)以開源專案的形式維護,目的在於讓使用者方便的實現函式打包、部署、本地除錯,也可以方便的生成雲函式的專案並基於 demo 專案進一步的開發。SCF CLI 通過一個函式模板配置檔案,完成函式及相關周邊資源的描述,並基於配置檔案實現原生代碼及配置部署到雲端的過程。

下面我們以一個 Serverless 專案為例,展示 Serverless 開發工具的使用流程:

(1)函式開發和編碼

首先,安裝並配置了 SCF CLI 後,可以通過 --help 命令檢視所支援的命令,之後通過 scf init 命令快速生成一個函式 demo。在建立完畢後,可以看到生成了 index.js 檔案和 template.yaml 檔案。其中,index.js 是函式的入口檔案,tempate.yaml 則是通過特定的格式記錄了函式的配置資訊,如記憶體大小,超時時間等資訊。tempate.yaml 也是後續對函式進行編排和組織的關鍵。除了簡單的 init 命令之外,SCF CLI 也支援從 git 拉取程式碼和一些已有的函式模板,便於客戶基於特定的場景快速開發。

(2)程式碼除錯

在開發過程中,開發者會選取自己熟悉的 IDE 程式碼編輯器進行程式碼編寫。為了便於更快速直觀的進行本地開發和除錯,通過騰訊雲 VS Code 外掛支援了一鍵除錯的能力。首先,可以開啟剛建立函式的檔案目錄,在外掛中會自動識別這個函式。之後可以通過 F9 進行斷點,F5 啟動除錯能力。函式除錯過程中的輸出會列印在 terminal 中,並且支援單步除錯,檢視變數和堆疊等資訊。

(3)程式碼釋出

完成了開發和測試後,也可以分別通過 VS Code 外掛或 CLI 進行程式碼的釋出。目前分別支援了 zip 打包釋出,通過 COS(物件儲存)上傳併發布,以及通過 git 倉庫釋出,每次只提交增量修改的檔案。在釋出完畢後,還可以通過外掛中的雲端除錯,來檢視在雲端的執行狀況和返回日誌。

  

(4)多函式部署

在 VS Code 外掛及 CLI 中,可以很方便的將單函式部署在雲端,那麼如果希望快速釋出多個函式時,應該怎樣操作呢?目前也可以直接通過 SCF CLI 的 deploy 命令來實現。只需要通過一個 template.yaml 來維護多個函式的資訊即可。除了釋出之外,還可以通過 template.yaml 檔案中的 Global 欄位來定義一些函式的通用配置,從而解決開發過程中,希望多個函式共用相同配置的痛點(例如共用相同的環境變數,超時時間和記憶體等,不需要重複配置)

例如,在我的工作空間下,有兩個函式「hellotinatest234」以及「testscflinux」需批量部署上傳,並且兩個函式使用公共配置。則可以在 template.yaml 中分別定義兩個函式的屬性,並且定義 Global 欄位指定公共配置。部署過程和 yaml 的樣式如下:

(5)異常排查 - 日誌能力

除了開發流程之外,在生產環境異常時,也可以通過 CLI 的 logs --tail 等命令,快速靈活地進行日誌查詢等,並且可以配合 grep awk 等工具使用。當釋出新版本時,採用 tail 模式可以實時列印雲端日誌,方便開發者快速檢視問題。

(6)DevOps 能力

最後是雲函式的 DevOps 能力。目前已經支援了和 Jenkins,Coding 和藍鯨平臺等對接。並且還在持續對 Coding 平臺做更深度的整合,提供開箱即可用的 DevOps 能力。在一個經典 DevOps 的 pipeline 中,注意包含了程式碼檢查,依賴安裝,測試,審批,釋出上線等環境。因此在 Serverless 的架構下,除了測試環節,這些環節和傳統的方式並無不同。因此可以依賴命令列工具中的原子能力,方便的接入到各個 DevOps 平臺。

例如,SCF CLI 工具規範了錯誤碼和對應輸出,從而可以便捷的支援指令碼來識別輸出,完成自動化的測試及釋出流程。


開發者工具總結和展望  

隨著 Serverless 生態的逐步完善,工具可以覆蓋的場景會越來越多,例如,可以在本地模擬 API 閘道器的請求,或是通過整合常用的測試框架,對函式進行單元測試和整體性測試等。開發者也有更廣闊的空間可以去參與其中,構建一個面向 Serverless 的開發架構。後續開發者工具會更加著重於對函式及函數週邊資源的組織方式(閘道器,DB 等),從專案 / 應用的維度出發,讓開發者可以快速通過工具搭建一個常用的使用場景(如 WEB 網站,檔案上傳工具等),從而更好地瞭解 Serverless 專案的組織方式。此外,在持續整合和持續交付的對接中,開發者工具也將支援更便捷,通用的配置,便於規範開發流程,承載大型專案和核心業務。

作者介紹

方坤丁,天津大學碩士畢業後加入騰訊。一直從事雲端計算相關產品的策劃工作,先後負責過負載均衡 CLB、訊息佇列 CKafka\CMQ 等產品。多次參與電商使用者雙十一保障等專案,對雲端計算 IaaS,PaaS 及 Serverless 行業有較豐富的經驗和理解。現擔任無伺服器雲函式 SCF 高階產品經理,負責雲函式產品的策劃工作,致力於無伺服器架構的使用和推廣。

張遠哲,一直從事雲端計算相關產品的工作。參與過小程式平臺的研發,SaaS 呼叫中心的研發,以及 DevOps 的運維開發。現擔任雲函式 SCF 高階產品經理,負責雲函式產品的策劃工作,致力於無伺服器架構的使用和推廣。


活動推薦

落地AIOps 還是一個相對較新的詞,其設計的技術業界也還在積極探索。在智慧運維相關的領域,推薦大家關注以下落地實踐:

  • Facebook 大資料模組快速部署和實時更新

  • Kubernetes 和 Docker 容器在領英的落地實踐

  • 阿里巴巴資料驅動的智慧運維DataOps

  • 百度 AIOps 黃金指標異常檢測技術實踐

點選「閱讀原文」或識別二維碼來QCon上海2019瞭解智慧運維相關的領域,包括前沿技術及其最佳落地實踐。大會 9 折報名中,立減880元,有任何問題歡迎聯絡票務小姐姐Ring:17310043226(微信同號)

已同步到看一看



熱點新聞