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