阿里 Midway 正式发布 Serverless v1.0,研发提效 50%
開(kāi)源為了前端和 Node.js 的發(fā)展,Github:https://github.com/midwayjs/midway,點(diǎn)擊直接跳轉(zhuǎn)點(diǎn) Star。
去年阿里提出 Serverless 架構(gòu),并利用其新一代研發(fā)架構(gòu),減少了大量研發(fā)人員對(duì)基礎(chǔ)設(shè)施和運(yùn)維的關(guān)注。對(duì)前端開(kāi)發(fā)者而言,他們只需寫(xiě)幾個(gè)函數(shù)即可實(shí)現(xiàn)后端業(yè)務(wù)邏輯,推動(dòng)業(yè)務(wù)快速上線,讓整個(gè)前端研發(fā)效能提升 50%。
在過(guò)去的半年里,Midway FaaS 收獲了很多同學(xué)的關(guān)注,也有不少大企業(yè)已經(jīng)直接開(kāi)始使用,在此感謝你們。今天,Midway FaaS 將演進(jìn)為 Midway Serverless,并正式成為 Midway 體系的核心場(chǎng)景,同時(shí)正式發(fā)布 v1.0 版本。
v1.0 版本代表著一個(gè)正式的版本,可以放心的使用。通過(guò)整個(gè) Midway Serverless 新體系,我們將阿里的 Serverless 能力逐步開(kāi)放,前端將進(jìn)入一個(gè)嶄新的時(shí)代。就像兩年前說(shuō)的一樣,開(kāi)源只是開(kāi)始,終態(tài)遠(yuǎn)沒(méi)有到來(lái)。
如今的 Serverless,是云廠商各自開(kāi)疆拓土的黃金時(shí)代,也是各位嘗試的最好年代,如今 Node.js 在這個(gè)時(shí)候成為了最佳選擇,Midway 體系也當(dāng)仁不讓地站在這十字路口,去朝著引領(lǐng)的方向去行。
什么是 Midway Serverless
就像前面提到的一樣,Midway Serverless 是套面向 Serverless 的解決方案,它包括框架,運(yùn)行時(shí),工具鏈,配置規(guī)范幾個(gè)部分,這幾部分的組合之后,提供了一些面向 Serverless 體系的特有能力:
1. 平臺(tái)間遷移更容易
- 通過(guò)提供統(tǒng)一的配置規(guī)范以及入口抹平機(jī)制,讓代碼在每個(gè)平臺(tái)基本相同;
- 擴(kuò)展不同云平臺(tái)的運(yùn)行時(shí) API,不僅能加載通用的平臺(tái)間擴(kuò)展,也能接入公司內(nèi)部的私有化部署方案。
2. 讓?xiě)?yīng)用更易維護(hù)和擴(kuò)展
- 提供了標(biāo)準(zhǔn)的云平臺(tái)函數(shù)出入?yún)⑹录x;
- 提供了多套和社區(qū)前端 React、Vue 等融合一體化開(kāi)發(fā)的方案;
- 使用了 TypeScript 作為基礎(chǔ)語(yǔ)言,方便應(yīng)用擴(kuò)展和定義;
- 提供了完善的 Midway 體系標(biāo)志性的依賴(lài)注入解決方案。
3. 生態(tài)更輕量和自由
- 函數(shù)體系復(fù)用 koa 的生態(tài)和 Web 中間件能力,在處理傳統(tǒng) Web 時(shí)更加得心應(yīng)手;
- 提供 egg 組件復(fù)用 egg 插件的生態(tài)鏈,企業(yè)級(jí)開(kāi)發(fā)鏈路更簡(jiǎn)單順暢;
- Midway 體系的裝飾器能力統(tǒng)一,讓傳統(tǒng) Web 遷移到 Serverless 體系更快更好。
上面提到的全部能力,都已經(jīng)在 Midway Serverless 倉(cāng)庫(kù)開(kāi)源,歡迎點(diǎn)擊鏈接直接跳轉(zhuǎn)點(diǎn) Star。Github:https://github.com/midwayjs/midway
Serverless 和 FaaS
FaaS是 Serverless 架構(gòu)的其中一種形態(tài),也是這一次 Midway 希望解決的場(chǎng)景,在 v1.0 之前,我們?cè)?FaaS 上投入了許多,但是事實(shí)上 Serverless 架構(gòu)非常龐大,FaaS 只是其中的一小部分,基于事件驅(qū)動(dòng)的模型,從微服務(wù)(MicroService)這種專(zhuān)注于單一職責(zé)與功能的小型功能塊演進(jìn)而來(lái)。如今這種更加“代碼碎片化”的軟件架構(gòu)范式,相比微服務(wù)更加細(xì)小的程序單元,給業(yè)務(wù)代碼提供了無(wú)與倫比的靈活性。
今天按照《福布斯》雜志的統(tǒng)計(jì),在商業(yè)和企業(yè)數(shù)據(jù)中心的典型服務(wù)器僅提供 5%~15% 的平均最大處理能力的輸出,這無(wú)疑是一種資源的巨大浪費(fèi)。而隨著 Serverless 架構(gòu)的出現(xiàn),讓服務(wù)提供商提供我們的計(jì)算能力最大限度滿足實(shí)時(shí)需求,這將使我們能更有效地利用計(jì)算資源。
彈性容器,能夠滿足當(dāng)前的對(duì)資源利用全部憧憬,也是云平臺(tái)不斷追求的目標(biāo)之一,而對(duì)于開(kāi)發(fā)者,不管是彈性的容器,還是彈性的函數(shù),只要有一套代碼能都運(yùn)行其中,滿足業(yè)務(wù)的需求即可。Midway Serverless 的目標(biāo)由此而來(lái),從原來(lái)的 FaaS 場(chǎng)景開(kāi)拓到了其他領(lǐng)域,不管是函數(shù)還是新的架構(gòu),我們都將一一滿足,并落地業(yè)務(wù)、反哺社區(qū)。
防平臺(tái)鎖定
Vendor Lock-in 是每個(gè)使用云平臺(tái)的的人都會(huì)拷問(wèn)靈魂的問(wèn)題,Midway Serverless 一開(kāi)始的初衷就是讓一套代碼能夠運(yùn)行在不同的平臺(tái)和運(yùn)行時(shí)之上,我們不建議在不了解全貌時(shí)去自定義運(yùn)行時(shí),那非常的危險(xiǎn)。事實(shí)上,官方的運(yùn)行時(shí)是運(yùn)行最穩(wěn)定,也一定是性能最好的,所有的基準(zhǔn)跑分都是基于此。
我們了解的大多數(shù)企業(yè)在面對(duì) Serverless 的第一個(gè)問(wèn)題就是,我的代碼是不是一定得綁死到阿里云,或者騰訊云,aws 等等。
面對(duì)這個(gè)問(wèn)題,Midway Serverless 提供了一套 “隱藏式” 入口加上通用化定義來(lái)解決這個(gè)問(wèn)題。
針對(duì)每個(gè)平臺(tái),Midway Serverless 提供了不同的運(yùn)行時(shí)啟動(dòng)器,用于抹平各個(gè)平臺(tái)的差異,并且通過(guò)這些啟動(dòng)器,將各個(gè)平臺(tái)的出入?yún)?#xff0c;以及各個(gè) event 結(jié)構(gòu),網(wǎng)關(guān)的返回格式進(jìn)行規(guī)則化,讓用戶(hù)盡可能不感知底層容器以及協(xié)議的差異。
除此之外,Midway Serverless 提供了一套 Spec 定義,來(lái)抹平多個(gè)平臺(tái)的差異,同時(shí)也能方便的在多個(gè)平臺(tái)間復(fù)用相同的工具鏈和函數(shù)邏輯。
這樣,不管是 API Gateway,還是普通的 HTTP 觸發(fā)器,都能在統(tǒng)一的編程平面中提供 API,讓編寫(xiě)代碼變的簡(jiǎn)單。
TS 與裝飾器
函數(shù)的寫(xiě)法是十分靈活的,靈活帶來(lái)了簡(jiǎn)便,同時(shí)也帶來(lái)了維護(hù)成本。由此在函數(shù)中引入了 TS,引入了標(biāo)準(zhǔn)和擴(kuò)展性。
下面的代碼,看起來(lái)似乎是 koa 的標(biāo)準(zhǔn)語(yǔ)法,其實(shí)是函數(shù)中面向 HTTP 觸發(fā)器的 API,為了和 Web 棧語(yǔ)法保持一致,通過(guò)一些轉(zhuǎn)變,使得參數(shù)的獲取,調(diào)用都盡可能無(wú)縫銜接,也減少了學(xué)習(xí)的成本,原有的代碼也能更好的遷移過(guò)來(lái)。
另一邊,通過(guò)裝飾器修飾的方法都將變?yōu)楹瘮?shù)入口,讓整個(gè)函數(shù)的結(jié)構(gòu)變得自由。通過(guò)構(gòu)建的方式,讓真實(shí)的入口隱藏起來(lái),不僅讓函數(shù)跨多個(gè)平臺(tái)調(diào)用,也可以適配到不同的路由。如上面的示例,在一個(gè)文件中入口有多個(gè),可以共享同一份代碼,但是實(shí)際上每個(gè)函數(shù)的調(diào)用又是獨(dú)立的,在管理和后期維護(hù)上都提供了便利。
不同云平臺(tái)的實(shí)際結(jié)構(gòu)是不同,如果用戶(hù)需要使用到傳統(tǒng)的 event、context 結(jié)構(gòu), 我們也給不同平臺(tái)觸發(fā)器提供了不同的定義,方便代碼編寫(xiě),如下圖。
復(fù)用社區(qū)生態(tài)
上面提到,Midway Serverless 體系的設(shè)計(jì)的初衷就是復(fù)用現(xiàn)有 koa 生態(tài),將多個(gè)平臺(tái)的底層 event 規(guī)則化成統(tǒng)一的類(lèi) koa API。API 相似的目的是為了整個(gè) koa 的 web 生態(tài),我們同時(shí)也希望整個(gè) koa 的 middleware 生態(tài)都可以復(fù)用。如下圖,引入了 @koa/cors 。
另一面,Midway 由于出色的 IoC 組件化能力,提供了上層的 egg 基礎(chǔ)組建,同時(shí)也能復(fù)用現(xiàn)有的 egg 插件,讓傳統(tǒng)企業(yè)級(jí)開(kāi)發(fā)的能力得以延續(xù),比如下圖就是使用 egg-mysql 插件的示例。
前端賦能
云 + 端的開(kāi)發(fā)體驗(yàn)是 Midway Serverless 目標(biāo)之一,傳統(tǒng)應(yīng)用的開(kāi)發(fā),前端和后端分離,多倉(cāng)庫(kù)開(kāi)發(fā),部署分離。就算使用了 Node.js 的膠水層,也無(wú)法避免人員開(kāi)發(fā)體感上的割裂。而在 Serverless 體系下,這不是什么問(wèn)題。
由于后端的大幅簡(jiǎn)化,再加上云服務(wù)的 BaaS 化,讓數(shù)據(jù)聚合,頁(yè)面渲染變的更容易,也能更快的讓前端上手和開(kāi)發(fā)。
一體化慢慢成為了這一塊的前端訴求,所謂的一體化,不僅僅是傳統(tǒng)倉(cāng)庫(kù)的融合,也是整個(gè)開(kāi)發(fā)模式的演進(jìn),從工程體系加上代碼,CI/CD 的整套體系重塑的機(jī)會(huì)。
如今的 Midway Serverless,提供了和前端一體的開(kāi)發(fā)方案,囊括了社區(qū)現(xiàn)有的 React、Vue 等生態(tài),也對(duì)整個(gè)工具鏈(Webpack,ice scrips,umi 等)做了定制化方案,對(duì)不同的場(chǎng)景,比如博客等也提供了開(kāi)箱即用的解決方案。
至于詳細(xì)的前后端一體化能力,我們后續(xù)將單獨(dú)開(kāi)一篇文章來(lái)介紹前端一體化的細(xì)節(jié)和思考。
應(yīng)用和函數(shù)
Serverless 是未來(lái)一段時(shí)間的方向,也是前端邁向更高層次的鋪路磚。
之前一直在思索,如今的函數(shù)式開(kāi)發(fā)的終態(tài)和應(yīng)用的關(guān)系到底是什么?
現(xiàn)階段,我們的答案是趨于統(tǒng)一,在被無(wú)數(shù)次的靈魂拷問(wèn)和用戶(hù)需求的追問(wèn)中,我們得出了這個(gè)答案,函數(shù)即是應(yīng)用在當(dāng)前業(yè)務(wù)中的最小體現(xiàn),更簡(jiǎn)單的來(lái)說(shuō),是在最小規(guī)格容器中運(yùn)行應(yīng)用的部分代碼。
之后的一段時(shí)間,我們將聚焦于更多平臺(tái)的接入,以及傳統(tǒng)應(yīng)用的遷移方案上,讓之前的用戶(hù)也能享受到 Serverless 彈性的紅利,讓企業(yè)成本更低,業(yè)務(wù)上線更容易。
最后
在集團(tuán)大中臺(tái)、小前端業(yè)務(wù)架構(gòu)日趨深化的背景下,借助集團(tuán)云原生 Serverless 的發(fā)展,去年 Node.js 在業(yè)務(wù)端到端交付場(chǎng)景上看到了未來(lái)。
新一代云 + 端的前臺(tái)業(yè)務(wù)交付模式逐漸成為現(xiàn)實(shí),這可以幫助技術(shù)團(tuán)隊(duì)塑造有業(yè)務(wù)整體交付能力的特種兵,幫助業(yè)務(wù)快贏。但其路漫漫仍諸多不完善,為了盡早達(dá)到這一步,需要高度聚焦在兩個(gè)核心問(wèn)題上:規(guī)模化成本和交付速度。
期望在未來(lái)透過(guò)我們對(duì)規(guī)模化成本、交付速度的持續(xù)投入,Node.js/Serverless 體系可以體現(xiàn)出全面的先進(jìn)性。如果你有任何疑問(wèn),歡迎加入釘釘交流群:https://qr.dingtalk.com/action/joingroup?code=v1,k1,Lr3HsEsA55Pk8NPqlkhxajuhpcBUpGWa3bRHcW7wwTw=&_dt_no_comment=1&origin=11
Midway Serverless,Go!
體驗(yàn)有禮:5 分鐘極速上手 Serverless
“Serverless” 近年來(lái)非常火爆。人人都熱衷于探討它出現(xiàn)的意義,但對(duì)于如何上手使用或在生產(chǎn)環(huán)境落地,卻談之甚少。我們?cè)O(shè)計(jì)了體驗(yàn)場(chǎng)景,手把手帶你 5 分鐘上手 Serverless,還送 2000 個(gè)阿里云“第一行代碼”鎏金限量馬克杯!
點(diǎn)擊查看詳情:https://developer.aliyun.com/adc/series/fc/
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢(shì)、云原生大規(guī)模的落地實(shí)踐,做最懂云原生開(kāi)發(fā)者的公眾號(hào)。”
總結(jié)
以上是生活随笔為你收集整理的阿里 Midway 正式发布 Serverless v1.0,研发提效 50%的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Sentinel Go 0.4.0 发布
- 下一篇: 都已经十岁的 Apache Dubbo,