騰訊IMWEB前端團(tuán)隊(duì)一站式Serverless開發(fā)解決方案

來源: TencentServerless
作者:Enjoy
時(shí)間:2020-11-23
17507
結(jié)合團(tuán)隊(duì)開發(fā)流也是遇到了一些挑戰(zhàn),本文將分享IMWEB團(tuán)隊(duì)對Serverless的實(shí)踐方案。

前言

如今的Serverless可以說是一大有潛力的新技術(shù)方向,尤其在當(dāng)下上云的熱潮中,Serverless因其免運(yùn)維、自動(dòng)擴(kuò)容、支持多種編程語言等優(yōu)勢,對前端來說,是一大提升服務(wù)開發(fā)、維護(hù)效率的利器也是可嘗試全棧發(fā)展的方向,但也因?yàn)槠湫?,對落地到團(tuán)隊(duì)開發(fā)中,結(jié)合團(tuán)隊(duì)開發(fā)流也是遇到了一些挑戰(zhàn),本文將分享IMWEB團(tuán)隊(duì)對Serverless的實(shí)踐方案。

一、IMWEB團(tuán)隊(duì)Serverless研發(fā)模式的演進(jìn)與思考

在過去一、兩年,我們團(tuán)隊(duì)在多個(gè)服務(wù)項(xiàng)目中嘗試使用serverless,騰訊云Serverless提供了一站式服務(wù),通過使用該服務(wù),前端可獨(dú)立完成接口服務(wù)開發(fā),對前端個(gè)人而言可往全棧發(fā)展,也因此可緩解團(tuán)隊(duì)后臺人力緊張問題

640.webp.jpg

在開發(fā)Serverless云函數(shù)的過程中,我們也遇到了對比傳統(tǒng)服務(wù),云函數(shù)開發(fā)的一些挑戰(zhàn)點(diǎn)

(1)云函數(shù)開發(fā)特點(diǎn)

前端傳統(tǒng)項(xiàng)目的開發(fā)流模式相對已經(jīng)比較成熟,通過git協(xié)同管理代碼,再通過CI來規(guī)范項(xiàng)目的部署流程,整個(gè)工作流可以查看、回滾代碼,部署也做到了自動(dòng)化

640.webp (1).jpg

再來看云函數(shù)的開發(fā)特點(diǎn):

·云函數(shù)獨(dú)立的賬號和權(quán)限管理

·以函數(shù)為單位進(jìn)行創(chuàng)建、更新和部署

·創(chuàng)建網(wǎng)關(guān)API與函數(shù)關(guān)聯(lián),借此可通過網(wǎng)關(guān)API訪問到云函數(shù)

以上是最基礎(chǔ)的開發(fā)云函數(shù)三個(gè)基礎(chǔ)

640.webp (3).jpg

而云函數(shù)的創(chuàng)建、更新有兩種方式:

·騰訊云官網(wǎng)云函數(shù)控制臺,可視化的操作界面,點(diǎn)擊按鈕即可創(chuàng)建、更新

·通過CLI創(chuàng)建,SERVERLESS提供SDK,調(diào)用SDK可完成自定義創(chuàng)建、更新操作,其優(yōu)點(diǎn)為靈活編寫,也易于做成工程化

考慮團(tuán)隊(duì)的協(xié)作,第二種方式通過調(diào)用SDK的方式因其靈活更適合定制為團(tuán)隊(duì)規(guī)范

640.webp (4).jpg

總結(jié)下來可以看到云函數(shù)開發(fā)的三個(gè)特性:

·因其有獨(dú)立于git賬號的云函數(shù)賬號,導(dǎo)致了云函數(shù)的代碼缺乏像GIT一樣可以查看歷史代碼版本,代碼修改記錄等

·因其有多重方式可以用來創(chuàng)建、更新函數(shù),導(dǎo)致多人協(xié)作時(shí),有互相覆蓋云函數(shù)的風(fēng)險(xiǎn)

·提供的云函數(shù)網(wǎng)關(guān),可幫助快速配置訪問云函數(shù),而無需運(yùn)維同學(xué)幫忙做域名指向,機(jī)器申請等

640.webp (5).jpg

(2)團(tuán)隊(duì)協(xié)作上手云函數(shù)開發(fā)問題

在初期團(tuán)隊(duì)探索嘗試云函數(shù)開發(fā)時(shí),對比傳統(tǒng)項(xiàng)目的開發(fā)流,云函數(shù)的開發(fā)步驟更多,也暴露出了一些缺點(diǎn):

640.webp (6).jpg

1)上手成本高

首先有不小的學(xué)習(xí)成本,像云函數(shù)配置文件,云函數(shù)官網(wǎng)界面操作學(xué)習(xí)成本,實(shí)際使用時(shí),由于云函數(shù)網(wǎng)關(guān)API鏈接過長、域名限制等,需要配置nginx,用特定域名訪問云函數(shù)網(wǎng)關(guān)API,因?yàn)槎鄶?shù)前端對nginx部署,導(dǎo)致有了nginx學(xué)習(xí)成本

640.webp (7).jpg

2)調(diào)試云函數(shù)效率低

因?yàn)樵坪瘮?shù)是部署在云端的,Serverless有其獨(dú)特的環(huán)境,context、event等,有別于NODE服務(wù)的請求體等,本地要完全模擬serverless請求比較困難,導(dǎo)致開發(fā)想要調(diào)試定位問題時(shí),只能先將代碼部署到serverless上,這里就需要等待部署了,由于serverless是外網(wǎng)的,部署時(shí)間就更長了

640.webp (9).jpg

3)開發(fā)流困惑

·由于云函數(shù)直接就是部署在云端,沒有我們傳統(tǒng)的機(jī)器用于做環(huán)境區(qū)分,對團(tuán)隊(duì)協(xié)作保證部署質(zhì)量來說并不友好

·上述也有提到的,往往因?yàn)橄胍约簶I(yè)務(wù)域名訪問服務(wù)接口,而云函數(shù)網(wǎng)關(guān)API是比較長的缺乏語義化的鏈接,通常使用時(shí)會想配置nginx去通過自定義域名訪問云函數(shù),不止是成本問題也有容易配置錯(cuò)誤的風(fēng)險(xiǎn)問題

640.webp (12).jpg

4)管理困難,存在質(zhì)量問題

因云函數(shù)獨(dú)立的賬號管理,沒有g(shù)it進(jìn)行管理,導(dǎo)致無法追蹤代碼記錄,甚至任何有權(quán)限的人創(chuàng)建同名函數(shù)進(jìn)行部署都會導(dǎo)致函數(shù)莫名被覆蓋,同理云函數(shù)網(wǎng)關(guān)API也可以隨意更改指向其它云函數(shù)

640.webp (10).jpg

總結(jié)下來,在團(tuán)隊(duì)協(xié)作SCF開發(fā)的時(shí)候,遇到的挑戰(zhàn)點(diǎn)如下:

640.webp (13).jpg

二、IMFLOW一站式Serverless開發(fā)解決方案的破局與落地

總結(jié)上面的云函數(shù)在團(tuán)隊(duì)協(xié)作中遇到的一些問題,對應(yīng)地提出解決方案:

·制定規(guī)范保證統(tǒng)一的協(xié)作,統(tǒng)一的規(guī)范保證統(tǒng)一的工作流,提升開發(fā)效率進(jìn)而保證質(zhì)量

·優(yōu)化云函數(shù)開發(fā)體驗(yàn),通過工具去自動(dòng)化完成重復(fù)冗余的操作,并通過封裝過濾掉一些開發(fā)學(xué)習(xí)成本

·根據(jù)云函數(shù)特點(diǎn)制定CI和CD,保證流程統(tǒng)一,也提升部署效率;統(tǒng)一網(wǎng)關(guān)規(guī)則,減少云函數(shù)網(wǎng)關(guān)API學(xué)習(xí)和操作

640.webp (14).jpg

(1)制定規(guī)范,提升協(xié)作效率

1)統(tǒng)一云賬號管理

對于獨(dú)立云函數(shù)賬號,每個(gè)開發(fā)在上手開發(fā)前都需要單獨(dú)申請,同時(shí)還有開通各種權(quán)限,快點(diǎn)半天,慢點(diǎn)一兩天,針對這個(gè)問題,考慮使用團(tuán)隊(duì)公共賬號進(jìn)行統(tǒng)一云函數(shù)管理,工具使用公共賬號進(jìn)行云函數(shù)部署、更新,免去開發(fā)的學(xué)習(xí)成本、賬號上手成本

640.webp.jpg

2)基于GIT管理云函數(shù)

對于云函數(shù)獨(dú)立的管理方式,為了能唯一追蹤云函數(shù),保留了原有的git管理項(xiàng)目代碼,制定一系列規(guī)范,將git項(xiàng)目與云函數(shù)唯一關(guān)聯(lián),保證云函數(shù)唯一不可覆蓋

640.webp (16).jpg

3)命名空間隔離函數(shù)環(huán)境

為提供云函數(shù)的開發(fā)流,針對云函數(shù)的特點(diǎn),使用云函數(shù)命名空間的概念來隔離云函數(shù),同時(shí)限制測試環(huán)境的網(wǎng)關(guān)服務(wù)只允許內(nèi)網(wǎng)訪問,保證業(yè)務(wù)安全

640.webp (17).jpg

4)統(tǒng)一云函數(shù)規(guī)則配置

制定云函數(shù)名、對應(yīng)網(wǎng)關(guān)服務(wù)API名、環(huán)境命名空間的命名規(guī)范,以達(dá)到命名空間、函數(shù)名、網(wǎng)關(guān)服務(wù)API能一一對應(yīng),可通過其一推導(dǎo)其二,如知道函數(shù)名,可知其訪問API是什么,對應(yīng)環(huán)境命名空間是什么

640.webp (18).jpg

(2)自研CLI工具,IMFLOW提升SCF研發(fā)效率

在第一項(xiàng)制定了規(guī)范之后,要讓規(guī)范落地,就需要使用工具來輔助,IMWEB團(tuán)隊(duì)自研了CLI工具--IMFLOW,提供SCF團(tuán)隊(duì)開發(fā)流實(shí)踐方案,通過工具的方式提升SCF研發(fā)效率;諸如創(chuàng)建賬號、申請權(quán)限、創(chuàng)建云函數(shù)、開發(fā)云函數(shù)調(diào)試、云函數(shù)網(wǎng)關(guān)API關(guān)聯(lián)、函數(shù)隔離等等,通過CLI工具,輸入命令即可完成。

640.webp (19).jpg

1)上手開發(fā)更快

使用了CLI工具來輔助之后,對比團(tuán)隊(duì)過往的開發(fā)模式,通過CLI可達(dá)到2分鐘上手進(jìn)入開發(fā)

640.webp (20).jpg

2)調(diào)試體驗(yàn)同傳統(tǒng)服務(wù)開發(fā)一致

通過同構(gòu)+構(gòu)建的方式,保留傳統(tǒng)服務(wù)開發(fā)體驗(yàn),工具封裝屏蔽了云函數(shù)文件,開發(fā)者開發(fā)時(shí)可同以往一樣

640.webp (21).jpg

3)一鍵定位調(diào)試云函數(shù)

云函數(shù)的真實(shí)運(yùn)行環(huán)境相對復(fù)雜,若是遇到了涉及云函數(shù)環(huán)境調(diào)試的問題,需要真實(shí)調(diào)試云函數(shù),此時(shí)本地即可完成調(diào)試,工具封裝了一系列操作,如實(shí)時(shí)調(diào)試、監(jiān)聽文件變更等,實(shí)時(shí)部署,實(shí)現(xiàn)一鍵定位調(diào)試云函數(shù)

640.webp (22).jpg

4)極致優(yōu)化云函數(shù)部署時(shí)間

云函數(shù)的部署是走的外網(wǎng)部署,而云函數(shù)的部署時(shí)間影響到了云函數(shù)的發(fā)布時(shí)間,甚至在做本地實(shí)時(shí)調(diào)試云函數(shù)時(shí),影響了云函數(shù)的調(diào)試效率,為了極致優(yōu)化云函數(shù)部署時(shí)間,利用了云函數(shù)的layer功能、項(xiàng)目的node_module變動(dòng)幾率較小、同時(shí)代碼包大小會影響部署時(shí)間這些特點(diǎn),對云函數(shù)項(xiàng)目部署進(jìn)行了拆分,當(dāng)node_modules沒有變動(dòng)時(shí)無需部署node_modules,進(jìn)而減少了了部署時(shí)間

640.webp (23).jpg

在做了部署優(yōu)化后,查看項(xiàng)目的部署時(shí)間,大部分時(shí)間35s即可完成函數(shù)部署

640.webp (24).jpg

(3)質(zhì)量保證

在質(zhì)量保證方面,主要是通過CI|CD規(guī)范部署流程,制定網(wǎng)關(guān)服務(wù)規(guī)范來隔離云函數(shù)和降低網(wǎng)關(guān)配置成本。

640.webp (25).jpg

限制測試環(huán)境網(wǎng)關(guān)服務(wù)為內(nèi)網(wǎng)可訪問。

640.webp (26).jpg

另外,為了保證云函數(shù)的運(yùn)行穩(wěn)定,避免因?yàn)樵坪瘮?shù)的冷啟動(dòng)導(dǎo)致云函數(shù)訪問失敗,即對云函數(shù)的容災(zāi)處理,做了一層STKE的容災(zāi),通過代碼同構(gòu)的方式,利用工具構(gòu)建打包,完成一套代碼實(shí)現(xiàn)既可部署serverless,也可以部署STKE,配合網(wǎng)關(guān)的處理,完成云函數(shù)的降級容災(zāi)

640.webp (27).jpg

三、IMFLOW使用

imflow內(nèi)置命令

640.webp (28).jpg

至此,感謝閱讀。在探索云函數(shù)的開發(fā)之路中,感謝騰訊云Serverless團(tuán)隊(duì)的支持,希望Serverless可以越做越好!

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于TencentServerless ,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對觀點(diǎn)贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
個(gè)人VIP