阿里自研開(kāi)源框架 Midway Serverless ,如何讓前端提效 50%?
分類(lèi):互聯(lián)網(wǎng)熱點(diǎn)
編輯:小新
瀏覽量:7
2020-07-10 11:21:32
###Midway Serverless
Midway 之前是傳統(tǒng)的 Web ??蚣埽蜆I(yè)界現(xiàn)有的 EggJS,NestJS 等解決的是類(lèi)似的問(wèn)題,從中后臺(tái)到移動(dòng)端應(yīng)用,前端都廣泛采用了這些框架來(lái)構(gòu)建自己的業(yè)務(wù)系統(tǒng)。阿里也不例外,Node.js 應(yīng)用非常多,但是這些系統(tǒng)有一個(gè)共性,大多數(shù)
服務(wù)器的 CPU 使用率非常低,這無(wú)疑是一種資源的巨大浪費(fèi)。
這種資源浪費(fèi)的常態(tài)以及應(yīng)用的規(guī)?;瘞缀伪稊?shù)的增產(chǎn),讓?xiě)?yīng)用治理的人員頭疼不已。于是,阿里把目光轉(zhuǎn)向 Serverless 架構(gòu),他們開(kāi)始去思考,如何有效去減少研發(fā)人員使用基礎(chǔ)設(shè)施的效率和運(yùn)維的成本。
###Serverless 和 FaaS
FaaS 是 Serverless 架構(gòu)的其中一種形態(tài),也是這次 Midway 希望解決的場(chǎng)景。在 Midway Serverless 1.0 之前,我們?cè)?FaaS 上投入了許多,但是事實(shí)上,Serverless 架構(gòu)非常龐大,F(xiàn)aaS 只是其中的一小部分,基于事件驅(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ì)算能力最大限度滿(mǎn)足實(shí)時(shí)需求,這將使我們能更有效地利用計(jì)算資源。
阿里目前使用了 FaaS 來(lái)作為業(yè)務(wù)的落地容器,希望能進(jìn)一步減少容器的規(guī)格,降低成本。集團(tuán)機(jī)器的成本當(dāng)前是按 CPU Core 算的,以 4C8G(4 核 8G)的機(jī)器為例,一個(gè)中后臺(tái)應(yīng)用最少需要 2 臺(tái)機(jī)器,而上了 FaaS,能減少到 1C,乃至 0.5C,這個(gè)成本下降的非常可觀。
###落地前端
在阿里“大中臺(tái)小前臺(tái)”的趨勢(shì)下,前端是最接近用戶(hù)且活力迸發(fā)的團(tuán)隊(duì)。前端一直希望能夠有機(jī)會(huì)擺脫“資源”的困境,對(duì)整體工種的職能、邊界有更廣泛而清晰的拓展需求,造就了如今前端的范圍不斷衍生,從端側(cè)到智能化,無(wú)一不是職能擴(kuò)大的體現(xiàn)。
對(duì)前端開(kāi)發(fā)者而言,Node.js 賦予了開(kāi)疆拓土的能力,自前后端分離開(kāi)始,從端到全棧,Node.js 已經(jīng)成為前端學(xué)習(xí)的標(biāo)配,而 DevOPS 的提出,也讓前端逐步走向開(kāi)發(fā)自治,運(yùn)維自驅(qū)的路子。而阿里在實(shí)際實(shí)踐中發(fā)現(xiàn),大部分前端的確在朝著那個(gè)方向走,但是更多的是在業(yè)務(wù)和自治之間產(chǎn)生了一些迷惘,這兩者的關(guān)系其實(shí)很不容易平衡,時(shí)間一久也會(huì)對(duì)業(yè)務(wù)的規(guī)模化產(chǎn)生一些影響。
而 Serverless 的出現(xiàn),正好讓前端有機(jī)會(huì)減少整個(gè) OPS 環(huán)節(jié),更加聚焦于業(yè)務(wù)本身;同時(shí),由于整體的代碼量減少以及輕量化開(kāi)發(fā)理念、部署平臺(tái)能力的增強(qiáng),讓整個(gè)業(yè)務(wù)的規(guī)?;杀驹絹?lái)越低。
之前,有人把 Serverless 比作前端的 3.0,這不無(wú)道理。Node.js 的輕量、快速已經(jīng)得到了業(yè)界技術(shù)人員的廣泛認(rèn)可,在 Serverless 時(shí)代,容器的快速調(diào)度、代碼的快速啟動(dòng),都是非常重要的指標(biāo),而 Node.js 在這方面的優(yōu)勢(shì)非常明顯。
###前端提效 50%
這個(gè)數(shù)值在我們看來(lái),Serverless 帶來(lái)的效能變化的數(shù)值可能更大。其中分為規(guī)模化成本和交付速度兩個(gè)方面。
###降低規(guī)?;杀?**首先是服務(wù)器成本。**
從容器本身的角度來(lái)看,上文已經(jīng)簡(jiǎn)單演算過(guò),從傳統(tǒng)容器到函數(shù),整個(gè)容器資源從固定規(guī)格到更加細(xì)粒度的規(guī)格去逐步演進(jìn),這將更加符合場(chǎng)景的訴求。經(jīng)過(guò)我們一年的跟蹤,中后臺(tái)應(yīng)用的機(jī)器成本能降低 70% 以上,而實(shí)際移動(dòng)端業(yè)務(wù),也達(dá)到了 30% 左右。
**其次是治理成本。**
越是大的公司,歷史包袱越是嚴(yán)重,今年的阿里集團(tuán)內(nèi)部,還存留著 Node.js V6 乃至 V4 的代碼。每年的 Node.js 版本升級(jí)、框架升級(jí)、庫(kù)升級(jí)都要至少長(zhǎng)達(dá)幾個(gè)月,甚至幾年。
而如今,函數(shù)運(yùn)行時(shí)(Runtime)是前端自己編寫(xiě)的,我們可以將需要治理的 Node.js 版本、框架,乃至中間件都埋入其中,這就需要定制整個(gè)運(yùn)行時(shí)及其通用化的能力。
阿里的內(nèi)的函數(shù)服務(wù)有多種,提供了不一樣的基建和網(wǎng)關(guān)服務(wù)。今天淘系前端能夠使用一套代碼部署在不同的平臺(tái)之上,就得益于 Midway Sererless 底層的多平臺(tái)適配能力。同時(shí),這套代碼的防腐層能力也正好能抹平社區(qū)的平臺(tái)差異性。
針對(duì)每個(gè)平臺(tái),Midway Serverless 提供了不同的運(yùn)行時(shí)啟動(dòng)器,用于抹平各個(gè)平臺(tái)的差異,并且通過(guò)這些啟動(dòng)器,將各個(gè)平臺(tái)的出入?yún)ⅲ约案鱾€(gè) event 結(jié)構(gòu),網(wǎng)關(guān)的返回格式進(jìn)行規(guī)則化,讓用戶(hù)盡可能不感知底層容器以及協(xié)議的差異。
阿里通過(guò)這套方案,將一套代碼部署在不同的函數(shù)服務(wù)之上,提供出不同協(xié)議的服務(wù)。所以到社區(qū),阿里開(kāi)源的方案也同樣適用于多個(gè)平臺(tái),比如
阿里云、騰訊云或者是未來(lái)的 AWS Lambda、Azure 等。
經(jīng)過(guò)這層防腐和定制,整個(gè)運(yùn)行時(shí)的更新變的簡(jiǎn)單,將傳統(tǒng)應(yīng)用需要半年起的版本推平工作,在短短一周內(nèi)就完成了。舉個(gè)例子,底層有個(gè)和平臺(tái)的連接協(xié)議庫(kù)有安全性漏洞,從接到安全報(bào)告開(kāi)始,我們就需要做以下兩件事,一是從平臺(tái)數(shù)據(jù)拉取受影響的函數(shù)范圍,給所有業(yè)務(wù)方進(jìn)行了安全性郵件推送,并告知在一定時(shí)間之內(nèi)不做主動(dòng)申報(bào)的,將默認(rèn)統(tǒng)一自動(dòng)更新。二是在流量低谷期進(jìn)行滾動(dòng)更新,并以告知業(yè)務(wù)及時(shí)關(guān)注和測(cè)試。經(jīng)過(guò)這樣的流程,整個(gè)安全性更新在極短的時(shí)間內(nèi)就統(tǒng)一處理完畢,這在以往的應(yīng)用場(chǎng)景下,幾乎是不可能的。
最后是安全生產(chǎn)成本,這塊在阿里內(nèi)部的訴求較大,但是中小型公司應(yīng)該不多,這里就不再詳述了。
通過(guò)這三塊的管控和治理,使得在 Serverless 架構(gòu)下,集團(tuán)業(yè)務(wù)規(guī)?;杀緲O速降低。
###交付速度
除了規(guī)?;杀就?,另外一塊就是業(yè)務(wù)交付的情況。前端面向的移動(dòng)端和中后臺(tái)兩大場(chǎng)景都需要快速的交付,以現(xiàn)在的情況來(lái)看,前端依舊是研發(fā)的瓶頸,在使用了 Serverless 之后,原有的復(fù)雜流程已經(jīng)無(wú)法滿(mǎn)足現(xiàn)有的訴求。
去年我們團(tuán)隊(duì)在 GMTC 及 D2 分享中說(shuō)過(guò),前端自建了一套研發(fā)流程和平臺(tái),用于滿(mǎn)足在新的場(chǎng)景的測(cè)試、灰度和回滾。整個(gè)研發(fā)流程,節(jié)點(diǎn)比以往更少,更容易聚焦。
**而另一邊,整個(gè)研發(fā)的效率,也有了不小的提升。**
前端開(kāi)發(fā)的效率,得益于前后端的融合,一體化開(kāi)發(fā)和交付的速度。傳統(tǒng)的前端研發(fā),需要在前端倉(cāng)庫(kù)和 Node.js 端倉(cāng)庫(kù)多處進(jìn)行開(kāi)發(fā),發(fā)布流程也是分離的。而在 Serverless 場(chǎng)景下,Midway Serverless 設(shè)計(jì)了一體化開(kāi)發(fā)和發(fā)布的方案,這讓前端能將業(yè)務(wù)在同一個(gè)倉(cāng)庫(kù)開(kāi)發(fā),同一個(gè)流程發(fā)布。特別是那些維護(hù)多業(yè)務(wù)的同學(xué),感觸會(huì)更深。
除了一體化的開(kāi)發(fā)、調(diào)試,部署之外,從代碼角度看,原有的編碼習(xí)慣被保留,無(wú)需再度學(xué)習(xí)新的編程 API 也是一個(gè)方面。Midway Serverless 除了提供基于 TypeScript 和裝飾器的編碼風(fēng)格之外,也提供了一些傳統(tǒng)應(yīng)用 Egg 應(yīng)用遷移的方案,在不同的 BU 中也進(jìn)行了落地嘗試,效果非常不錯(cuò)。
經(jīng)過(guò)一年我們?cè)谄脚_(tái)測(cè)的統(tǒng)計(jì)和業(yè)務(wù)開(kāi)發(fā)方的走訪(fǎng),新的研發(fā)模式對(duì)業(yè)務(wù)整體的交付效率有一定的提升,這個(gè)提升是普適性的。
以前端完成需求為例,傳統(tǒng)完成業(yè)務(wù)需求需要后端的介入以及聯(lián)調(diào),而新的研發(fā)模式在代碼層面會(huì)開(kāi)發(fā)更快,雖然單人來(lái)看工作量增加了,但是整體的交付時(shí)間,投入人員以及聯(lián)調(diào)成本都有明顯的降低。
除了業(yè)務(wù)感性的交付數(shù)據(jù)外,我們還統(tǒng)計(jì)了整體的研發(fā)代碼量,提交的代碼頻次以及需求的迭代周期和發(fā)布。經(jīng)過(guò)一年業(yè)務(wù)跟蹤和數(shù)據(jù)的測(cè)算,我們得出整體前端人效的提升約為 48%,整個(gè)核心的算法牽扯到很對(duì)內(nèi)部的數(shù)據(jù),抱歉無(wú)法提供,歡迎大家入職觀摩。
###Serverless 的弊端
任何事物都有兩面性。Serverless 優(yōu)勢(shì)固然的大,但是畢竟是新東西,特別是在企業(yè)中落地的時(shí)候,難免會(huì)遇到一些問(wèn)題。
一是基建的缺失,傳統(tǒng)的各種客戶(hù)端、日系投遞、鏈路追蹤等能力都非常的完善,而函數(shù)這些新的事物還需要時(shí)間逐步沉淀,加上彈性容器的影響,整個(gè)鏈路都還是新生事物,需要時(shí)間去驗(yàn)證穩(wěn)定性和可靠性。
二是業(yè)務(wù)同學(xué)的整體理念還是停留在傳統(tǒng)應(yīng)用的層面,對(duì)函數(shù)的運(yùn)作機(jī)制,事件觸發(fā)的行為了解不深,加上框架做了很多屏蔽的工作,很容易出現(xiàn)某些代碼編寫(xiě)錯(cuò)誤或者前期需求評(píng)估不到位,能力無(wú)法實(shí)現(xiàn)的情況。這些都需要慢慢的打磨,相信在不斷的實(shí)踐下,整體都會(huì)越變?cè)胶谩?###最后
我們可以看到,50% 的計(jì)算方式是一個(gè)相對(duì)感性的數(shù)字,但是 Serverless 在其中實(shí)實(shí)在在的體現(xiàn)出了它的魅力和價(jià)值。最后慶祝一下 Midway Serverless v1.0 發(fā)布。通過(guò)整個(gè) Midway Serverless 新體系,我們將阿里的 Serverless 能力逐步開(kāi)放,希望整個(gè)前端能有不同的思路去承擔(dān)更大的業(yè)務(wù)職能,進(jìn)入一個(gè)嶄新的時(shí)代。
> 【云棲號(hào)在線(xiàn)課堂】每天都有產(chǎn)品技術(shù)專(zhuān)家分享!
> 課程地址:https://yqh.aliyun
.com/live
> 立即加入社群,與專(zhuān)家面對(duì)面,及時(shí)了解課程最新動(dòng)態(tài)!
> 【云棲號(hào)在線(xiàn)課堂 社群】https://c.tb
.cn/F3.Z8gvnK
原文發(fā)布時(shí)間:2020-07-09
本文作者:陳仲寅
本文來(lái)自:“”,了解相關(guān)信息可以關(guān)注“”
聲明:免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)
送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)
需注明出處:新網(wǎng)idc知識(shí)百科