近兩年來,Serverless 無疑是前端圈里最火熱的話題之一,,在各種技術峰會,、各種技術文章里都能看到它的身影。如果你是一名前端開發(fā)者,,一定很奇怪: “我們這些前端切圖仔,,為什么要關注 Serverless 這種云計算的概念?” 我們就從這個話題開始聊起吧,。 為什么前端開發(fā)者要關注 Serverless ,?這個問題用一句話回答就是: “Serverless 解放了端開發(fā)者(不僅僅是 Web 開發(fā)者)的生產(chǎn)力,讓端開發(fā)者可以更快,、更好,、更靈活地開發(fā)各種端上應用,不需要投入太多精力關注于后端服務的實現(xiàn),?!?/strong> 下面我們就來慢慢解釋這句話。 在前端的史前時代,,那個時候甚至還沒有”前端工程師“這個職位分類,,所有人都是后臺開發(fā),所有的網(wǎng)頁和 Web 應用都是來自于后臺渲染,,CGI,、PHP (甚至你可能都沒聽說過的 Perl)便是當時 Web 技術的代名詞,那個時候的 JS 和 CSS,,不過是“切圖仔”在網(wǎng)頁里寫動效和彈窗的小玩具而已,。 后來,AJAX 技術出現(xiàn)了,最早在 Outlook Web Access 中出現(xiàn),,隨后隨著 Google Map,、Gmail 等大型 Web 應用的實踐,逐步為人所知,。這項技術讓頁面內(nèi)的 JS 也能異步地向服務器發(fā)起各種請求,,并且把數(shù)據(jù)渲染到頁面上。這個時候,,前端工程師們開始接管視圖層邏輯: 再后來,,Node.js 誕生,大大降低了前端開發(fā)者開發(fā)一個后臺服務的難度,,這也讓前端開發(fā)者逐漸接管了接管了渲染邏輯,,在這期間,各大前端框架(代表性的 React,、Vue)的服務器端渲染也逐步成熟,。 既然能用 Node.js 來做服務端渲染,那么拿 Node.js 來寫后臺業(yè)務邏輯,、實現(xiàn)各種 HTTP API 當然也不在話下,,所以在一些公司里,前端接管業(yè)務邏輯,,后臺只負責各種底層微服務的架構(gòu)就出現(xiàn)了,,這也是目前很多大公司在實行的架構(gòu): 細心的你可能已經(jīng)注意到了,在這個時候,,渲染,、HTTP API、后臺業(yè)務邏輯這些東西,,從端的角度看是屬于服務端的,,但是從分工角度看卻屬于前端開發(fā)的范疇,這就是 BFF(Backend for Frontend)的概念,,它的優(yōu)勢在于:
這就是為什么大公司的很多業(yè)務,都開始越來越多地招 Node.js 全棧工程師的原因,。 但是 BFF 并不是銀彈,,它還是有一定問題的,比如在國內(nèi)通曉前后端開發(fā)的全棧工程師太少,,很難撐起大體量的業(yè)務開發(fā),。而且國內(nèi)大多數(shù)前端工程師缺少服務端開發(fā)的經(jīng)驗,讓他們運維上百臺服務器和一整套海量服務,有點強人所難:
而 Serverless 正是幫助前端工程師解決運維開發(fā) BFF 的良藥。 Serverless 這個單詞,,直譯成中文的話,,應該是“無服務器”。當然,,這里的“無服務器”絕對不是說不需要任何服務器資源了,,而是說不需要關心服務器的具體運維和管理,只需要寫代碼然后發(fā)布即可,。 它包含了 FaaS(函數(shù)即服務)和 BaaS(后端即服務)兩大塊功能,,把各種基礎設施進行了抽象,即使不熟悉后端的開發(fā)者,,也能快速高質(zhì)量地開發(fā)出海量、穩(wěn)定的后端服務,,而這對于前端工程師維護 BFF 服務來說,,幾乎是量身定做的。 舉一個最簡單的例子,,你現(xiàn)在需要上線一個新的 HTTP API(比如 你只需要寫下面這個云函數(shù):
然后發(fā)布這個云函數(shù)(假設命名為
然后你就可以通過 如果你覺得這樣很酷炫,,那么不如來試一試 云開發(fā) Cloudbase 吧! 云開發(fā)是什么,?云開發(fā)(Cloudbase)是騰訊云 TCB 團隊(Tencent Cloudbase)出品的云端一體化產(chǎn)品方案,,為廣大的小程序、Web、移動端開發(fā)者提供一站式的 Serverless 服務,。 當然這是官方的說法,,用人話講就是: 用了云開發(fā),各個端的開發(fā)者就可以一站式地解決后端服務問題了,! 實際上早在 2018 年,,云開發(fā)就聯(lián)合微信團隊推出了「小程序·云開發(fā)」,如果你對它還不怎么了解,,可以看這兩篇文章: 而現(xiàn)在,,云開發(fā) For Web 也正式上線了,! 云開發(fā)有哪些能力?云開發(fā)提供了云數(shù)據(jù)庫,、云函數(shù),、云存儲、用戶登錄體系等一系列的后端能力,,并且提供了各端的 SDK,,讓各個端的開發(fā)者能夠基于這些能力,快速,、優(yōu)質(zhì)地開發(fā)出功能豐富的應用,。 Talk is cheap, Show me the code! 口說無憑,我們還是來直接看代碼吧,! 云數(shù)據(jù)庫云開發(fā)提供了一個文檔型的 NoSQL 數(shù)據(jù)庫,,與傳統(tǒng)的云上數(shù)據(jù)庫不同的是,云開發(fā)的數(shù)據(jù)庫可以在各種客戶端內(nèi)使用 SDK 直接進行讀寫,,比如 Web 應用,、小程序內(nèi)、Flutter 客戶端等等,。 下面我們以 Web 應用為例,,展示云數(shù)據(jù)庫的一系列功能。 基礎讀寫CURD是數(shù)據(jù)庫最基礎的功能,,云開發(fā) SDK 提供了一套鏈式調(diào)用接口,,對數(shù)據(jù)庫進行讀寫:
聚合搜索普通的查詢可能無法滿足一些復雜的需求,比如聯(lián)表,、group等等,。 云開發(fā)針對這些復雜的查詢場景,推出了聚合搜索的功能,,把一系列操作抽象為一個管道(pipeline),,單次執(zhí)行即可,,避免了多次讀的性能問題,我們以 group 操作為例:
更多的聚合搜索功能,,可以參考:Aggregate | 云開發(fā) Cloudbase 事務在訂票、預約,、轉(zhuǎn)賬等等場景下,,開發(fā)者可能會要求數(shù)據(jù)庫能夠保證一連串讀寫的原子性,避免出現(xiàn)競爭條件,,這就是數(shù)據(jù)庫事務的使用場景,。 云開發(fā)數(shù)據(jù)庫當然也提供了事務功能:
實時推送在實時聊天室、實時數(shù)據(jù)看板等等場景下,,我們經(jīng)常會需要訂閱數(shù)據(jù)庫的更新,,從而實現(xiàn)實時數(shù)據(jù)推送。 云開發(fā)的數(shù)據(jù)庫提供的
更多信息可以參考:數(shù)據(jù)庫實時推送 | 云開發(fā) Cloudbase 云函數(shù)所謂的云函數(shù),便是在云端運行的,、事件驅(qū)動的一段代碼,,它可以被 SDK 調(diào)用,也可以直接通過 HTTP 調(diào)用,,還可以設置定時器讓它定期運行:
這一小段代碼很簡單,,但是隱藏在它之下的卻是一整套龐大的 FaaS(函數(shù)即服務)基礎設施,提供了諸如彈性伸縮,、日志、監(jiān)控告警等多方面的能力,。 使用調(diào)用云函數(shù)使用云開發(fā)的客戶端 SDK,,可以輕而易舉地在各個端上調(diào)用云函數(shù),我們以 Web 應用為例:
HTTP 訪問你也許會覺得 SDK 體積龐大,,太沉重了,,那么你也可以選擇使用 HTTP 來調(diào)用云函數(shù),響應 HTTP 請求,。
然后我們直接通過命令行發(fā)布這個函數(shù),,并為它創(chuàng)建一條路由:
隨后便可以通過 url 直接訪問這個云函數(shù):
具體可以參考:docs./service/qui… 在云函數(shù)內(nèi)部使用服務端 SDK在 Cloudbase 的云函數(shù)內(nèi),你可以直接使用 Node.js SDK,,無需在初始化的時候額外注入秘鑰:
更詳細的內(nèi)容可以參考:docs./api-referen… 云存儲我們在開發(fā)應用的過程中,,經(jīng)常會遇到圖片,、文件上傳的需求,并且可能需要為這些文件設置 CDN 訪問,。傳統(tǒng)的流程是下面這樣的:
但如果使用云開發(fā),,只需要在客戶端調(diào)用
更詳細的內(nèi)容,可以參考:docs./storage/int… 擴展能力云開發(fā)除了上述的基礎功能之外,,還提供了一系列的擴展能力,,包括但不僅限于: 更詳細的內(nèi)容,可以參考:docs./extension/i… 總結(jié)上面的能力是不是有些讓你看花眼了,,完全不知道要怎么搭配起來使用,? 其實一張圖就可以解決: 圖中的客戶端SDK包括: 服務端 SDK 包括:
使用云開發(fā)快速搭建實時聊天室光看示例代碼當然沒有什么意思,我們接下來就拿云開發(fā)的一些能力,,來快速開發(fā)一個實時在線聊天室吧,。 這是一個由
首先是我們的初始化流程,,先使用匿名登錄,,然后建立實時數(shù)據(jù)推送的連接:
建立實時連接之后,集合中的任何變化,,都會觸發(fā) 當然只讀消息是不夠的,,我們還需要發(fā)送消息,,具體實現(xiàn)非常簡單,可以看
當然以上只是局部的代碼片段,,整體代碼可以參考: 開發(fā)完畢之后,我們便可以使用 云開發(fā)靜態(tài)網(wǎng)站 來托管我們的這個聊天室 Web 應用,。 首先我們構(gòu)建我們的應用:
構(gòu)建產(chǎn)物會生成到 然后我們發(fā)布到靜態(tài)托管即可(托管前,,請先開通靜態(tài)網(wǎng)站):
發(fā)布完成后,你便可以通過 PS:實際上,,云開發(fā)的主頁和官方文檔,,就是這樣托管的(畢竟做云服務的,最重要的就是 Eating your own dog food 嘛),。 當然,,除了這個實戰(zhàn) Demo 以外,還可以看看一些真正業(yè)務的實踐: 展望給 Web 開發(fā)者帶來效率和質(zhì)量上的提升,,幫助他們開發(fā)更多更優(yōu)質(zhì)的應用,免去運維,、后臺開發(fā)的煩惱,,是云開發(fā)不變的愿景。雖然我們目前已經(jīng)有了很多強大又方便使用的能力,,但這遠不是我們的終點(實際上我們才剛剛起步),,在未來我們將會持續(xù)完善下面的能力,進一步完善云開發(fā)的體系:
PS:如果你覺得這篇文章對你有幫助,不妨花幾分鐘時間,,來試一試快速開始吧,。 關于云開發(fā)云開發(fā)(CloudBase)是一款云端一體化的產(chǎn)品方案 ,采用 serverless 架構(gòu),,免環(huán)境搭建等運維事務 ,,支持一云多端,助力快速構(gòu)建小程序,、Web應用,、移動應用,。
|
|