Midway Serverless 發佈 2.0,一體化讓前端研發再次提效

自去年 Midway Serverless 1.0 發佈之後,許多業務開始嘗試其中,並利用 Serverless 容器的彈性能力,減少了大量研發人員對基礎設施和運維的關注。對前端開發者而言,他們只需寫幾個函數即可實現後端業務邏輯,推動業務快速上線。正如去年所說,使用了 Serverless 架構,可以讓整個前端研發效能提升。

2021 年 3 月,Midway Serverless 推出了第二個大版本。就像兩年前說的一樣,開源只是開始,終態遠沒有到來。Midway 體系希望能夠在當前的十字路口,不斷向前演進,讓前端可以去發展,朝着應用工程師前進。

Midway Serverless 2.0 的內部代號是 “Hercules”,是希臘神話以及漫威中的大力士,藉由半神半人的出生,初步邁向成神之路。而藉由用戶在 v1.0 的使用情況,我們看到了不少問題,這一次 v2.0 的迭代重構,我們希望去解決這些問題,讓用戶體驗和開發效率更進一步。

一、Midway Serverless 的演進

Midway Serverless 是 Midway 產出的一套面向 Serverless 雲平臺的開發方案。其內容主要包括函數框架 @midwayjs/faas ,以及一系列跟平臺配套的工具鏈、啓動器等。

在 2020 年初發布之後,同年 6 月,又發佈了前後端一體化方案,可以方便地在前端代碼直接調用函數端代碼,一體化方案應用到集團的中後臺項目後,效果顯著。

同年 9 月,Midway Serverless 發佈了全新的 Midway 應用框架的第二個版本,引入了組件生態,之後 swagger、typeorm、mongo、gRPC 等組件不斷地孵化,大大擴充了 Midway 的能力。

2021 年 3 月,Midway Serverless 2.0 正式發佈,在原有的基礎上,Midway Serverless 和 Midway 的能力將複用,有着相同的 CLI 工具鏈、編譯器、裝飾器等等。

二、Midway Serverless 2.0 的最大變化

就像前面提到的一樣,Midway Serverless 是一套面向 Serverless 的解決方案,它包括框架、運行時、工具鏈、配置規範幾個部分,這幾部分的組合之後,提供了一些面向 Serverless 體系的特有能力。

傳統 v1.0 時,Midway Serverless 主打:

  1. 平臺間遷移更容易,讓代碼在不同的平臺相同;
  2. 讓應用更易維護和擴展,提供了標準的雲平臺函數出入參事件定義;
  3. 讓傳統應用無縫部署到 Serverless 環境。

而 v2.0,Midway Serverless 主打的是應用函數一體,前端和後端一體,體驗更佳,開發效率更高。

原有的 v1.0 底層是通過編譯,包含一個令人煩惱的 .faas_debug_tmp 目錄,不少開發的同學都踩過它的坑,一旦出錯,難以排查。

這本質上,是由於沒有采用和應用相同的進程重啓方案,也是因爲函數開發和傳統不同、技術選型差異造成的。函數的執行和緩存,造成了 v1.0 數據可能不更新,經常出現改了代碼無效的情況。

在新的 v2.0 中,Midway Serverless 徹底拋棄了原有的編譯方式,採用了和應用相同的實現方式,同時又對函數場景做了優化,對用戶來說,在某些場景下(HTTP),開發函數和開發應用是相同的結構和體驗,函數和應用只有部署時有差異。

可以看看優化後的開發情況,不僅和應用一樣,速度還比較快,也不會生成臨時目錄,修改實時生效。

這是 v2.0 和 v1.0 的根本性變化,也是整體架構升級帶來的巨大優勢。

當然,這一塊並不是功能的新增,除了架構升級之外,Midway Serverless 2.0 還提供了更多的能力。主要分成下面四大方面。

三、v2.0 純函數增強

首先,Midway Serverless 2.0 在純函數開發的場景下,對 HTTP 場景的函數,包括(HTTP 觸發器、API 網關等)做了額外的增強支持。

v2.0 升級 - 裝飾器統一

v1.0 時期,Midway Serverless 將觸發器的各個參數定義在 f.yml 中,雖然在雲原生看來是標準的,但是實際在編寫代碼的時候,用戶覺得非常繁瑣,特別是加上我們的依賴注入容器中 @Func 裝飾器和類的命名,函數名 + handler 名 + 類名 + 方法名用戶需要命名多遍。

v2.0 版本開始,Midway Serverless 直接沿用應用的開發方式,使用原有的 @Controller 裝飾器應用到 HTTP 函數的開發中。

同時,原有 f.yml 裏的 functions 字段將不再需要填寫,我們的發佈工具會自動從代碼中分析路由,註冊函數。

除了 @Controller 裝飾器,Midway Serverless 2.0 也支持傳統應用的參數裝飾器,比如 @Query  @Body 等常用的從請求中獲取參數的裝飾器,也支持例如 SetHeader  ContentType 等對響應操作的裝飾器。

除了裝飾器統一之外,Midway Serverless 2.0 將原有的 @midwayjs/faas 框架也接入到了新的 Framework 體系,現在 @midwayjs/faas 成爲了函數 Framework,它也擁有和應用相同的 Application  Context 定義。比如下面的 app 方法,和應用完全一致。

爲了更好地支持函數式的寫法,Midway Serverless 2.0 對入口的 configuration.ts 增加了函數式寫法,這樣在一體化等函數式場景也可以選擇函數是寫法來編寫。

v2.0 升級 - 工具鏈升級

從 Midway v2.0 開始,使用 @midwayjs/cli 作爲基礎 cli 工具,原有的函數 cli(@midwayjs/faas-cli)將逐步完成它的歷史使命,也將統一到 @midwayjs/cli 中。

傳統的 cli 是把所有的功能都組合成一個大包,放到一個 npm 包下,這樣每個應用都要裝一份,比較佔用硬盤空間和資源。新版本中做了一個按需加載能力,按照場景進行區分,比如函數和應用場景安裝的 cli 工具就會不同。

這樣的好處是,新版本的 cli 安裝的包比較少,自然速度就快。同時,也能夠自由地去組合其中的插件,將其更合理地應用到不同的場景中。

v2.0 升級 - 單元測試

針對原有函數的單元測試的情況,Midway Serverless 2.0 也做了調整。

原來的 invoke 方法,雖然簡單,但是很難跟創建應用的流程結合,每次 invoke 都是一次完整的初始化邏輯和調用,而且在 HTTP 的場景下,要填寫的參數衆多,難以模擬實際的效果。

新版本沿用了應用的思路,既然能用應用模式啓動,那自然也能使用應用的開發方式,使用 supertest 來做測試,比原來簡單自然多了。

v2.0 升級 - Web 模式

在 v1.0 時期,Midway Serverless 針對業界常用的 egg/koa/express,做了將應用代碼無縫遷移到 Serverless 環境的功能,這三種框架都可以在 f.yml 中增加 deployType 的方式,通過構建自動化生成入口,支持傳統應用上彈性容器的訴求。

之前也有用戶問道,如果我不希望代碼再跑在函數環境了怎麼辦?v2.0 的答案是,你可以將那些代碼,通過應用的模式部署到自己的傳統容器,或者 Docker。

部署的方式很簡單,由於使用了 @midwayjs/serverless-app (上面測試提到過),和應用一樣的編碼模式,就可以啓動一個 HTTP 應用了。

四、v2.0 一體化能力增強

去年 6 月,Midway Serverless 向社區開放了一體化編碼的方案,使用函數式編碼,類 React Hooks 的編碼方式,讓前端開發的同學無比熟悉。

在 v2.0 之中,進一步增強了這套一體化方案,讓前端開發的體驗進一步提升。從下面四個方面一一爲大家介紹。

一體化增強 - 極速啓動

首先是極速模式,傳統的 React/Vue 開發/構建的時間大家也都瞭解,Webpack 的工作時間往往接近 20s,而得益於最近新出的 vite,經過我們的測試和使用,傳統的 20s 縮減到了 2s 以下,可以說前端再一次得以飛躍。

而 vite 良好的兼容性,可以包容非常多的前端框架,雖然 vite 剛出不久,相信過不了多久,就會在全前端場景鋪開。

一體化增強 - 單元測試

第二個方面是單測,傳統的一體化,由於編譯的存在,我們的單測十分困難,有用戶不止一次問我們,怎麼做單測,怎麼優雅地做前後端調用。

在新的 v2.0 中,採用了兩種方案做測試。

既可以使用 supertest 來執行傳統的 HTTP 行爲模擬做單測,也可以使用我們提供的 runFunction 函數來做單測。

一體化增強 - 支持應用

第三個特性是非常令人驚喜的,一體化項目除了能在函數場景下使用,如今,Midway Serverless 2.0 也將其沿用到了應用開發上。傳統的 Midway 項目也可以使用一體化方案開發了。

一體化增強 - 運行時升級

在 v1.0 時期,由於編譯器的限制,我們的入口函數編寫時有着諸多限制,但是在 v2.0 的時候,我們將運行時換成了原生框架以及原生的 node 模塊,這樣以前的種種限制都不存在了。

同時,你也可以編寫自己的 hooks 模塊,將業務邏輯輕鬆地組合到一起。

五、未來

Midway Serverless 2.0 提供了諸多能力的升級,但是還遠遠不夠,我們依舊在不斷提供新的能力,讓不同的場景都豐富起來,讓前端可以遊刃有餘地享受到新體系的紅利。

未來,是 Serverless 和雲的時代。

作者 | 張挺

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章