FEDay會後-Serverless與雲開發,多是前端的下一站

進化自己是生物體與環境之間持續不斷的信息交換的具體表現。
—— 摘自《信息簡史》前端

很榮幸在9月21號成都舉辦的第五屆FEDay上做爲講師爲你們分享騰訊雲在近兩年推出的雲開發相關的技術和知識,成都是個很是好的城市,就是火鍋太辣,費馬桶~web

我初次接觸前端是讀書期間的第一份實習工做,在SAP上海研究院TIP BI部門開發基於SVG的Charts庫,99%的代碼邏輯是將數據用SVG轉化爲可視化的UI。畢業後成爲了一名傳統的web前端開發者,期間還折騰過富本文編輯器。後來有近一年的時間研究效率工程,也就是大衆口中的前端工程化。而後在加入騰訊以前的工做是地圖,技術核心是WebGL。能夠說除了音視頻之外,5年多的經歷基本涵蓋了前端領域絕大部分的技術方向。不管是大衆的web仍是小衆的SVG,不管是宏觀到web總體的工程化仍是微觀到像素的圖形編程。表面看上去彷佛每一份新工做跟以前的工做都關聯甚微,好比在使用WebGL期間積累的矩陣、向量、三角剖分等數學和圖形學知識基本上在現階段工做中得不到體現。我不知道各位前端開發者在生涯初期的幾年內是否有過一些迷惘,我至今工做5年,但在加入到騰訊以前其實一直是比較茫然的狀態。常常思考一些關於職業前景的問題,好比前端的核心價值是什麼?前端的發展方向是什麼?等等。我嘗試在不一樣的工做內容中尋找這些問題的答案,而在FEDay的此次分享即是我我的認爲最接近理想的答案:Serverless數據庫

我分享的主體是《從前端到全棧:依託雲的Serverless落地實踐》,須要說明的是這裏的「全棧」指的是開發模式。通俗地說就是讓前端開發者可以以很小的成本介入到前端之外的工做,具體來講就是服務和數據。進而從開發模式上,一個前端開發者能夠掌控應用總體從前到後全部的功能。編程

雲開發

首先簡單介紹一下什麼是雲開發。雲開發並非Serverless,準確的說它不是Serverless的所有。目前業內對Serverless的廣泛認知是FaaS+BaaS,騰訊雲基於這種認知的具象實現包括兩部分:小程序

  • FaaS層:雲函數SCF;
  • BaaS層:雲數據庫和雲存儲。

雲開發實際上是在FaaS和BaaS基礎上針對應用端的一套完整的解決方案,包括兩部分:後端

  • 端-SDK:目前小程序端和web端已經推向市場,Android和IOS端即將面世;
  • 雲-接入層:本質上是一個API Gateway,與端SDK配合完成FaaS和BaaS的能力調用。

爲什麼雲開發可能會改變前端的開發模型?回答這個問題能夠對比目前一種比較流行的架構模型:BFF(Backends for Frontend,爲前端服務的後端)。前端工程化

BFF

BFF簡單來講就是在原有的一體化服務端基礎上,針對不一樣的業務平臺分別開發一層獨有的、很薄的服務,見下圖:
安全

BFF承擔了一部分的業務邏輯,這部分邏輯一般是平臺獨有的。舉一個現實中的例子:在線視頻提供商有多種平臺,好比網站、app。因爲版權限制有些影片只能在特定的平臺播放。具化到技術層面,實現此類邏輯包含分平臺鑑權、數據查詢策略等等,這些即是典型的平臺差別化業務邏輯。獨立於核心業務邏輯以外的BFF層可以實現差別化邏輯的鬆耦合,進而令迭代和維護更高效和安全。前端工程師

目前業內對BFF廣泛實踐模式是將BFF分發到負責各平臺技術開發的團隊,好比App團隊負責Mobile BFF、前端團隊負責PC web和H5 BFF等等。那麼對於前端工程師來講,這種模式是否意味着前端兼顧BFF層?理想的場景是這樣的,但現實工做中並不是如此。BFF本質上仍然是服務層,除了編程語言以外,一名合格的服務端開發者還須要具有一些獨有的領域知識以及服務管理、數據管理理念。因此目前大多數BFF仍然由傳統前端以外的專人負責,即使是Node.js BFF。
架構

而Serverless和雲開發解決的即是編程語言之外的這些問題。

雲開發與前端

以雲開發體系提供的功能和服務爲基礎支撐,前端開發者的關注點除了UI和交互邏輯之外,可以以很小的成本介入以雲函數爲承載的業務邏輯層和以雲數據庫、雲存儲爲支撐的數據存儲層。簡而言之,前端的關注點爲:交互邏輯+業務邏輯(雲函數)+數據(雲數據庫/雲存儲)

在雲開發支撐的前端架構模型基礎上,前端開發者與其餘職能團隊協做的工程模型也被完全改變:

  • 業務邏輯由前端開發者負責,再也不須要專職的後端開發者;
  • 服務保障和線上監控由雲開發平臺承擔,再也不須要專職的運維人員。
能力模型

具體到現實上手開發,開發者們須要瞭解三種角色:端、雲和控制檯。

  • 端的表現形式是對應各平臺的SDK,是與前端開發者關係最緊密的一個角色;
  • 雲指的是支撐Serverless體系的後臺系統,這部分對於開發者來講是無感知的,與其對接的工做由端SDK承擔。細化到子角色能夠分爲接入層和基礎服務,接入層負責代理轉發和用戶鑑權等工做;基礎服務提供基本的能力支撐,包括雲函數、雲數據庫和雲存儲;
  • 控制檯的功能分爲兩大類:一是管理功能,好比雲函數的部署、數據和文件的管理等等;二是運營,控制檯提供產品線上監控以及數據的統計和可視化,以輔助運營。
場景多樣化支撐

任何一種新技術或者架構落地到具體的業務場景中都不免會遇到因爲業務特殊性形成的遷移困難問題,因此在基礎的開發生態以外,雲開發爲支撐多樣化的業務場景創建了必要的策略以及對應的工具。好比對於數據私密性存在高要求的產品,能夠經過控制檯選擇嚴格的CURD權限管理策略;而且可使用wx-service-sdk在雲函數中進行私密數據的CURD以保障安全性;再好比對實時性要求較高的場景,好比在線客服、多人遊戲等,雲數據庫的實時推送功能能夠保障此類功能的高效表現。

落地案例

現階段雲開發的落地場景有兩個:小程序和web端(其餘端的落地近期到來)。分享現場有一位觀衆提出了一個問題:雲開發能支撐多大的用戶量和請求量?若是對雲開發和Serverless有基本瞭解的話,這個問題其實就至關於問1+1等於幾同樣。雲開發最大的優點之一即是根據請求量進行動態的擴縮容,其背後是騰訊雲龐大的計算能力作支撐。不過爲了更具體的回答這個問題能夠參考一個現實中的案例:騰訊相冊。

2018年3月份推出騰訊相冊小程序在9個月的時間裏實現了用戶量破億的成績,而這個爆款小程序的開發只佔用了一我的力,在雲開發基礎上,一我的完成了從客戶端到服務端到數據的所有工做。這個案例足以說明雲開發的便利和強大,更多細節能夠參考這篇文章

總結&展望

現階段前端社區對於前端開發者的進化方向有兩種較流行的認知:以Node.js爲支撐包攬先後端的大前端和以ReactNative和Flutter爲支撐的泛前端。雲開發很是接近大前端,而且不只限於服務端,更進一步地深刻到數據和存儲。小程序其實很是接近泛前端的概念,它是web和native的綜合體,大部分場景下開發者均無需關注平臺差別性。那麼綜合大前端和泛前端,在雲+端的支撐下是否可以展望一下前端在將來會成爲「全棧+全端」?咱們拭目以待。

相關文章
相關標籤/搜索