天天看點

騰訊雲的serverless : 微信雲開發與Cloudbase與SCF

騰訊雲的serverless : 微信雲開發與Cloudbase與SCF

    • 從 Firebase 說起
    • Cloudbase 的本地化
    • 微信雲開發 與 Cloudbase
    • SCF 與 Cloudbase 一些異同
    • 三方總結

本文寫作時間 2021/02/24 , 僅代表目前時間點下的官方文檔和實際使用體驗。

和騰訊雲利益無關,如有刊誤,歡迎指正。

從 Firebase 說起

Firebase是 Google 的一個把後端作為服務的雲平台(BaaS) , 包含很多的功能:

  • 實時資料庫(Realtime database)
  • 使用者認證(Authentication)
  • 自定義API(Cloud function)
  • 消息推送(Cloud messaging)
  • 靜态網頁Hosting
  • 雲存儲(Cloud storage)

可惜由于 Google 自身的問題,在中國用不了。

Cloudbase 的本地化

Cloudbase

是騰訊雲開發的雲原生一體化開發環境和工具平台。大體的功能和

Firebase

是類似的。

不過它找到了微信小程式這樣一個本地化極佳的場景,而且依托對應的 IDE(微信開發者工具)形成了一套較為完善的工具鍊閉環。

這裡不得不提到

uni-cloud

, 它的思路有一定的類似,和

HBuilderX

這個 IDE 深度內建。 同時它作為一個第三方的平台,既能夠和阿裡雲合作,又可以和騰訊雲合作。
在某些場景,比如:使用者

oauth

登入 這一塊說不定能 2 頭通吃 (畢竟 Cloudbase 不可能支援支付寶登入吧,笑~)

微信雲開發 與 Cloudbase

這兩個實際上是一回事,隻不過 微信雲開發 是 Cloudbase 的一個定制化的場景罷了。

不過 微信雲開發 的項目管理起來,不如 Cloudbase雲開發 便捷。

比如 :

@cloudbase/cli

就已經開始使用

cloudbaserc.json

來管理項目。微信雲開發就不行,我在使用這個cli工具時是看不到小程式的環境的,隻能看到web的環境。

微信雲開發中,部署一個雲函數,是把對應的整個目錄,直接壓縮上傳并部署,并不會自動分析裡面的依賴。

例如:我們想抽離公共代碼到外部:

// cloudfunctions/hello-world
const { UserInfoProjection } = require('../base/model/index.js')
exports.main = async (event, context) => {
  ...
}
// 上傳并部署
           

此時由于沒有把外部

base

中的上傳上去,是以雲函數就報錯了。

解決這個的思路當然很多:

  • 依賴分析
  • layer (SCF和Cloudbase有)
  • lerna
  • copy目錄

其中 copy 的思路是我們自己開發的時候,把

common

部分的代碼, 利用

copy-webpack-plugin

類似的玩意 ,打入每個雲函數裡。

這樣也會帶來一個很大的問題,比如

common

包依賴

dayjs

,

lodash

這種極其常見的包,我們不得不在每個雲函數的

package.json

, 加入對應的依賴, 這顯然很煩。

Cloudbase這一塊,并沒有把

layer

對應的 api 放入 cli 去,但是 ui 上可以操作, 同時加了一個

installDependency

的選項,在雲端自己去安裝

node_modules

。這個我猜騰訊雲有自己的 npm 源,當然這個選項對于比較大的項目,需要提煉公共邏輯/元件,釋出到私有 npm 的,實際上也是無能為力的。

cloudbaserc.json

的配置也是倍感親切。

CloudBase Framework

這塊,個人不是很了解它和 SCF 相容的

Serverless Framework

之間的關系。個人感覺有點在重複造輪子,與之相比

Serverless Framework

的相容性會更強些吧。

SCF 與 Cloudbase 一些異同

SCF的雲函數技術應該處于 Cloudbase 的上遊。

SCF已經上線的 nodejs

12.16

的支援,還有 保留并發執行個體 等功能。

Cloudbase 還沒有,nodejs 最高版本也隻有

10.15

三方總結

雲函數這一塊,技術應該都源于 SCF , 流量灰階,釋出版本這一塊行為很類似, 技術上應該 SCF > Cloudbase >= 微信雲開發 。

Cloudbase

作為一個 Baas , 功能上融合了騰訊雲大量的産品,發展前景很不錯。

微信雲開發作為

Cloudbase

的微信小程式場景,依靠獨有的

cloudId

等大量與微信綁定

  • 便捷的 api
  • 強大的上下文

在小項目場景下也非常适用了。