雲開發初探 —— 更簡便的小程序開發模式

歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~前端

本文由李成熙heyli發表於雲+社區專欄node

李成熙,騰訊雲高級工程師。2014年度畢業加入騰訊AlloyTeam,前後負責過QQ羣、花樣直播、騰訊文檔等項目。2018年加入騰訊云云開發團隊。專一於性能優化、工程化和小程序服務。git

img

img

小程序誕生以來,業界關注小程序前端的技術演進較多,所以衆多小程序前端的框架、工具也應運而生,前端開發效率大大提升,然後臺的開發技術則關注很少,痛點很多,具體痛在哪裏呢?github

小程序後臺開發之痛

img

第一個是腦殼瓜疼,怎麼疼呢?數據庫

img

隨着像騰訊雲等的雲服務商提供的雲服務愈來愈便捷,業務上雲已是大勢所趨。可是從簡單地在雲虛擬機上部署頁面,到實現真正全面地上雲,仍是有不少區別。要真正實現全面的上雲,要了解的東西很是多,當你第一次接觸這些概念的時候,學的這些東西是一個接一個,讓你目不暇接,每每分散了你的對業務的專一力。好比我本身,來騰訊雲以後,爲了對雲服務有更好地瞭解,就去報了個騰訊雲的課程。這課程系列分雲架構師、雲開發、雲運維三門課程,還分初級、中級、高級,須要花費大量時間才能理清這些知識概念,而且還要花大量的時間去上機作實驗。因此對於開發來講,要完全搞清楚,還真的不是件容易事,絕對讓你的腦殼疼。小程序

第二是肉疼,尤爲是你老闆肉疼。後端

img

最開始當互聯網尚未雲服務商的時候,公司都得本身搭服務,不只花大價錢買機器、買寬帶流量,還得請人過來維護。若是在這種狀況下要搞小程序開發,公司得請一個維護服務器硬件的、一個維護網絡的,一個數據工程師,一個後臺還有一個前端,恰好五我的。當雲服務商開始進入變革整個市場的時候,咱們就不用再本身維護硬件了,由雲服務商來維護,所以咱們能夠少請一個維護硬件的,但仍是得有一個運維去維護雲服務。當雲服務商將數據庫、容器服務都抽象出來上雲以後,我們連專業的數據庫維護均可以不請了,由後臺或者雲維兼崗就行。雲服務商的不斷髮展,確實是讓雲服務的成本不斷降低,但投入的錢仍是不少呀,要投入的人仍是很多,這幾年生意難作,做爲老闆確定是想投入成本、試錯成本越少越好。安全

第三個是腎疼。性能優化

img

你們都知道,開發是一個走腎的工做。好比,這些年流行的先後端分離,雖然讓專人專項,但卻引入了聯調這個事,因此也增長了腎的負擔。服務器

img

這裏列出了三個先後端分離帶來的麻煩。

  1. 權責每每不清晰,有不少臨界的位置,誰管均可以,容易引起扯皮。
  2. 溝通時間增多,由於畢竟是兩我的工做嘛,須要很多的溝通
  3. 除了溝通,還須要兩邊的代碼調試,看看數據、展現通不通,這個時間也很不可控,尤爲是若是環境特別複雜,調起來不只麻煩重重,還頗有挫敗感。

無服務開發小程序是將來趨勢

img

正由於小程序後臺開發的麻煩重重,所以業內都想出了各類各樣的開發方案,其中一種方案,「無服務開發小程序」,咱們認爲,將會是將來的趨勢。但這個將來,其實今天已經到來了。

img

那什麼是無服務開發呢?無服務,又稱爲 ServerlessServerless 還處在一個比較初期的階段,目前也沒有權威和官方的定義,不一樣人不一樣公司有不一樣說法,今天我也不打算講太複雜。顧名思義, Serverless 就是指應用的開發再也不須要考慮服務器這樣的硬件基礎設施,基於 Serverless 架構的應用主要依賴於像騰訊雲這樣的雲服務商提供的後臺服務。好比說無服務雲函數、雲數據庫、對象存儲服務等等。簡單來講,至關於你如今要開個水果店賣水果,之前你還得要租店面,搞水電、裝修門面。如今這些都不用了,你就在一個已經搭好各類各樣設施的超市裏,租一個已經幫你搞好門面的架子或者箱子,賣得好你就租大一點,賣很差就租小一點,隨時隨地隨你的心意,很是靈活。

img

爲何說無服務化開發是趨勢呢?由於雲服務的進程,已經從物理機,演進到 IAAS,再到 PAASIAAS 就是包括像雲虛擬機、私有網絡、網絡專線、負載均衡等等的基礎服務;PAAS 則更抽象一些,好比像雲數據庫、網絡防禦等等。基於 IAASPAAS,雲服務商發展出 Serverless 這類更高級的開發服務。所以呢,無服務開發就會是從此開發相似小程序這類輕量應用的新的開發趨勢。

img

一句話歸納就是說,有了無服務開發以後,你就不用再處理安裝、運維,底層了,只管寫接口、寫邏輯就好。總得來講,雖然你管的東西愈來愈少,但開發效率卻愈來愈高,開發出來的輕應用、小程序倒是具有高性能、高可用、高擴展的特性。

那無服務開發,具體怎麼去解決剛剛提到的後臺開發痛點呢?

img

第一是讓你更加關注你的業務邏輯。雲服務許多好用但難理解的概念,什麼冷備熱備、彈性伸縮、負載均衡等等,統統都不用管,你只須要寫好你的業務,服務好用戶就行。

img

第二,更省人力更省資金,老闆再也不肉疼。由於有了無服務開發,運維工做也不用操心了,像小程序這類的輕應用,有一個全棧開發,或者一個前端,半個後臺就能夠輕鬆應付了,資金和人力的需求可謂大大節省。

img

第三,就是前端工程師向全棧工程師的轉變。有了無服務開發,前端工程師其實也能夠安全、高性能地去操做一些之前只有後臺纔敢操做的數據和邏輯,若是要開發的應用是像小程序同樣輕量的、簡單的,徹底能夠由前端工程師完成,除非是特別複雜的,可能才須要後臺的介入。這樣也省缺了先前提到的先後端聯調的麻煩。

小程序·雲開發

img

說了這麼多無服務開發的概念、優勢,在小程序無服務開發這一塊,騰訊雲有什麼樣的做品呢。這就是今天要重點介紹的,小程序·雲開發,這就是騰訊雲與微信聯合研發後,交出的答卷。

img

雲開發,一共提供了三大能力,分別是存儲、數據庫、雲函數。簡而言之,就是提供了存文件、存數據和運行業務邏輯的能力。接下來,我會採起先後對比的方式,從方方面面去對比雲開發和舊有的開發模式的不一樣。

img舊開發模式

首先是開發模式與架構上的對比。在雲開發模式出來以前,舊的小程序後臺開發模式就是上面這幅圖,在小程序端發請求,每每你得引入額外封裝好的 SDK,而後你須要在雲服務這邊配置大量的運維產品才能作出性能、可用性很是好的產品。開發者要關心的內容,從前端、後臺一直關心到運維這塊。

img雲開發模式

而云開發的全新模式,只要調用小程序原生的接口,就能夠操做最基本的三大資源,而云開發背後又有騰訊雲的基礎服務做爲支撐,自己就高可用、高性能、可擴展,你要關心的事情是大大減小了。

img騰訊雲控制檯

其次是資源管理平臺的對比。之前你須要管理雲資源,你須要在騰訊雲的面板裏,幾十上百的產品裏找到你須要的產品。

img雲開發控制檯

而云開發呢,你在小程序開發工具裏,就能夠找到雲開發的控制面板入口。進入後,咱們將你要關注的產品,作成一個獨立面板供你使用,極爲簡潔方便。

img舊開發模式-上傳文件

第三,咱們對比一下在小程序端調用資源。以上傳文件爲例,舊的開發模式,小程序端,你須要用 wx.chooseImage 還有 wx.uploadFile 小程序接口,後臺要部署業務框架、路由,還有寫邏輯上傳到騰訊雲的對象存儲,你還要考慮這個後臺服務的性能與安全,萬一用戶量峯值很大怎麼辦,有黑客攻擊怎麼辦。

img雲開發模式-上傳文件

而云開發的例子,則極爲簡單,十幾行代碼,就能夠寫出安全、性能好的代碼上傳邏輯!

img

假設開發者是一個菜鳥,只懂 JavaScript 基礎,對比下來,傳統的開發模式,前端耗時2分鐘開發,1小時聯調,後臺框架、邏輯和聯調一共8小時,運維,要花一成天時間去學,總共要花1142分鐘,對比只要寫2分鐘就能完成的雲開發模式,足足是雲開發耗時的571倍!

img舊開發模式-插入數據

最後,咱們來對比在服務端裏插入數據。這裏的服務端裏指的包括有云函數、還有你本身買的服務器。舊模式下,小程序端要用一個 wx.request 發送請求到後臺,後臺搭建好框架、路由等服務以後,開始寫插入數據到騰訊雲MongoDB實例的邏輯,天然也是須要考慮服務的性能與安全。

img雲開發模式-插入數據

而云開發的新模式,十幾行代碼,就能夠開發出性能好、安全性高的插入數據邏輯。

img

假設開發者是一個菜鳥,對比下來,傳統的開發模式,前端要花31分鐘進行開發與聯調,後臺要用6小時部署服務開發邏輯還要30分鐘聯調,而運維的話從學習到會用大概也得10小時,基本上是雲開發模式耗時的1000多倍。

從代碼、耗時等多個方面去對比新舊兩種開發模式,咱們能夠發現,雲開發是絕對的碾壓。

小程序·雲開發背後的技術力量

img

你們如今知道了無服務開發是將來的開發新趨勢,帶有無服務特性的小程序雲開發帶來的各類各樣的好處,那麼騰訊雲在背後,作了些什麼技術進行支撐呢?

img

架構上,一個請求操做從小程序端,經過微信後臺,一直到騰訊雲這邊的雲開發服務層,雲開發服務層調用的這些數據庫、存儲、雲函數,其實都是基於騰訊雲的各類基礎服務。在這個請求通路上面,微信會將小程序的用戶 openid, 小程序 appid 直接帶過來,將用戶的信息寫到雲函數、數據和文件元信息裏面,爲更方便的權限控制打下基礎。

img

另外,既然是複用了騰訊雲的基礎資源,那天然是具有了雲資源的特性。好比存儲自動接入了 CDN 加速, 數據庫自然就帶有自動備份、無損恢復等功能,雲函數有彈性伸縮、多地可用的特性,能響應峯值不一樣的服務。而云開發服務層,咱們也作了負載均衡、而且與微信後臺進行就近接入,讓性能更好。

img

目前雲開發正式上線5天(注:9月10日深夜發佈,掘金技術大會是在9月16日),咱們的服務所支撐的 API 日調用量最大的單個小程序,已經達到 1000W+ 的調用量了,這個調用量是什麼概念呢?通常只有BAT,一些高頻使用的獨角獸開發的小程序才能達到這個調用量級。所以90%以上的小程序用咱們這個服務都是沒有問題的。

推薦實踐

img

講一項技術,除了講功能、講底層,其實更重要地說講怎麼去用這門技術去實踐。接下來,我會介紹一些咱們推薦的實踐方式,但我只會是點到爲止,咱們其實更但願社區能基於雲開發,作出更多更好的實踐。

第一點是資源操做的推薦實踐。

img小程序端

img服務端

在小程序端操做資源方面,咱們是使用小程序的原生接口進行操做,而在小程序端操做資源,因爲安全的考慮問題,基本上操做存儲、數據庫等的資源只能寫用戶本身的數據,而讀數據則根據規則來判斷是否有權限。在服務端操做資源方面,咱們使用 wx-server-sdk 或者 tcb-admin-node 來處理,前者是基於後者的能力進行了封裝。在服務端使用這兩個 SDK 去操做資源,所擁有的權限是管理級的,就是意味着能夠操做一切的資源。

img

左邊的圖是數據庫的權限控制,右邊的圖是存儲的權限控制。這兩個控制面板都有各自不一樣權限的一些推薦的使用場景,你們能夠打開控制去讀下面每一個權限的灰色的解釋。

img

img

第二點,是數據庫的推薦實踐。這裏以騰訊乘車碼爲例,像這種交通的小程序,可能會面對弱網或者無網的狀況,開發初期爲了省事,將大量的配置信息都寫在小程序端中。但隨着向更多城市的推動,配置文件愈來愈大,小程序的包體積愈來愈大。正好這個時候雲開發推出了,騰訊乘車碼就採用雲開發的數據庫,將一些不必定要在離線環境使用的配置遷移到雲開發,另外還採用雲開發的存儲服務來存放靜態資源。這就大大壓縮了乘車碼小程序的體積,爲其它新增功能騰挪了空間。

img

第三點,推薦使用雲開發的存儲存放小程序中所須要的靜態資源。由於雲開發的存儲自然自帶 CDN 加速。好比在控制面版的存儲中,文件的詳情裏獲取的下載地址,就是 CDN 已經加速的地址。

img

第四點,是雲函數的使用。目前雲函數暫時不支持過於耗時、太複雜的操做,目前的超時時間爲20s,函數包大小控制在20M左右。但其實這也已經能知足超過80%的需求,隨着服務的逐步穩定,咱們會考慮將這些限制進一步放寬。

img

雲函數另外一種用法就是,咱們能夠將相同的一些操做,好比用戶管理、支付邏輯,按照業務的類似性,歸類到一個雲函數裏,這樣比較方便管理、排查問題以及邏輯的共享。甚至若是你的小程序的後臺邏輯不復雜,請求量不是特別大,徹底能夠在雲函數裏面作一個單一的微服務,根據路由來處理任務。

img

好比這裏就是傳統的雲函數用法,一個雲函數處理一個任務,高度解耦。

img

第二幅架構圖就是嘗試將請求歸類,一個雲函數處理某一類的請求,好比有專門負責處理用戶的,或者專門處理支付的雲函數。

img

最後一幅圖顯示這裏只有一個雲函數,雲函數裏有一個分派任務的路由管理,將不一樣的任務分配給不一樣的本地函數處理。

img

img

雲函數還有一種用法就是,能夠做爲中間路由,而後將 appid, openid,轉發給原有的服務。這裏以騰訊相冊爲例。具體怎麼操做呢。好比騰訊相冊以前將評論功能接入了雲開發,但一些敏感操做,像刪除、編輯評論,這個請求發送到雲函數,而後雲函數會將用戶信息轉發給相冊本來的後臺,而後再將該用戶是否有權限返回來告訴雲函數,若是有權限,就在雲函數裏刪除評論。

img

最後,若是大家想在雲函數調用 AI 服務,還有一些微信相關的操做,可使用我封裝的這兩個 SDK。第一個 image-node-sdk 覆蓋面比較全,覆蓋了所有的騰訊雲智能圖像服務,下面的 wx-js-utils,也提供了微信支付、模板消息、用戶信息獲取等幾個經常使用的接口。

能夠關注個人微博或者 Github 獲取最新雲開發的資訊或者技術資料。

問答
騰訊雲是如何解決小程序開發的難題?
相關閱讀
小程序·雲開發 項目開發經驗分享
小程序的全棧開發新時代
微信「小程序雲」(雲開發)簡介與初體驗
【每日課程推薦】機器學習實戰!快速入門在線廣告業務及CTR相應知識

此文已由做者受權騰訊雲+社區發佈,更多原文請點擊

搜索關注公衆號「雲加社區」,第一時間獲取技術乾貨,關注後回覆1024 送你一份技術課程大禮包!

海量技術實踐經驗,盡在雲加社區

相關文章
相關標籤/搜索