Serverless Components在騰訊云的落地和實(shí)踐,serverless web應(yīng)用-ESG跨境

Serverless Components在騰訊云的落地和實(shí)踐,serverless web應(yīng)用

來源網(wǎng)絡(luò)
來源網(wǎng)絡(luò)
2022-07-05
點(diǎn)贊icon 0
查看icon 604

Serverless Components在騰訊云的落地和實(shí)踐,serverless web應(yīng)用Serverless Components在騰訊云的落地和實(shí)踐導(dǎo)語Serverless Components是Serverless Framework推出的最新解決 案,具有基礎(chǔ)設(shè)施編排能,開發(fā)者通過使Serverless ......

Serverless Components在騰訊云的落地和實(shí)踐,serverless web應(yīng)用




Serverless Components在騰訊云的落地和實(shí)踐

導(dǎo)語Serverless Components是Serverless Framework推出的最新解決 案,具有基礎(chǔ)設(shè)施編排能,開發(fā)者通過使Serverless Components,可以靈活構(gòu)建、組合和部署Serverless應(yīng)。本文是對騰訊云云函數(shù)團(tuán)隊(duì)前端負(fù)責(zé)人蔡衛(wèi)峰在云+社區(qū)沙龍online的分享整理,介紹Serverless Components在騰訊云的落地和實(shí)踐,希望與大家一同交流。

一、Serverless Components實(shí)現(xiàn)原理

1.Serverless CLI工具

Serverless是一個(gè)重開發(fā)和部署的產(chǎn)品應(yīng)用,服務(wù)提供了彈性伸縮、自動(dòng)運(yùn)維的能力,開發(fā)者主要關(guān)心開發(fā)和部署。所以,開發(fā)和部署的體驗(yàn)對于serverless業(yè)務(wù)來說是非常重要的。

Serverless的函數(shù)本身只是提供了計(jì)算的資源,要想實(shí)現(xiàn)一個(gè)完整的應(yīng)用,必然會(huì)涉及到云上的其他資源,比如網(wǎng)關(guān)、cdn、數(shù)據(jù)庫等。

如果是控制臺操作,需要在不同的服務(wù)之間跳來跳去,比較割裂。如果能有一個(gè)基于應(yīng)用的統(tǒng)一的命令行管理工具,對于開發(fā)者必然會(huì)方便很多

Serverless CLI是用戶授權(quán)后,通過命令行工具,調(diào)用云API幫助用戶管理云資源,方便對云上資源進(jìn)行比較完整的操作。

2.什么是Serverless Framework

Serverless Framework現(xiàn)在大量的使用者是web服務(wù)的開發(fā)者,主要定位于web服務(wù)場景,它是北美研發(fā)團(tuán)隊(duì)開源的一個(gè)項(xiàng)目,是業(yè)界常受歡迎的服務(wù)器應(yīng)框架,開發(fā)者需關(guān)底層資源即可部署完整可的Serverless應(yīng)架構(gòu)。

Serverless Framework定義了一套完整的標(biāo)準(zhǔn)化規(guī)范,各公有云的插件遵循這套規(guī)范,通過對云上資源的編排,覆蓋編碼、調(diào)試、部署、排障等全命周期,幫助開發(fā)者通過聯(lián)動(dòng)云資源,迅速構(gòu)建Serverless應(yīng)。

3.Serverless Framework CLI

Serverless Framework CLI是一個(gè)開源命令行工具,它使用基于事件觸發(fā)的計(jì)算資源,例如騰訊云云函數(shù),AWS Lambda,阿里云函數(shù)計(jì)算等。

Serverless Framework為開發(fā)和部署Serverless架構(gòu)提供腳手架,自動(dòng)化工作流以及最佳實(shí)踐。并且它支持通過豐富的插件進(jìn)行功能擴(kuò)展。

Serverless Framework在Github有將近4萬的Star,在國外比較受歡迎。我們團(tuán)隊(duì)最開始也維護(hù)了一個(gè)自己的CLI,但是維護(hù)成本比較高,想做體驗(yàn)好操作流暢的CLI需要投入大量人力精力,Serverless Framework的CLI開發(fā)者接受程度比較高,它的協(xié)議也開放,所以按照規(guī)范接入即可。

我們也有用戶原來用Serverless Framework的命令行工具,從AWS遷移到騰訊云云函數(shù)環(huán)境時(shí)候提出了這樣的要求。對用戶而言底層的云資源操作是屏蔽的,只需要跟Serverless Framework打交道就可以了,希望我們也可以提供對接Serverless Framework的方式,這樣遷移到騰訊云上比較方便。

通過和Serverless Framework團(tuán)隊(duì)的溝通,他們正好也有意愿打入國內(nèi)市場,雙方的合作也就水到渠成了。

Serverless Framework強(qiáng)于CLI整體的體驗(yàn),但是對騰訊云本身的了解比較少,于是就有了基本的合作模式,北美團(tuán)隊(duì)負(fù)責(zé)CLI的開發(fā)和整體體驗(yàn),騰訊云團(tuán)隊(duì)負(fù)責(zé)具體落地到騰訊云的components的開發(fā)和維護(hù)。雙方合力,打造Serverless Framework在國內(nèi)的實(shí)際落地方案。

4.什么是Serverless Components

Serverless Components是Serverless Framework的一個(gè)解決方案,本身具備快速部署、靈活配置、模板共享的理念。

公有云對接Serverless Framework后具有了公有云基本的操作能力,但是落地到具體的應(yīng)用場景就會(huì)變得復(fù)雜。

外部應(yīng)用不是單純靠計(jì)算資源,也會(huì)涉及到靜態(tài)資源,比如圖片、CSS、JS文件的托管和域名的管理,涉及到底層數(shù)據(jù)庫的管理,也有一些更復(fù)雜的應(yīng)用會(huì)涉及到更多的云上的資源。

如果開發(fā)者要想實(shí)現(xiàn)一個(gè)應(yīng)用的管理,則需要通過一系列的操作才能完成一個(gè)應(yīng)用管理和部署,而Serverless Components是為了適配各種具體化的應(yīng)用場景而開發(fā)的模板能力。

Serverless Components是Serverless Framework推出的最新解決方案,具有基礎(chǔ)設(shè)施編排能力,開發(fā)者通過使用Serverless Components,可以靈活構(gòu)建、組合和部署Serverless應(yīng)用。

二、Serverless Components全生命流程

Serverless Component部署流程

Serverless Components部署的完整全流程,首先讀取.env文件,在.env文件中可以輸入騰訊云固定的密鑰信息進(jìn)行授權(quán),也可以通過微信掃碼賦予CLI臨時(shí)的授權(quán),授權(quán)Serverless Components CLI在某一段時(shí)間可以操作云上某些資源的能力。

同時(shí)在.env文件里面可以注入相應(yīng)環(huán)境變量,你可以直接在serverless.yml中通過${env}的方式,直接引用環(huán)境變量配置(包含.env文件中的環(huán)境變量配置,以及手動(dòng)配置在環(huán)境中的變量參數(shù))。

接著讀取yaml配置。yaml文件要指定使用到的組件名以及組件相應(yīng)的輸入?yún)?shù),每個(gè)組件因?yàn)樯婕暗牟僮鲿?huì)不一樣,所以每個(gè)組件對參數(shù)也有自己的一套固定的規(guī)范。

通過CLI的命令進(jìn)行部署的時(shí)候,會(huì)把用戶代碼壓縮之后上傳。首先壓縮指定的代碼目錄,上傳到一個(gè)公共的COS里面。然后新建或者更新組件的狀態(tài),同時(shí)會(huì)在服務(wù)端把代碼下載下來,并注入Proxy代碼。

proxy代碼都實(shí)現(xiàn)了什么能力呢云函數(shù)主要的適用場景是事件驅(qū)動(dòng)型的,對于http請求的實(shí)現(xiàn)是通過API網(wǎng)關(guān)觸發(fā)器轉(zhuǎn)發(fā)的。網(wǎng)關(guān)接收到的http request會(huì)轉(zhuǎn)換為云函數(shù)需要的參數(shù)對象,在函數(shù)執(zhí)行包裝后的web框架,執(zhí)行完后再把http response轉(zhuǎn)換成API Gateway需要的結(jié)構(gòu)返回給網(wǎng)關(guān),網(wǎng)關(guān)再把response轉(zhuǎn)換成標(biāo)準(zhǔn)的http response返回,這樣就實(shí)現(xiàn)了整個(gè)HTTP的訪問。

用戶不需要關(guān)注這部分的實(shí)現(xiàn),按照正常的開發(fā)就可以,Components部署的時(shí)候會(huì)自動(dòng)注入這部分轉(zhuǎn)換邏輯的代碼。服務(wù)端在注入完proxy代碼后會(huì)把代碼上傳到用戶COS里面,然后創(chuàng)建或更新云函數(shù),同時(shí)會(huì)再創(chuàng)建或者更新API網(wǎng)關(guān)的配置。

這個(gè)時(shí)候再把整個(gè)創(chuàng)建的過程以及創(chuàng)建的狀態(tài)保存到服務(wù)端,控制臺再輸出整個(gè)組件最終需要給用戶看到的一些云上資源的信息,比如SCF的信息、API網(wǎng)關(guān)的信息、CDN的數(shù)據(jù)和數(shù)據(jù)庫信息等,整個(gè)部署就算是完成了。

應(yīng)用部署完后會(huì)返回API網(wǎng)關(guān)公用的二級域名的一個(gè)訪問地址,跟正常的函數(shù)與自己組裝資源去訪問應(yīng)用方式是一樣的。

大家可以看到,我們抹平了一些云函數(shù)和正常服務(wù)器差異化的實(shí)現(xiàn),抹平后通過Serverless Components可以不用關(guān)心這些特殊的邏輯邏輯,也不需要關(guān)心其他的云上的資源。

如果自己要?jiǎng)?chuàng)建一個(gè)應(yīng)用,同時(shí)要?jiǎng)?chuàng)建云函數(shù),代碼里面要自己轉(zhuǎn)換HTTP請求,然后創(chuàng)建一個(gè)觸發(fā)器綁定到云函數(shù)。

如果需要做靜態(tài)資源的加速,需要拆分靜態(tài)資源部署到COS,并配置一個(gè)CDN。這中間涉及到多個(gè)云資源的操作。而我們在Serverless Components中已經(jīng)將整套都實(shí)現(xiàn)了,只需要在yaml文件里把這些配置進(jìn)去就可以,部署完成后就可以看到你的應(yīng)用了。

三、Components生態(tài)建設(shè)

1.Serverless Components生態(tài)

如上圖所示,其中列舉了一些用戶使用比較多的Serverless Components組件,還有一些沒有列舉出來的,這些基礎(chǔ)的組件包括了騰訊云上的各種常用的基礎(chǔ)資源。可以通過對多個(gè)組件的組合來組成完整的應(yīng)用,也可以直接使用現(xiàn)有的高階組件。

我們也歡迎第三方開發(fā)者貢獻(xiàn)他們的組件,現(xiàn)在就已經(jīng)有很多第三方的開發(fā)者在貢獻(xiàn)他們的組件。

2.Serverless Next.js

接下來詳細(xì)介紹一個(gè)Serverless Components的具體實(shí)現(xiàn)。以Next jS項(xiàng)目為例,首先是初始化一個(gè)項(xiàng)目,安裝CLI,原來的項(xiàng)目不需要做什么改動(dòng),按照Serverless Components要求的規(guī)范進(jìn)行配置后,直接用命令行工具進(jìn)行部署。

執(zhí)行部署后component會(huì)幫用戶通過CLI進(jìn)行代碼的構(gòu)建,完成構(gòu)建后會(huì)把代碼部署到云函數(shù)上,創(chuàng)建API網(wǎng)關(guān)代理web服務(wù),同時(shí)部署靜態(tài)資源,會(huì)把目錄下的靜態(tài)文件自動(dòng)拆分,并部署到COS上面。

我們后面也會(huì)做更加智能化的優(yōu)化,next框架代碼比較大,每次部署都要上傳兩三百兆代碼,對上傳的效率和啟動(dòng)效率也有影響。

騰訊云提供layer的能力,我們會(huì)自動(dòng)拆分用戶的n odemodules到layer,之后的部署只需要把業(yè)務(wù)代碼上傳和部署就可以了,對部署效率有很大的提升。

這里是部署一個(gè)有一些復(fù)雜度的next應(yīng)用的屏幕截圖,可以看到完成部署僅需31秒,部署效率非常高

四、跨國合作:挑戰(zhàn)和收獲

1.跨國合作:挑戰(zhàn)

從開始合作到現(xiàn)在已經(jīng)有一年多了,還在不斷的磨合中。下面是我總結(jié)下來的,我們在一年多的合作里口罩體的挑戰(zhàn),與大家一起分享交流。

(1)溝通效率

由于時(shí)差,語言表達(dá),以及東西方思考方式的差異,導(dǎo)致整體的溝通效率比較低。

(2)開發(fā)模式

他們那邊是游擊隊(duì)的開發(fā)模式,有一些研發(fā)發(fā)布比較隨意,導(dǎo)致了一些線上的問題。而我們其實(shí)是有比較嚴(yán)格的開發(fā)流程,發(fā)布前的驗(yàn)證,發(fā)布后的確認(rèn),監(jiān)控告警的體系等等,都有嚴(yán)格的要求。

慢慢把我們這一套嚴(yán)格的規(guī)范灌輸給他們,并要求他們能夠按照我們的要求執(zhí)行。

(3)問題定位

由于整套體系比較龐大,大家在前面也看到了,一個(gè)完整的component的生命流程比較長,步驟比較多,之前也沒有統(tǒng)一的日志收集體系和系統(tǒng),導(dǎo)致出現(xiàn)了用戶問題定位花費(fèi)比較長的時(shí)間。

(4)目標(biāo)

兩個(gè)團(tuán)隊(duì)的目標(biāo)導(dǎo)向不完全一樣,我們更注重用戶云上資源的安全,對于密鑰的使用及權(quán)限控制比較嚴(yán)格,而他們更多的考慮的是使用上的便利。

(5)人才招聘

整套體系采用nodejs開發(fā),涉及到后端、存儲(chǔ)、數(shù)據(jù)庫等方方面面,對于開發(fā)的要求比較高。

另外,需要開發(fā)和產(chǎn)品有技術(shù)運(yùn)營的理念,有開放的心態(tài)。對于英語也有一定的要求,最好能和北美的開發(fā)團(tuán)隊(duì)直接對話。

(6)運(yùn)營理念的問題

國內(nèi)外開發(fā)者習(xí)慣是有差別的,國外比較多的開發(fā)者更容易接受命令行工具,而國內(nèi)開發(fā)者對這套東西不熟悉,需要有一個(gè)接受的過程。

我們也會(huì)做一些妥協(xié),比如后面可以考慮提供界面化的配置方式等。其實(shí)對于Serverless Framework與Serverless Components,騰訊云本地化的運(yùn)營方式和引導(dǎo)上跟國外會(huì)有所差別,我們會(huì)針對國內(nèi)開發(fā)者做一些貼合開發(fā)者習(xí)慣的嘗試。

其實(shí)在跨國合作中涉及CLI的時(shí)候,我們一直很迷惑。雖然我們很想把事情做好,但是對命令行工具的設(shè)計(jì)和交互設(shè)計(jì)方面受限于騰訊云的產(chǎn)品,無法突破自己的框架。

通過跟北美團(tuán)隊(duì)的交流合作,對我們的思路也有很大的開拓,我們跟他們學(xué)習(xí)到了他們的產(chǎn)品設(shè)計(jì)理念,在產(chǎn)品設(shè)計(jì)方面,AWS和周圍的生態(tài)確實(shí)對于我們是很好的借鑒意義。

進(jìn)行大型開源項(xiàng)目的實(shí)現(xiàn),合作過程中對協(xié)作方式也學(xué)習(xí)到了不少,對于整個(gè)后期的開源項(xiàng)目推進(jìn),后面再去參加別的開源項(xiàng)目,對于我們而言都是非常寶貴的經(jīng)驗(yàn)。

同時(shí),我們也把嚴(yán)格的軟件開發(fā)經(jīng)驗(yàn)輸出給北美,并獲得了他們的認(rèn)可,對于我們而言也是比較自豪的一件事。以前軟件開發(fā)方面北美領(lǐng)先于我們,所有方面我們向他們學(xué)習(xí)?,F(xiàn)在并不完全是這樣了,我們比較嚴(yán)格的軟件開發(fā)規(guī)范比他們走得更靠前,把我們的規(guī)范輸出給他們的同時(shí)也得到了北美團(tuán)隊(duì)的認(rèn)可。

2.跨國合作:收獲

·學(xué)習(xí)先進(jìn)的交互設(shè)計(jì)以及產(chǎn)品設(shè)計(jì)理念;

·以AWS的理念要求我們自己的產(chǎn)品;

·大型開源項(xiàng)目的協(xié)作方式;

·輸出嚴(yán)格的軟件開發(fā)規(guī)范,獲得認(rèn)可;

·同類型開源項(xiàng)目的借鑒和學(xué)習(xí),開闊視野。

同類型開源項(xiàng)目的借鑒和學(xué)習(xí)開拓了我們的視野,北美團(tuán)隊(duì)也會(huì)經(jīng)常發(fā)一些他們能夠了解到的信息同步給我們,我們能夠從中得到借鑒和學(xué)習(xí),并得到自己的增長。所以未來也會(huì)更加緊密合作。

QA

Q:Serverless現(xiàn)階段適用和適用的場景,騰訊內(nèi)部有哪些業(yè)務(wù)在用

A:所有的場景都是可以的。小程序云開發(fā)底層云函數(shù)的能力就是用我們Serverless的實(shí)現(xiàn),騰訊內(nèi)部還有比如微信支付、微信讀書、騰訊視頻、騰訊課堂有不少場景在用Serverless的服務(wù)。

Q:部署而言Serverless相對TKE有什么優(yōu)勢和劣勢

A:TKE本身是需要自己管理的,但是Serverless在計(jì)算資源方面完全不需要自己去管理,我們有一個(gè)完全的動(dòng)態(tài)彈性伸縮能力,會(huì)根據(jù)訪問的請求量去做自動(dòng)的伸縮,基本上省去了運(yùn)營的需要。

Q:監(jiān)控方面有什么成熟組件的接入

A:正常的外部應(yīng)用都是可以接入的,和虛擬機(jī)、容器等計(jì)算資源使用的方式相同。我們平臺也提供了一些基礎(chǔ)的監(jiān)控和日志能力,另一方面,也在聯(lián)合騰訊云的監(jiān)控團(tuán)隊(duì)做了自定義監(jiān)控組件上報(bào)能力的接入,可以在代碼里面自定義的上報(bào)到騰訊云監(jiān)控,自定義監(jiān)控平臺可以看到監(jiān)控的數(shù)據(jù)。

Q:Serverless對業(yè)務(wù)較復(fù)雜的大型項(xiàng)目是否適合

A:肯定適合,比如微信支付、微信讀書、騰訊視頻、騰訊課堂都有不少場景在用Serverless的服務(wù)。

Q:穩(wěn)定性保障的情況如何

A:Serverless是基于騰訊云整套體系來建設(shè)的,穩(wěn)定性方面也是經(jīng)過了大規(guī)模的壓測,有可靠的保障。比較大型的項(xiàng)目提前跟架構(gòu)師溝通,來做資源的預(yù)留或者是資源等級的提升

Q:學(xué)習(xí)路線是什么

A:部署自己的業(yè)務(wù)到Serverless服務(wù)上面來,可以在實(shí)踐中不斷的熟悉。還可以加入我們的微信或者qq群,和大量的開發(fā)者一起學(xué)習(xí)和探討,這樣在不斷的討論和學(xué)習(xí)過程中可以得到不斷的成長。有使用上的疑問或者問題也可以直接和我們的開發(fā)或者架構(gòu)師溝通。

Q:冷啟動(dòng)支持需要有低延時(shí)的應(yīng)用嗎

A:如果對冷啟動(dòng)比較敏感的業(yè)務(wù),可以通過預(yù)置并發(fā)來應(yīng)對冷啟動(dòng)的問題,設(shè)置了預(yù)置并發(fā)后,服務(wù)保留一定的最小資源量,這些資源量長時(shí)間存在,更大的并發(fā)到來時(shí)再通過自動(dòng)伸縮去拉起,就可以保證服務(wù)既可以解決低延時(shí)的問題也可以應(yīng)對大請求的流量

Q:如果部署在騰訊云的Serverless服務(wù)受到DDoS攻擊怎么收費(fèi)

A:用戶可以設(shè)置并發(fā)的上限,更多的請求自動(dòng)幫著擋住,不會(huì)把這些流量放進(jìn)來,實(shí)際消費(fèi)用到消耗的Serverless請求才會(huì)收費(fèi),其他的擋在控制并發(fā)外的請求我們不會(huì)收費(fèi)。

Q:平臺具體實(shí)施中如何避開Serverless的劣勢

A:關(guān)于Serverless的劣勢,一是冷啟動(dòng),二是開發(fā)習(xí)慣的一些改變,這些劣勢可以通過一些手段避開。冷啟動(dòng)的問題可以通過預(yù)置并發(fā)等高階能力解決,web場景用Serverless Components的能力就可以幫助抹平中間的差異

Q:企業(yè)應(yīng)該如何設(shè)置Serverless Components

A:要看具體的應(yīng)用場景,騰訊內(nèi)部的團(tuán)隊(duì)在使用上也有各種差別,主要還是依賴具體的應(yīng)用場景和需求。

Q:Java這種啟動(dòng)慢的語言,未來可以在Serverless上應(yīng)用嗎

A:其實(shí)國內(nèi)java開發(fā)者比較多,我覺得這是非常有潛力的發(fā)展方向,我們也在考慮啟動(dòng)比較慢的java應(yīng)用如何部署到SCF上面,這是我們努力的一個(gè)方向。


文章推薦
跨境物流旺季自建站賣家使用物流需要注意的幾點(diǎn)問題,跨境物流費(fèi)用都是一百多怎么賺錢
PayPal賬戶如何添加信用卡及借記卡,paypal怎么添加借記卡
Shopify獨(dú)立站的秘密軟件,獨(dú)立站shopify跨境電商
美國2021年電商市場解析,2022年電商市場銷量分析


特別聲明:以上文章內(nèi)容僅代表作者本人觀點(diǎn),不代表ESG跨境電商觀點(diǎn)或立場。如有關(guān)于作品內(nèi)容、版權(quán)或其它問題請于作品發(fā)表后的30日內(nèi)與ESG跨境電商聯(lián)系。

搜索 放大鏡
韓國平臺交流群
加入
韓國平臺交流群
掃碼進(jìn)群
歐洲多平臺交流群
加入
歐洲多平臺交流群
掃碼進(jìn)群
美國賣家交流群
加入
美國賣家交流群
掃碼進(jìn)群
ESG跨境專屬福利分享群
加入
ESG跨境專屬福利分享群
掃碼進(jìn)群
拉美電商交流群
加入
拉美電商交流群
掃碼進(jìn)群
亞馬遜跨境增長交流群
加入
亞馬遜跨境增長交流群
掃碼進(jìn)群
亞馬遜跨境增長交流群
加入
亞馬遜跨境增長交流群
掃碼進(jìn)群
拉美電商交流群
加入
拉美電商交流群
掃碼進(jìn)群
ESG獨(dú)家招商-PHH GROUP賣家交流群
加入
ESG獨(dú)家招商-PHH GROUP賣家交流群
掃碼進(jìn)群
《TikTok官方運(yùn)營干貨合集》
《TikTok綜合運(yùn)營手冊》
《TikTok短視頻運(yùn)營手冊》
《TikTok直播運(yùn)營手冊》
《TikTok全球趨勢報(bào)告》
《韓國節(jié)日營銷指南》
《開店大全-全球合集》
《開店大全-主流平臺篇》
《開店大全-東南亞篇》
《CD平臺自注冊指南》
通過ESG入駐平臺,您將解鎖
綠色通道,更高的入駐成功率
專業(yè)1v1客戶經(jīng)理服務(wù)
運(yùn)營實(shí)操指導(dǎo)
運(yùn)營提效資源福利
平臺官方專屬優(yōu)惠

立即登記,定期獲得更多資訊

訂閱
聯(lián)系顧問

平臺顧問

平臺顧問 平臺顧問

微信掃一掃
馬上聯(lián)系在線顧問

icon icon

小程序

微信小程序

ESG跨境小程序
手機(jī)入駐更便捷

icon icon

返回頂部

【免費(fèi)領(lǐng)取】全球跨境電商運(yùn)營干貨 關(guān)閉