午夜视频在线观看你懂的-国产对白videos高潮内射-成人国产一区二区三区av-亚洲欧美中文日本在线视频

前端教程
當(dāng)前位置: 主頁 > 資訊 > 前端教程
讓前端提效50%!阿里自研開源框架Midway Serverless解讀
發(fā)布日期:2023-07-13 閱讀次數(shù):

  去年開始,阿里前端及阿里的多個(gè)團(tuán)隊(duì)聯(lián)合開始了一項(xiàng)“秘密”任務(wù),使用 Serverless 這一新一代研發(fā)架構(gòu),希望能大量減少研發(fā)人員使用基礎(chǔ)設(shè)施和運(yùn)維的成本。目前這一框架已經(jīng)實(shí)現(xiàn)前端提效 50%,且已在 Github 開源,開源地址見文末。

  Midway 之前是傳統(tǒng)的 Web ??蚣埽蜆I(yè)界現(xiàn)有的 EggJS,NestJS 等解決的是類似的問題,從中后臺(tái)到移動(dòng)端應(yīng)用,前端都廣泛采用了這些框架來構(gòu)建自己的業(yè)務(wù)系統(tǒng)。阿里也不例外,Node.js 應(yīng)用非常多,但是這些系統(tǒng)有一個(gè)共性,大多數(shù)服務(wù)器的 CPU 使用率非常低,這無疑是一種資源的巨大浪費(fèi)。

  這種資源浪費(fèi)的常態(tài)以及應(yīng)用的規(guī)?;瘞缀伪稊?shù)的增產(chǎn),讓應(yīng)用治理的人員頭疼不已。于是,阿里把目光轉(zhuǎn)向 Serverless 架構(gòu),他們開始去思考,如何有效去減少研發(fā)人員使用基礎(chǔ)設(shè)施的效率和運(yùn)維的成本。

  FaaS 是 Serverless 架構(gòu)的其中一種形態(tài),也是這次 Midway 希望解決的場景。在 Midway Serverless 1.0 之前,我們?cè)?FaaS 上投入了許多,但是事實(shí)上,Serverless 架構(gòu)非常龐大,F(xiàn)aaS 只是其中的一小部分,基于事件驅(qū)動(dòng)的模型,從微服務(wù)(MicroService)這種專注于單一職責(zé)與功能的小型功能塊演進(jìn)而來。如今這種更加“代碼碎片化”的軟件架構(gòu)范式,相比微服務(wù)更加細(xì)小的程序單元,給業(yè)務(wù)代碼提供了無與倫比的靈活性。

  按照《福布斯》雜志的統(tǒng)計(jì),在商業(yè)和企業(yè)數(shù)據(jù)中心的典型服務(wù)器僅提供 5%~15% 的平均最大處理能力的輸出,這無疑是一種資源的巨大浪費(fèi)。而隨著 Serverless 架構(gòu)的出現(xiàn),讓服務(wù)提供商提供我們的計(jì)算能力最大限度滿足實(shí)時(shí)需求,這將使我們能更有效地利用計(jì)算資源。

  阿里目前使用了 FaaS 來作為業(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)”的趨勢下,前端是最接近用戶且活力迸發(fā)的團(tuán)隊(duì)。前端一直希望能夠有機(jī)會(huì)擺脫“資源”的困境,對(duì)整體工種的職能、邊界有更廣泛而清晰的拓展需求,造就了如今前端的范圍不斷衍生,從端側(cè)到智能化,無一不是職能擴(kuò)大的體現(xiàn)。

  對(duì)前端開發(fā)者而言,Node.js 賦予了開疆拓土的能力,自前后端分離開始,從端到全棧,Node.js 已經(jīng)成為前端學(xué)習(xí)的標(biāo)配,而 DevOPS 的提出,也讓前端逐步走向開發(fā)自治,運(yùn)維自驅(qū)的路子。而阿里在實(shí)際實(shí)踐中發(fā)現(xiàn),大部分前端的確在朝著那個(gè)方向走,但是更多的是在業(yè)務(wù)和自治之間產(chǎn)生了一些迷惘,這兩者的關(guān)系其實(shí)很不容易平衡,時(shí)間一久也會(huì)對(duì)業(yè)務(wù)的規(guī)?;a(chǎn)生一些影響。

  而 Serverless 的出現(xiàn),正好讓前端有機(jī)會(huì)減少整個(gè) OPS 環(huán)節(jié),更加聚焦于業(yè)務(wù)本身;同時(shí),由于整體的代碼量減少以及輕量化開發(fā)理念、部署平臺(tái)能力的增強(qiáng),讓整個(gè)業(yè)務(wù)的規(guī)?;杀驹絹碓降汀?

  之前,有人把 Serverless 比作前端的 3.0,這不無道理。Node.js 的輕量、快速已經(jīng)得到了業(yè)界技術(shù)人員的廣泛認(rèn)可,在 Serverless 時(shí)代,容器的快速調(diào)度、代碼的快速啟動(dòng),都是非常重要的指標(biāo),而 Node.js 在這方面的優(yōu)勢非常明顯。

  這個(gè)數(shù)值在我們看來,Serverless 帶來的效能變化的數(shù)值可能更大。其中分為規(guī)?;杀竞徒桓端俣葍蓚€(gè)方面。

  從容器本身的角度來看,上文已經(jīng)簡單演算過,從傳統(tǒng)容器到函數(shù),整個(gè)容器資源從固定規(guī)格到更加細(xì)粒度的規(guī)格去逐步演進(jìn),這將更加符合場景的訴求。經(jīng)過我們一年的跟蹤,中后臺(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í)、庫升級(jí)都要至少長達(dá)幾個(gè)月,甚至幾年。

  而如今,函數(shù)運(yùn)行時(shí)(Runtime)是前端自己編寫的,我們可以將需要治理的 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)的差異,并且通過這些啟動(dòng)器,將各個(gè)平臺(tái)的出入?yún)?,以及各個(gè) event 結(jié)構(gòu),網(wǎng)關(guān)的返回格式進(jìn)行規(guī)則化,讓用戶盡可能不感知底層容器以及協(xié)議的差異。

  阿里通過這套方案,將一套代碼部署在不同的函數(shù)服務(wù)之上,提供出不同協(xié)議的服務(wù)。所以到社區(qū),阿里開源的方案也同樣適用于多個(gè)平臺(tái),比如阿里云、騰訊云或者是未來的 AWS Lambda、Azure 等。

  經(jīng)過這層防腐和定制,整個(gè)運(yùn)行時(shí)的更新變的簡單,將傳統(tǒng)應(yīng)用需要半年起的版本推平工作,在短短一周內(nèi)就完成了。舉個(gè)例子,底層有個(gè)和平臺(tái)的連接協(xié)議庫有安全性漏洞,從接到安全報(bào)告開始,我們就需要做以下兩件事,一是從平臺(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)注和測試。經(jīng)過這樣的流程,整個(gè)安全性更新在極短的時(shí)間內(nèi)就統(tǒng)一處理完畢,這在以往的應(yīng)用場景下,幾乎是不可能的。

  最后是安全生產(chǎn)成本,這塊在阿里內(nèi)部的訴求較大,但是中小型公司應(yīng)該不多,這里就不再詳述了。

  通過這三塊的管控和治理,使得在 Serverless 架構(gòu)下,集團(tuán)業(yè)務(wù)規(guī)?;杀緲O速降低。

  除了規(guī)模化成本外,另外一塊就是業(yè)務(wù)交付的情況。前端面向的移動(dòng)端和中后臺(tái)兩大場景都需要快速的交付,以現(xiàn)在的情況來看,前端依舊是研發(fā)的瓶頸,在使用了 Serverless 之后,原有的復(fù)雜流程已經(jīng)無法滿足現(xiàn)有的訴求。

  去年我們團(tuán)隊(duì)在 GMTC 及 D2 分享中說過,前端自建了一套研發(fā)流程和平臺(tái),用于滿足在新的場景的測試、灰度和回滾。整個(gè)研發(fā)流程,節(jié)點(diǎn)比以往更少,更容易聚焦。

  前端開發(fā)的效率,得益于前后端的融合,一體化開發(fā)和交付的速度。傳統(tǒng)的前端研發(fā),需要在前端倉庫和 Node.js 端倉庫多處進(jìn)行開發(fā),發(fā)布流程也是分離的。而在 Serverless 場景下,Midway Serverless 設(shè)計(jì)了一體化開發(fā)和發(fā)布的方案,這讓前端能將業(yè)務(wù)在同一個(gè)倉庫開發(fā),同一個(gè)流程發(fā)布。特別是那些維護(hù)多業(yè)務(wù)的同學(xué),感觸會(huì)更深。

  除了一體化的開發(fā)、調(diào)試,部署之外,從代碼角度看,原有的編碼習(xí)慣被保留,無需再度學(xué)習(xí)新的編程 API 也是一個(gè)方面。Midway Serverless 除了提供基于 TypeScript 和裝飾器的編碼風(fēng)格之外,也提供了一些傳統(tǒng)應(yīng)用 Egg 應(yīng)用遷移的方案,在不同的 BU 中也進(jìn)行了落地嘗試,效果非常不錯(cuò)。

  經(jīng)過一年我們?cè)谄脚_(tái)測的統(tǒng)計(jì)和業(yè)務(wù)開發(fā)方的走訪,新的研發(fā)模式對(duì)業(yè)務(wù)整體的交付效率有一定的提升,這個(gè)提升是普適性的。

  以前端完成需求為例,傳統(tǒng)完成業(yè)務(wù)需求需要后端的介入以及聯(lián)調(diào),而新的研發(fā)模式在代碼層面會(huì)開發(fā)更快,雖然單人來看工作量增加了,但是整體的交付時(shí)間,投入人員以及聯(lián)調(diào)成本都有明顯的降低。

  除了業(yè)務(wù)感性的交付數(shù)據(jù)外,我們還統(tǒng)計(jì)了整體的研發(fā)代碼量,提交的代碼頻次以及需求的迭代周期和發(fā)布。經(jīng)過一年業(yè)務(wù)跟蹤和數(shù)據(jù)的測算,我們得出整體前端人效的提升約為 48%,整個(gè)核心的算法牽扯到很對(duì)內(nèi)部的數(shù)據(jù),抱歉無法提供,歡迎大家入職觀摩。

  任何事物都有兩面性。Serverless 優(yōu)勢固然的大,但是畢竟是新東西,特別是在企業(yè)中落地的時(shí)候,難免會(huì)遇到一些問題。

  一是基建的缺失,傳統(tǒng)的各種客戶端、日系投遞、鏈路追蹤等能力都非常的完善,而函數(shù)這些新的事物還需要時(shí)間逐步沉淀,加上彈性容器的影響,整個(gè)鏈路都還是新生事物,需要時(shí)間去驗(yàn)證穩(wěn)定性和可靠性。

  二是業(yè)務(wù)同學(xué)的整體理念還是停留在傳統(tǒng)應(yīng)用的層面,對(duì)函數(shù)的運(yùn)作機(jī)制,事件觸發(fā)的行為了解不深,加上框架做了很多屏蔽的工作,很容易出現(xiàn)某些代碼編寫錯(cuò)誤或者前期需求評(píng)估不到位,能力無法實(shí)現(xiàn)的情況。這些都需要慢慢的打磨,相信在不斷的實(shí)踐下,整體都會(huì)越變?cè)胶谩?

  我們可以看到,50% 的計(jì)算方式是一個(gè)相對(duì)感性的數(shù)字,但是 Serverless 在其中實(shí)實(shí)在在的體現(xiàn)出了它的魅力和價(jià)值。最后慶祝一下 Midway Serverless v1.0 發(fā)布。通過整個(gè) Midway Serverless 新體系,我們將阿里的 Serverless 能力逐步開放,希望整個(gè)前端能有不同的思路去承擔(dān)更大的業(yè)務(wù)職能,進(jìn)入一個(gè)嶄新的時(shí)代。