最近給同事也講了一下,要不部門內(nèi)部我們自己嘗試嘗試Serverless?
同事問我收益是啥,我也一時(shí)說不上來,后來整理了一下,同步發(fā)一下吧。
首先如果在公司內(nèi)部做serverless的嘗試方案:
先搞清楚下面這幾個(gè)問題:
1,什么是serverless,對(duì)于前端和客戶端以及運(yùn)維來說有什么收益。
1.1首先理解serverless,需要先理解以下幾個(gè)概念:
Serverless的演進(jìn)和形成主要經(jīng)歷了:1,IaaS(Infrastructure-as-a-Service,提供物理機(jī)服務(wù)),2,PaaS(Platform-as-a-Service,平臺(tái)既服務(wù),如阿里云,七牛,甚至我們自己的nvm,sce等),3,CaaS(Container-as-a-Service,容器既服務(wù),類似我們現(xiàn)在內(nèi)部的dockerk8s服務(wù)),4,F(xiàn)aaS(函數(shù)既服務(wù),一個(gè)容器一個(gè)函數(shù),使用時(shí)才消耗資源,不含存儲(chǔ),只包含邏輯),5,Baas(backend-as-a-service,后端既服務(wù),提供存儲(chǔ),數(shù)據(jù)庫操作,消息轉(zhuǎn)發(fā),靜態(tài)服務(wù)等云服務(wù)功能)。
我們目前整體新浪還處于IaaS,PaaS結(jié)合Caas的階段,我們的服務(wù)目前有部署在物理機(jī)的,有部署在nvm平臺(tái)的,有部署在容器cs服務(wù)中的。
那么我們現(xiàn)在理解了serverless的演進(jìn)后,我們可以認(rèn)為Faas和Baas才是最終serverless的最后形態(tài)。
1.2他對(duì)于前端和客戶端開發(fā)人員來說:
1,可以直接使用客戶端代碼編寫后端和前端服務(wù)邏輯,利用BaaS提供的云服務(wù),關(guān)聯(lián)到FaaS中,實(shí)現(xiàn)對(duì)數(shù)據(jù)的操作,文件的上傳,接口的調(diào)用,路由的注冊等,可以更快速無損的開發(fā)app應(yīng)用和前端應(yīng)用。
2,面向業(yè)務(wù)編程,不需要了解復(fù)雜的后端服務(wù)配置和部署等,只需要編寫函數(shù)完成API開發(fā)即可,加快生產(chǎn)力。
1.3他對(duì)于后端人員來說:
1,不需要關(guān)注具體服務(wù),只需要關(guān)注具體功能。
2,只需要面向API編程,而不是業(yè)務(wù)編程。
1.4他對(duì)于運(yùn)維人員來說:
1,只需要維護(hù)好faas和baas的服務(wù)集群即可。
2,更節(jié)約成本,而且會(huì)比caas和paas更節(jié)約服務(wù)器資源,因?yàn)橹挥挟?dāng)函數(shù)接口被調(diào)用時(shí),才會(huì)啟動(dòng)容器,執(zhí)行函數(shù),執(zhí)行完畢后再釋放函數(shù),沒有調(diào)用則不會(huì)有資源浪費(fèi)。
2,serverless的使用場景:
2.1,首先我們說的主要還是faas和bass的使用場景。
2.1.1純函數(shù),比如計(jì)算,接口調(diào)用中轉(zhuǎn),查詢服務(wù),接口拼接,SSR等。
2.1.2由事件觸發(fā),比如數(shù)據(jù)處理,接收數(shù)據(jù)消費(fèi),定時(shí)任務(wù),消息轉(zhuǎn)發(fā)等。
2.1.3如果有存儲(chǔ)邏輯,比如上傳圖片,裁切,處理音視頻等等,可以提供通用的baas服務(wù)的sdk或者api來進(jìn)行處理即可。
2,結(jié)合部門自己的業(yè)務(wù),我們什么地方可以使用serverless:
2.2.1c端場景需求:我們開發(fā)創(chuàng)新產(chǎn)品或者小程序,app,前端網(wǎng)頁時(shí)可以無需后端開發(fā)人員配合支持。
比如我們要開發(fā)一個(gè)ugc的社區(qū),類似微博,綠洲這種app,我們需要的是注冊,登錄,feed流,增刪改查文章,上傳圖片,視頻等功能。
場景1:那么比如注冊,登錄統(tǒng)一的api(現(xiàn)在sso服務(wù)就可以直接復(fù)用,在faas中調(diào)用sso服務(wù)接口就可以)。
場景2:用戶的頭像上傳,圖片,視頻上傳可以直接調(diào)用s3的服務(wù)接口或者cdn接口直接用faas包裝即可,無需后端配合。
場景3:用戶發(fā)布文章,刪除,修改文章等,需要操作數(shù)據(jù)庫,這里包含了簡單的curd的業(yè)務(wù)邏輯,我們可以直接使用云平臺(tái)創(chuàng)建好服務(wù)器,然后接入baas中的比如mysql的client,直接在faas中編寫對(duì)應(yīng)的curd邏輯即可,或者利用一些開源的curd包,aws,阿里云都有類似的功能,在新浪我們可以拆開成faas和baas結(jié)合+paas的解決方案。
那么我們開發(fā)這么一個(gè)ugc社區(qū),當(dāng)我們擁有了serverless架構(gòu)服務(wù)后,我們完全可以純前端完成功能。(理想情況)
2.2.2內(nèi)部b端場景:
場景1:我們要實(shí)現(xiàn)一套無紙化辦公app或者web系統(tǒng),比如我們的scheme服務(wù),hybrid后臺(tái)發(fā)布服務(wù)中的部分邏輯,比如圈用戶,圈版本等接口都可以直接拆分到faas服務(wù)中。
場景2:我們經(jīng)常要分析處理一些數(shù)據(jù),定時(shí)進(jìn)行數(shù)據(jù)計(jì)算,我們可以直接在faas中的定時(shí)任務(wù)完成計(jì)算邏輯和消息轉(zhuǎn)發(fā)功能。
其中場景2,我們目前需要申請(qǐng)服務(wù)器,開發(fā)crontab腳本,再申請(qǐng)數(shù)據(jù)庫,進(jìn)行數(shù)據(jù)二次處理寫入。或者還要在luwak上編寫sql,配置任務(wù),但是如果和sql無關(guān)的任務(wù)則luwak無法滿足需求。
3,serverless的實(shí)現(xiàn)和開源方案,業(yè)界對(duì)比:
1,阿里云,騰訊云,頭條云,AWS,google的云服務(wù)等。
2,開源服務(wù):Openfaas(社區(qū)的),KNative(google的),OpenWhisk(IBM,太老了這個(gè)多個(gè)開源系統(tǒng)拼接),Kubeless,F(xiàn)ission(k8s官方的),F(xiàn)n(Oracle的,兼容AWS的Lambda函數(shù)服務(wù))
建議選openfaas或者kubeless嘗試一下,看大家都比較推薦,因?yàn)樵蹅兛隙ㄊ亲越ā?/p>
總結(jié):其實(shí)還不錯(cuò),如果公司不用,我自己的個(gè)人項(xiàng)目還是可以選擇試試的。