騰訊雲的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
這個 IDE 深度內建。 同時它作為一個第三方的平台,既能夠和阿裡雲合作,又可以和騰訊雲合作。
HBuilderX
在某些場景,比如:使用者 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
- 強大的上下文
在小項目場景下也非常适用了。