Midway Serverless 发布 2.0,一体化让前端研发再次提效
簡介:?2021 年 3 月,Midway Serverless 推出了第二個大版本。就像兩年前說的一樣,開源只是開始,終態(tài)遠沒有到來。Midway 體系希望能夠在當(dāng)前的十字路口,不斷向前演進,讓前端可以去發(fā)展,朝著應(yīng)用工程師前進。
?
自去年 Midway Serverless 1.0 發(fā)布之后,許多業(yè)務(wù)開始嘗試其中,并利用 Serverless 容器的彈性能力,減少了大量研發(fā)人員對基礎(chǔ)設(shè)施和運維的關(guān)注。對前端開發(fā)者而言,他們只需寫幾個函數(shù)即可實現(xiàn)后端業(yè)務(wù)邏輯,推動業(yè)務(wù)快速上線。正如去年所說,使用了 Serverless 架構(gòu),可以讓整個前端研發(fā)效能提升。
2021 年 3 月,Midway Serverless 推出了第二個大版本。就像兩年前說的一樣,開源只是開始,終態(tài)遠沒有到來。Midway 體系希望能夠在當(dāng)前的十字路口,不斷向前演進,讓前端可以去發(fā)展,朝著應(yīng)用工程師前進。
Midway Serverless 2.0 的內(nèi)部代號是 “Hercules”,是希臘神話以及漫威中的大力士,藉由半神半人的出生,初步邁向成神之路。而藉由用戶在 v1.0 的使用情況,我們看到了不少問題,這一次 v2.0 的迭代重構(gòu),我們希望去解決這些問題,讓用戶體驗和開發(fā)效率更進一步。
一、Midway Serverless 的演進
Midway Serverless 是 Midway 產(chǎn)出的一套面向 Serverless 云平臺的開發(fā)方案。其內(nèi)容主要包括函數(shù)框架 @midwayjs/faas ,以及一系列跟平臺配套的工具鏈、啟動器等。
在 2020 年初發(fā)布之后,同年 6 月,又發(fā)布了前后端一體化方案,可以方便地在前端代碼直接調(diào)用函數(shù)端代碼,一體化方案應(yīng)用到集團的中后臺項目后,效果顯著。
同年 9 月,Midway Serverless 發(fā)布了全新的 Midway 應(yīng)用框架的第二個版本,引入了組件生態(tài),之后 swagger、typeorm、mongo、gRPC 等組件不斷地孵化,大大擴充了 Midway 的能力。
?
2021 年 3 月,Midway Serverless 2.0 正式發(fā)布,在原有的基礎(chǔ)上,Midway Serverless 和 Midway 的能力將復(fù)用,有著相同的 CLI 工具鏈、編譯器、裝飾器等等。
二、Midway Serverless 2.0 的最大變化
就像前面提到的一樣,Midway Serverless 是一套面向 Serverless 的解決方案,它包括框架、運行時、工具鏈、配置規(guī)范幾個部分,這幾部分的組合之后,提供了一些面向 Serverless 體系的特有能力。
傳統(tǒng) v1.0 時,Midway Serverless 主打:
而 v2.0,Midway Serverless 主打的是應(yīng)用函數(shù)一體,前端和后端一體,體驗更佳,開發(fā)效率更高。
原有的 v1.0 底層是通過編譯,包含一個令人煩惱的 .faas_debug_tmp 目錄,不少開發(fā)的同學(xué)都踩過它的坑,一旦出錯,難以排查。
這本質(zhì)上,是由于沒有采用和應(yīng)用相同的進程重啟方案,也是因為函數(shù)開發(fā)和傳統(tǒng)不同、技術(shù)選型差異造成的。函數(shù)的執(zhí)行和緩存,造成了 v1.0 數(shù)據(jù)可能不更新,經(jīng)常出現(xiàn)改了代碼無效的情況。
?
在新的 v2.0 中,Midway Serverless 徹底拋棄了原有的編譯方式,采用了和應(yīng)用相同的實現(xiàn)方式,同時又對函數(shù)場景做了優(yōu)化,對用戶來說,在某些場景下(HTTP),開發(fā)函數(shù)和開發(fā)應(yīng)用是相同的結(jié)構(gòu)和體驗,函數(shù)和應(yīng)用只有部署時有差異。
?
可以看看優(yōu)化后的開發(fā)情況,不僅和應(yīng)用一樣,速度還比較快,也不會生成臨時目錄,修改實時生效。
?
這是 v2.0 和 v1.0 的根本性變化,也是整體架構(gòu)升級帶來的巨大優(yōu)勢。
當(dāng)然,這一塊并不是功能的新增,除了架構(gòu)升級之外,Midway Serverless 2.0 還提供了更多的能力。主要分成下面四大方面。
?
三、v2.0 純函數(shù)增強
首先,Midway Serverless 2.0 在純函數(shù)開發(fā)的場景下,對 HTTP 場景的函數(shù),包括(HTTP 觸發(fā)器、API 網(wǎng)關(guān)等)做了額外的增強支持。
v2.0 升級 - 裝飾器統(tǒng)一
v1.0 時期,Midway Serverless 將觸發(fā)器的各個參數(shù)定義在 f.yml 中,雖然在云原生看來是標準的,但是實際在編寫代碼的時候,用戶覺得非常繁瑣,特別是加上我們的依賴注入容器中 @Func 裝飾器和類的命名,函數(shù)名 + handler 名 + 類名 + 方法名用戶需要命名多遍。
?
v2.0 版本開始,Midway Serverless 直接沿用應(yīng)用的開發(fā)方式,使用原有的 @Controller 裝飾器應(yīng)用到 HTTP 函數(shù)的開發(fā)中。
同時,原有 f.yml 里的 functions 字段將不再需要填寫,我們的發(fā)布工具會自動從代碼中分析路由,注冊函數(shù)。
?
除了 @Controller 裝飾器,Midway Serverless 2.0 也支持傳統(tǒng)應(yīng)用的參數(shù)裝飾器,比如 @Query 、 @Body 等常用的從請求中獲取參數(shù)的裝飾器,也支持例如 SetHeader 、 ContentType 等對響應(yīng)操作的裝飾器。
?
除了裝飾器統(tǒng)一之外,Midway Serverless 2.0 將原有的 @midwayjs/faas 框架也接入到了新的 Framework 體系,現(xiàn)在 @midwayjs/faas 成為了函數(shù) Framework,它也擁有和應(yīng)用相同的 Application 、 Context 定義。比如下面的 app 方法,和應(yīng)用完全一致。
?
為了更好地支持函數(shù)式的寫法,Midway Serverless 2.0 對入口的 configuration.ts 增加了函數(shù)式寫法,這樣在一體化等函數(shù)式場景也可以選擇函數(shù)是寫法來編寫。
?
v2.0 升級 - 工具鏈升級
從 Midway v2.0 開始,使用 @midwayjs/cli 作為基礎(chǔ) cli 工具,原有的函數(shù) cli(@midwayjs/faas-cli)將逐步完成它的歷史使命,也將統(tǒng)一到 @midwayjs/cli 中。
傳統(tǒng)的 cli 是把所有的功能都組合成一個大包,放到一個 npm 包下,這樣每個應(yīng)用都要裝一份,比較占用硬盤空間和資源。新版本中做了一個按需加載能力,按照場景進行區(qū)分,比如函數(shù)和應(yīng)用場景安裝的 cli 工具就會不同。
?
這樣的好處是,新版本的 cli 安裝的包比較少,自然速度就快。同時,也能夠自由地去組合其中的插件,將其更合理地應(yīng)用到不同的場景中。
?
v2.0 升級 - 單元測試
針對原有函數(shù)的單元測試的情況,Midway Serverless 2.0 也做了調(diào)整。
原來的 invoke 方法,雖然簡單,但是很難跟創(chuàng)建應(yīng)用的流程結(jié)合,每次 invoke 都是一次完整的初始化邏輯和調(diào)用,而且在 HTTP 的場景下,要填寫的參數(shù)眾多,難以模擬實際的效果。
?
新版本沿用了應(yīng)用的思路,既然能用應(yīng)用模式啟動,那自然也能使用應(yīng)用的開發(fā)方式,使用 supertest 來做測試,比原來簡單自然多了。
?
v2.0 升級 - Web 模式
在 v1.0 時期,Midway Serverless 針對業(yè)界常用的 egg/koa/express,做了將應(yīng)用代碼無縫遷移到 Serverless 環(huán)境的功能,這三種框架都可以在 f.yml 中增加 deployType 的方式,通過構(gòu)建自動化生成入口,支持傳統(tǒng)應(yīng)用上彈性容器的訴求。
?
之前也有用戶問道,如果我不希望代碼再跑在函數(shù)環(huán)境了怎么辦?v2.0 的答案是,你可以將那些代碼,通過應(yīng)用的模式部署到自己的傳統(tǒng)容器,或者 Docker。
部署的方式很簡單,由于使用了 @midwayjs/serverless-app (上面測試提到過),和應(yīng)用一樣的編碼模式,就可以啟動一個 HTTP 應(yīng)用了。
?
四、v2.0 一體化能力增強
去年 6 月,Midway Serverless 向社區(qū)開放了一體化編碼的方案,使用函數(shù)式編碼,類 React Hooks 的編碼方式,讓前端開發(fā)的同學(xué)無比熟悉。
?
在 v2.0 之中,進一步增強了這套一體化方案,讓前端開發(fā)的體驗進一步提升。從下面四個方面一一為大家介紹。
?
一體化增強 - 極速啟動
首先是極速模式,傳統(tǒng)的 React/Vue 開發(fā)/構(gòu)建的時間大家也都了解,Webpack 的工作時間往往接近 20s,而得益于最近新出的 vite,經(jīng)過我們的測試和使用,傳統(tǒng)的 20s 縮減到了 2s 以下,可以說前端再一次得以飛躍。
?
而 vite 良好的兼容性,可以包容非常多的前端框架,雖然 vite 剛出不久,相信過不了多久,就會在全前端場景鋪開。
?
一體化增強 - 單元測試
第二個方面是單測,傳統(tǒng)的一體化,由于編譯的存在,我們的單測十分困難,有用戶不止一次問我們,怎么做單測,怎么優(yōu)雅地做前后端調(diào)用。
在新的 v2.0 中,采用了兩種方案做測試。
既可以使用 supertest 來執(zhí)行傳統(tǒng)的 HTTP 行為模擬做單測,也可以使用我們提供的 runFunction 函數(shù)來做單測。
?
?
一體化增強 - 支持應(yīng)用
第三個特性是非常令人驚喜的,一體化項目除了能在函數(shù)場景下使用,如今,Midway Serverless 2.0 也將其沿用到了應(yīng)用開發(fā)上。傳統(tǒng)的 Midway 項目也可以使用一體化方案開發(fā)了。
?
一體化增強 - 運行時升級
在 v1.0 時期,由于編譯器的限制,我們的入口函數(shù)編寫時有著諸多限制,但是在 v2.0 的時候,我們將運行時換成了原生框架以及原生的 node 模塊,這樣以前的種種限制都不存在了。
?
同時,你也可以編寫自己的 hooks 模塊,將業(yè)務(wù)邏輯輕松地組合到一起。
?
五、未來
Midway Serverless 2.0 提供了諸多能力的升級,但是還遠遠不夠,我們依舊在不斷提供新的能力,讓不同的場景都豐富起來,讓前端可以游刃有余地享受到新體系的紅利。
作者:張挺
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載
總結(jié)
以上是生活随笔為你收集整理的Midway Serverless 发布 2.0,一体化让前端研发再次提效的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广播电视加速技术迭代,如何用新技术拥抱行
- 下一篇: 阿里云 EMR Delta Lake 在