過去、現在和未來:開發一款微信小程序的技術迭代全過程

2019 年 10 月 19 日,由騰訊雲與微信小程序團隊聯合舉辦的“小程序·雲開發”技術峯會在北京召開。23 萬小程序·雲開發註冊賬戶,50 多萬開發者上手使用,這是騰訊雲與微信小程序團隊聯合推出雲開發服務以來,交出的第一張重要成績單。而這個過程,要從小程序誕生的那一日說起。

過去:從微信開發者工具到微信小程序解決方案

2016 年 1 月 11 日,張小龍現身微信公開課 Pro 版發表公開演講。也就是在此次演講中,微信官方正式宣佈正在開發“應用號”的消息。而當時被形容爲“像 App 一樣的公衆號”——「應用號」在同年 9 月正式更名爲「小程序」,併發布內測。

在「應用號」發佈當天,微信宣佈發佈微信 Web 開發者工具, 該工具可以讓開發者在電腦上模擬訪問微信內網頁,幫助他們更方便地進行開發和調試,此後微信 Web 開發者工具成爲了微信小程序官方 IDE 微信開發者工具。

微信開發者工具是基於 Node.js 和 Chromium 的應用程序實時運行環境,以 node-webkit 開發的。其中,MINA ( MINA IS NOT APP ) 正是其在微信中開發小程序的框架,MINA 爲開發者提供了自己的視圖層描述語言 wxml 和 wxss,以及基於 JavaScript 的邏輯層框架,並在視圖層與邏輯層間提供了數據傳輸和事件系統,同時小程序也爲開發者提供 UI 組件庫和底層 API 。後端開發者可以基於此微信開發者工具,在開發期間增強網絡調試的體驗,提高開發效率。

但正如 Bug 只會越調越多,微信開發者工具也並沒有想象中的那麼完美,內測中的微信小程序只能在工具內進行調試,而且不支持熱更新。並且,對於已習慣了其他編輯器的開發者,當時的工具也並沒有想象中的那麼“順手”。

2017 年 1 月 9 日,小程序發佈上線。隨後,伴隨着微信小程序的橫空出世,騰訊雲微信小程序解決方案 Wafer 也一同上線了。同年 12 月底微信小遊戲《跳一跳》上線,正式引爆小程序浪潮。當時,在如此高併發且大規模的日活用戶增長下,如何保障小程序的流暢性、提升小程序開發效率成爲了小程序開發者必須面對的問題。

由於企業級和個人開發者小程序需求的差異化,騰訊雲分別定製了基於企業級的 IaaS 能力的解決方案 Wafer1 和針對個人開發者的解決方案 Wafer2。

針對企業用戶的 Wafer1 提供了一臺業務服務器和一臺會話服務器,業務服務器來部署和處理業務相關的邏輯,而會話服務器則用來獨立處理與用戶會話(登錄註冊等)相關的邏輯,業務與會話的分離有助於中大型企業級客戶將來對小程序後臺進行擴展。

但隨着微信在四月份開放個人註冊微信小程序,而小程序的開發者多爲前端以及終端開發人員,往往對很多非業務性的邏輯、代碼調試不便、運維以及擴容等服務端知識有所欠缺,Wafer1 架構複雜、開發者上手成本高、代碼調試不便等問題隨之浮現。

針對 Wafer1 的問題,騰訊雲提出解決方案 Wafer2 供個人開發者使用。從 Wafer 1 到 Wafer 2 ,爲了兼顧安全性和便利性,Wafer 2 把會話服務器和業務服務器做了合併。不僅如此,用戶還可以自行購買服務器,但無需做服務器端的配置,並實現自動簽發和部署 SSL 證書,區分了開發和生產環境,實現開發、線上分離,並把 Wafer2 解決方案集成進微信開發者工具之中。

隨着微信小程序版本的不斷迭代及更新,小程序開發的門檻也越來越低,但真正釋放開發者雙手,把小程序與雲端能力相結合,實現快速且低成本的開發,纔是小程序開發所追求的目標。2018 年 7 月 10 日的微信公開課第七季上,微信小程序團隊預告了小程序·雲開發的到來。

現在:微信小程序開發新模式

即便 Wafer2 再次降低了小程序開發的門檻,但自小程序誕生以來,業界關注小程序前端的技術演進較多,前端開發效率大大提高,而開發者卻一直面臨着以下後端瓶頸:

  • 第一,看似簡單的用戶界面背後有複雜的後臺邏輯,需要調用各種微信平臺的接口,開發難度大;
  • 第二、人力成本,一個小程序開發團隊至少前端、後端、運維的人力,同時涉及各人力的溝通協作;
  • 第三、安全、性能優化等對於小團隊來講都是很高的門檻,並且由於微信社交傳播的放大作用,很多小程序訪問量會突然猛增,極容易導致服務崩潰。

爲此,通過對 Wafer1 和 Wafer2 中的授權流程以及相關配置的不斷優化,2018 年 9 月,小程序·雲開發正式上線。

小程序·雲開發是微信和騰訊雲聯合研發的原生 Serverless 雲服務。一般來說, Serverless 包括了 Backend as a Service 和 Func as a Service,而云開發則結合微信提供的各種能力,實現了免登陸鑑權,以及無縫地調用微信開放的 API。通過簡化複雜的後端和運維操作,讓即便不具備一定後端知識的開發者,也能高效開發出一款高質量的小程序。

雲開發系統主要分爲三部分:終端層、接入層和資源層。

  • 終端層:爲開發者工具提供了完善的開發、測試和運營能力,可以滿足大部分開發者的需求。而 HTTP API 則提供了小程序外訪問雲開發資源的能力,使用 HTTP API 開發者可在已有服務器上訪問雲資源,實現與雲開發的互通;
  • 接入層:雲開發請求都經過微信後臺,由微信來保障通信安全、提供身份鑑權;
  • 資源層:由騰訊雲來提供函數服務和後臺服務,以及保障雲資源數據安全。

如下圖所示,可以看到雲開發系統架構涉及到微信、騰訊雲和開發者三方,但騰訊雲在底層打通了微信自研網絡和雲網絡,以及開發者在騰訊雲上已有的服務,在這個基礎上構建了一體化的雲端網絡,開發者可以方便的將雲開發結合到已有的服務裏。

爲了保障雲開發後臺架構以及穩定性,雲開發設計了容災架構。小程序·雲開發後臺服務採用多 IDC 多園區部署,做到了跨園區的容災,每個園區都冗餘一定的服務能力,當某個園區發生故障時,請求會自動路由到另外的兩個園區,由另外兩個園區繼續提供服務,不會對業務產生影響。

而在網絡層面,微信對用戶採取就近接入原則,提高了接入質量。在這個基礎上,藉助 newDNS 實現精細和實時的引導,通過識別用戶客戶端版本、網絡環境等數據,下發 IP 列表,引導用戶接入到最合適的接入點,進一步提高用戶的接入質量。

在安全性方面,雲開發通過全鏈路的票據系統來保障整個請求鏈路的安全。如下圖所示,首先是用戶請求從微信客戶端到微信後臺服務這部分,雲開發請求借助了微信底層的私有協議 mmtls 和微信後臺服務進行通信,當業務層數據加上 mmtls 後,即可做到防竊聽、防篡改、防重放、防僞裝等安全措施。

而當微信後臺收到雲開發請求後,會先校驗用戶的身份,並通過全程票據來保障數據的安全性。具體是如何保障的呢?用戶登錄後,後臺會下發一個票據給客戶端,客戶端每次請求均會帶上票據。在後臺服務的整個處理鏈條中,所有對核心數據服務的訪問,都會被校驗票據是否合法,如若爲非法請求則會被拒絕,以此保障用戶隱私數據,只能通過用戶的客戶端發起的操作來進行訪問。

由於雲開放的整個鏈路都是經過鑑權的,雲開發在執行雲函數時,後臺會自動校驗請求票據,開發者可以無縫的使用微信的開放能力,無需再通過常規的 OAuth 授權並自行維護 AccessToken。而“小程序·雲開發”對數據訪問鏈路做的專門優化,也促使小程序更快的數據加載速度。

此外,對於小程序開發者普遍關心的性能問題,微信小程序團隊相關負責人也在小程序·雲開發技術峯會上進行了深入解讀。以雲函數爲例,執行雲函數需要經過創建容器、下載代碼、部署執行三個部分。由於容器的啓動是一個很費時的操作,所以通過函數實例複用、容器實例預創建,熱點代碼緩存等優化,將雲函數容器的啓動時間從秒級變成了毫秒級。而在容器冷啓動的過程中,開發者可以做代碼精簡(縮短下載時間)、資源複用(縮短執行時間)、公共剝離(增加緩存效果)、保持活躍(避免資源回收)等工作。

同時,爲了提高雲函數的性能,雲開發也在通信、業務和網絡層做了一些優化。在通信層,改造私有協議,優化長連複用;在業務層,分不同段請求,優化內部調用鏈路;在網絡層,壓縮系統間網絡開銷,從純異步的方式改造成多段同步的方式。

正因如此,自今年以來雲函數請求性能已經提升了 60%。據瞭解,小程序端一次雲函數的請求,在測試環境中也已降到 140 毫秒,其中的相關優化也將在下一個微信版本中進行發佈。

未來:小程序·雲開發還在路上

作爲一種全新的小程序 Serverless 開發模式,在小程序·雲開發技術峯會現場,開發者最爲期待的雲開發最新技術能力與下一步規劃,也一一揭曉。

已上線 - 微信訂閱消息能力

近日,微信在小程序模塊消息能力方面公佈了一項重大調整。除了支持免 access_token 發送訂閱消息外,小程序·雲開發還新增了可在定時觸發器中使用訂閱消息的接口(以及其他微信開放接口)。

訂閱消息是開發者在微信內給用戶提供消息觸達的一個非常重要的手段,開發者可以通過雲開發的接口,把業務工具放入訂閱消息的功能中,但是由於該功能開發相對複雜,需要開發者做模板管理、訂閱管理和消息下發等。

但就在小程序·雲開發技術峯會上,微信小程序團隊宣佈,目前已經對訂閱消息做了整合,在小程序·雲開發平臺,開發者只需要通過簡單的幾個雲函數就可以實現訂閱消息功能,並可藉助定時觸發器實現長期訂閱消息的定時推送。

已實現 - Web 端與小程序端的跨端應用

當小程序面對內容非常多、用戶量非常大的情況時,開發者面臨的壓力可能不僅僅是需要依賴小程序·雲開發去進行小程序開發,而是在龐大用戶量的壓力之下,開發者該如何多端化處理運營內容的管理問題。

基於小程序·雲開發套件提供的 Web 端 SDK —— CloudBase JS SDK,前端工程師可以快速創建 Web 應用去連接雲開發,也就說開發者的開發能力不僅僅是僅限於小程序,還可以基於這一套內容去做更多端的嘗試。

舉一個簡單的例子。當面對大型內容管理時,若想打造一個 Web 的應用連接小程序,最方便的方法是在 Web 微信開放平臺創建一個 Web 應用,在上面配置想要打造的 Web 端的安全地址,並在上面創建對應的前端開發功能。當打通了 Web 端之後,還可以利用雲開發提供的數據庫實時數據推送能力,在小程序中產生一些有趣的彈幕內容,並直接推送到頁面進行 Web 端聯動。

待上線 - 微信支付能力

實際上,由於涉及到用戶資金安全以及業務的穩定性,微信支付勢必需要非常嚴密且健全的邏輯,其接口的複雜度也會非常高。目前開發者是沒有辦法自己開發微信支付,但微信小程序團隊在小程序·雲開發技術峯會上表示,微信支付能力正在快速開發中,後續很快將會與大家見面。

待發布 - CDN 優化

接下來雲開發會發布一系列 CDN 優化,包括 QUIC 協議和 TPG 格式。QUIC 是新的應用層協議,耗時比 HTTP2 減少 15%,在網絡比較差的情況下能夠減少 20% 的耗時。而 TPG 協議是微信自研的一個圖片格式,能使文件大小減少 40%,下載速度更快。

將支持 - SQL 結構化查詢語言

小程序·雲開發技術峯會上,騰訊雲團隊表示:“其實既然我們已經支持 NoSQL,下面我們有沒有可能支持 MySQL 呢?答案是肯定的。“

此外,騰訊雲副總裁劉穎在會中表示,下一步,雲開發的重點將是面向企業場景服務。而云開發也不只是後端服務,從小程序延展到多端,未來雲開發將作爲一個真正的基礎設施,爲微信生態開發的創造更多可能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章