雲上、前端、架構、工具……這份小程序開發指南請查收
微信小程序是一個低門檻、流量巨大、公平競爭的優質營銷平台,這些特性滿足了商家對於產品營銷的基本渴求,隨著小程序用戶的逐漸積累和沉澱,微信小程序的盈利風口已經開啟,在 2018年,也將迎來它的最佳紅利期。那麼,對於開發者而言,如何敏捷、低成本的開發一款火爆小程序?
1
雲端:騰訊雲微信小程序解決方案
微信小程序自發布以來,微信平台上已經出現了不少現象級小程序和小遊戲,這些火爆小遊戲的背後,離不開微信小程序的雲端解決方案,為「跳一跳」這類小遊戲的雲上部署、網路架構和安全系統提供強有力的技術支撐。
來自騰訊雲的微信小程序解決方案負責人黃榮奎,從小程序的核心架構、開發者工具方案和微信小程序的雲上實踐等方案,詳細講解了小程序開發過程中的常見問題,以及小程序快速開發和部署實踐,為開發者提供了一些小程序敏捷開發的思路方法。
小程序核心架構分析
小程序的實現原理
小程序是一種新的開放能力,開發者可以快速地開發一個小程序。小程序可以在微信內被便捷地獲取和傳播,同時具有出色的使用體驗。那麼,小程序是如何實現的呢?
首先來看一下小程序的實現核心架構,如下圖,第一層是小程序的渲染層,即 Webviews,主要負責;第二層是邏輯層,主要是通過業務邏輯實現登錄功能和支付功能;第三層可以理解為微信原生的能力,微信將很多的豐富的原生客戶端以及網路、儲存、登錄、組件和硬體等能力提供到了給了開發者,存儲包括文件的讀寫、音視頻的讀寫等,組件即開發常用的組件,包括音視頻的錄製,還有攝象頭,還有拍照、掃碼等等。
Publish:Service 發送數據給 View(組建內部使用)
Subscribe:Service 監聽 View 事件(點擊事件等)
Invoke:Service 和 View 觸發 Native 層(調用 wx.api)
On:Service 和 View 訂閱 Native 層事件(監聽系統事件)
開發者工具方案介紹
因為企業級和個人開發者小程序的訴求不同,騰訊云為了滿足多方需求,分別定製了基於企業級的 IaaS 能力的解決方案 Wafer1和針對個人開發者的快速、方便、低門檻的解決方案 Wafer2。
Wafer1提供了一台業務伺服器和一台會話伺服器,業務伺服器來部署和處理業務相關的邏輯,而會話伺服器則用來獨立處理與用戶會話(登錄註冊等)相關的邏輯,業務與會話的分離有助於用戶將來對小程序後台進行擴展,這樣就解決了伺服器部署的問題。
使用 Wafer1,用戶需要獨立使用 FTP 等傳輸工具將代碼傳輸到伺服器上,並通過 SSH 命令行的形式部署代碼,這需要用戶有著 Linux 乃至運維等知識,門檻較高。Wafer 團隊在內部分析這個問題之後,拋棄了原先直接將伺服器所有權交給用戶的方式,由騰訊雲統一部署和託管伺服器,基於伺服器封裝多種語言運行環境(目前支持 Node.js 和 PHP),將運行環境的使用許可權交給用戶,通過微信開發者工具,可以將後端代碼一鍵上傳、部署到環境中,Node.js 版本還可以遠程調試代碼,大大提升了用戶開發效率,並且降低了開發和使用的門檻。
Wafer2 更加註重為個人開發者提供一種快速、方便、低門檻的解決方案。騰訊雲將原來的業務伺服器和會話伺服器合併,提供開發環境和生產環境,開發環境和生產環境配置一樣,用於快速開發測試,生產環境用於部署提供線上服務的代碼。除此之外,騰訊雲還與微信小程序團隊合作,將 Wafer2 集成近微信開發者工具之中。
小程序雲上實踐
除了 IaaS 能力的解決方案 wafer ,騰訊雲還提供了快速通信介面、登錄、語音識別等多種能力,用以滿足用戶在小程序開發過程中的各項功能需求。在這些基礎功能之上,騰訊雲開發了聊天室和圖像識別兩大解決方案。
聊天室主要結合騰訊雲的 Websocket服務,利用信道通信技術,實現小程序與伺服器之間的信息互動和傳輸。如小程序在登錄時會向伺服器獲取地址,騰訊雲 PaaS級信道通信技術可以使當前的用戶直接跟當時的伺服器直接連接,而不再需要跟業務伺服器進行連接。
這樣做的好處是可以讓開發者在開發的時候不需要更多的關注 Websocket的實現,避免 WebSocket帶來的性能消耗。
同時騰訊雲基於萬象優圖技術提供了圖片識別的 API,可用於包括身份證識別、活體校驗等領域,由於篇幅有限,本文不在此一一詳述,感性趣的同學可以進入騰訊雲官網了解詳情。
2
前端:如何在小程序上增加音視頻功能
音視頻能力一直以來都是小程序上的一個短板,2017年 Q4,騰訊視頻雲終端團隊與微信團隊通力合作,將騰訊視頻雲的技術積累以 SDK的形式落地到了微信版本上,從而為小程序增加了直播和實時音視頻能力。騰訊視頻雲終端技術負責人常青從原理剖析、技術演化、WebRTC和快速上手角度詳細講述了如何在小程序上增加音視頻功能。
原理剖析
下面是微信小程序內嵌的音視頻組件,上層為小程序代碼層,中間是小程序的基礎庫,最下層為音視頻組件,其中,這裡面的 SDK由兩部分組成的:一個是音視頻上行,音視頻下行。
上行解決主要解決音視頻的採集、處理、編碼和網路幾個問題,其實現過程為首先將本地的畫面和聲音經過採集然後進行預處理,如圖片的美顏,音頻的降噪等,然後進行編碼,這部分主要試進行數據壓縮,最後通過網路模塊上傳到雲端。
下行與上行對應,即將原來在雲端的音視頻數據通過網路傳輸、解碼等操作進行播放,在音視頻下行的過程中,視頻或聲音播放的速度直接取決於網路的時速,為了保證播放效果,需要在解碼之前,對數據進行緩衝,這樣,即使網路環境較差的情況下,也能在一定程度上保證播放順暢。
技術演進
微信小程序剛開始嵌入音視頻的能力時,很多技術點都無法實現,騰訊視頻雲團隊和微信團隊通力合作,通過長達半年的打磨和更新迭代,逐漸為小程序增加了一系列在線音視頻能力。
在線直播:對在線直播而言,最核心的關鍵點就是解決高並發的問題,騰訊雲首先 UPLOAD上傳數據,然後再將信號進行數字處理,對聲音進行相應的清洗整合,最後通過放大器將信號逐級放大,讓每一個地區的音視頻接收端都能在就近的機房裡面拉到高質量的音視頻流,這樣可以解決音視頻卡頓和流暢性問題。
遠程調控:以去年比較火熱的在線抓娃娃機遊戲為例,因為抓娃娃遊戲對延遲要求非常苛刻,因此在解決方案上,需要構建和實現超低延時的實時音視頻鏈路,這種鏈路能讓操作者在很短的時間內看到遠程設備的視頻影像,保證娃娃機的可操控性。
雙向通話:在小程序上實現了超低延時鏈路之後,騰訊視頻雲團隊又將回聲抑制、雜訊消除、自動增益、丟包恢復等一系列高門檻的聲學技術整合到小程序音視頻解決方案中。使得雙向音視頻通話既可以在技術上對開發者完全透明,又能在效果上匹配現實生活場景中的各種應用(比如遠程定損,遠程客服,遠程理療,遠程開戶等等)。這其中最核心的部分,就是騰訊音視頻實驗室「天籟「聲學引擎的技術支持。
多人通話:雙人通話的時候是單對單的傳輸,但是在多人通話狀態時,信息是多對多的傳輸,這個時候需要一個總控系統,去協調不同端的狀態,協調各個端的輸出,包括什麼時間點誰說話,誰不能說話。騰訊視頻雲團隊,基於小程序自定義組件的設計標準,實現了一套被稱作 RTCRoom的解決方案,用於對視頻房間進行狀態同步和統一管理。
整個技術演進路線走下來,從簡單的直播到 DNS再到雙向通話再到多人通信,基於小程序的音視頻的場景基本上都可以涵蓋了。
快速上手
騰訊雲在這一塊提供了完整的雲端解決方案,用戶可以直接根據自身需要登錄騰訊雲後台,空桶騰訊雲服務就可以直接下載部署,整個操作步驟如下:
step1:授權登錄騰訊雲;
step2:開通表前使用許可權;
step3:開通騰訊雲服務;
step4:安裝小程序開發工具;
step5:下載並部署 Demo;
3
底層:微信小遊戲架構設計
小遊戲自發布以來,微信平台上已經出現了不少現象級遊戲,包括《跳一跳》、《保衛蘿蔔》等。通常,一般人會將小遊戲歸屬為小程序的一個子類。但在技術實現上,微信小遊戲和小程序的底層架構、實現原理有著天壤之別,源於遊戲需要的多用戶深度參與,因此小遊戲最大的特點是去中心化分發以及好友關係鏈的傳播。
微信小遊戲的這兩大特點也對架構設計提出了特別的要求:第一是全區全服的需求,為了充分利用微信的社交網路,往往要求遊戲是全區全服的(單機遊戲除外);第二就是在線擴縮容的需求,因為任何一款遊戲都可能成為爆款,在微信上可能有幾何式的增長,訪問量變化無法預測,所以在線擴縮容成為小遊戲架構的剛需。
某開發商的小遊戲上線後很短時間內在線人數從幾萬漲到了 200萬左右,因為系統架構設計的時候存在性能瓶頸(緩存使用的是單實例 redis,資料庫也是單庫),在擴容時遇到了比較大的問題,通過對程序進行重構和使用集群版的資料庫,最終解決了問題,但是由於耽誤了較多時間,造成了損失,在線人數出現了比較大下滑。所以希望小遊戲的架構夠輕、夠「小」,但是重點問題還是需要在架構設計時前考慮。
計算層架構設計
無狀態化的分層架構
先來看下圖(左)的無狀態化分層架構,架構圖如下圖所示,簡單說就是按照服務調用關係對節點進行分層,層和層之間由 LB(負載均衡)進行銜接,LB下的節點可以靈活的進行伸縮,這個架構其實就是常用的 web架構,應對一般的休閑類遊戲也是夠用的。
右圖是無狀態化分層架構在騰訊雲上的一個最佳實踐,客戶端通過 CLB擴展平衡接入到後台服務,通過 BGP高防對遊戲進行 DDoS防護,當出現攻擊流量的時候,高防服務可以對流量進行清洗然後回注到系統中。騰訊雲用不同的彈性伸縮組來承載不同的服務,服務之間的調用通過內網負載均衡進行銜接以方便實現動態擴縮容。這其中使用了一些騰訊雲的服務:
第一個是高性能的負載均衡 CLB:
單集群提供超過 1.2 億 的最大連接數,用以應對億級訪問量;
單集群可處理峰值 40Gb/s 的流量,每秒處理包量(PPS)可達 600 萬;
對每個租戶的流量進行嚴格隔離,提供主動 DDoS 防護能力。當遭遇 DDoS 攻擊時,騰訊雲負載均衡能免費提供 2~10 Gb DDoS 攻擊峰值流量的防禦能力。
第二個為騰訊雲彈性伸縮服務 AS,彈性伸縮服務可以在不同時機對集群的節點數量進行伸縮,支持的策略包括定時擴縮容策略、基於監控告警的策略、手動擴縮容策略等。擴容速度方面,在騰訊雲上創建 1000台雲主機的平均耗時是 63秒。藉助彈性伸縮服務以及騰訊雲的基礎能力,可以很方便地對服務進行快速動態的擴縮容。
第三個是 BGP高防服務,當前安全形勢不容樂觀,攻擊流量唾手可得,在必要的時候可以通過 BGP高防服務對小遊戲進行保護,它的特點是平台擁有 T級的防護帶寬,提供基於 AI的精準識別演算法,以及業界最全的 BGP網路,在提供防護的同時可以最大程度保障網路覆蓋質量。
無狀態化分層架構的優點是可靠性高、單節點故障不影響整體可用性、可靈活擴展和收縮,但是對於遊戲來說,存在兩個問題:1)節點的無狀態化要求處理每一個請求都要去存儲層讀寫數據,會導致存儲層壓力較大,硬體成本較高,以及不適用於實時性要求高的場景;2)同層節點之間不能直接發送請求、下層節點也不能向上發送請求,對於部分遊戲場景,需要通過共享數據和輪詢來解決,開發者來說並不方便,也會有實時性問題和性能損耗。
星型架構
為了解決上述問題,小遊戲團隊採用了星型架構,如下圖:
不同節點之間通過 router進行通信,router是實現節點間消息轉發的伺服器。比如說 A節點中的 Player1對象要向發送 B節點中的 Player2對象發送組隊邀請,可以將消息發送到 router,router再轉發到 B節點處理之後再發送到 Player2的客戶端。在這個結構中,所有的節點都是對等的關係,任何兩個節點通過 router都可以實現消息互通。但是這個圖有一個明顯的題:router是一個單點,有容錯性問題和可擴展性問題。對於容錯性問題,可以通過引入主備機制來解決,藉助 zookeeper可以實現主備的自動切換,當主節點不可用時,自動切換到備節點。
此外,可以通過 router將多個星型結構連接在一起,解決可擴展性問題,如下圖:
player1 在 set 1的節點 A上,player2 在 set 2的節點 B上,player 1向 player 2 發送組隊邀請時,消息可以通過 router1 轉發到 router2,最後到達 B節點,在 B節點中進行必要的判斷處理,最後通知到 player2的客戶端,這就要求 router保存所有對象的路由數據,類似下面這個表:
這裡,router做了以下事情:
一是收斂連接,簡化了內部通信的管理;
二是建立了通用的對象路由機制,簡化了遊戲的開發,遊戲開發人員不用關心服務和進程,只用關心對象就可以了。
三是可以通過 router進行負載均衡和廣播。
router具有通用性,可以作為通用的遊戲中間件。
基於這個架構,系統的擴展可以在兩個層面進行,一個是 set內的擴展,當大廳或者對戰節點不夠了時,可以動態添加,新節點會去 router上註冊自己,加入到系統中,當一個 set的承載能力達到上限時,可以繼續通過複製 set進行擴展,假設已經有了 set0和 set1,當需要添加 set2時,整個過是先部署 set2,當 router2起來時,router0和 router1會通過 zookeeper發現它,並建立到它的連接,連接建立後,router2會向 router1或 router0獲取全量對象路由信息,並且將自己上面初始化後產生的對象路由信息發送給 router0和 router1。
到這裡整個系統的通信拓撲就已經建立完成了,set2可以對外開放,player2登錄到 set2的大廳節點後,會向 router2發送自己的對象路由信息,router2會把這個信息同步給 router0和 router1。簡單說,是通過複製節點和複製 set進行擴展,反之可以進行收縮。
下圖就是擴展星型結構在騰訊雲上的一個實踐,對於實時性要求高的遊戲,比如坦克大戰這樣的遊戲,可以多點部署,讓玩家就近接入,華南的玩家接入到廣州的 VPC,華東的玩家接入到上海的 VPC,兩個 VPC內部分別部署了 set1和 set2,並且通過跨域對等連接打通,使得router1和 router2能夠建立內網連接,實現全區全服。
存儲層設計
小程序設計的目標是建立一個大存儲層以滿足全區全服和動態擴容的問題。其中最重要的問題是資料庫水平擴展的問題,自己做可以有三種方法實現:第一種基於增量區間的分片,它的優點是可以實現動態在線擴容,但是存在性能熱點的問題,因為新分片永遠是訪問量最大的分片,而老分片會隨著玩家流失出現性能閑置的情況;第二種方法是根據 ID的散列值將數據均勻分散到不同的分片,沒有性能熱點的問題,但是在對系統進行擴容時候,往往需要對數據進行搬遷,比較難以實現快速自動擴容;第三種方法就是將兩者結合,可以同時解決兩個問題,但是需要增加中間數據路由層,有研發負擔和性能損耗。
為了簡化存儲層的設計,現在比較廣泛使用的是騰訊雲的分散式資料庫產品 DCDB,它的原理是通過增加中間代理層,將一個邏輯表映射到到多個物理表,將分片的複雜性完全封裝在代理層。對業務層可以做到近乎透明。
DCDB支持新增分片擴容和現有分片擴容,擴容時系統會自動對數據進行搬遷並且切換相應的流量,對在線業務可以做到無感知,開發者只需要在控制台進行簡單的操作就可以實現自動擴容。
另一個能簡化存儲層設計的產品是騰訊的 TCaplus,TCaplus是騰訊自研的,專為遊戲設計的 NoSQL分散式資料庫,它的特點主要有三個:
一是支持 Protobuf介面訪問,介面友好,非常適合遊戲開發;
二是將 Cache與硬碟結合,冷熱數據自動換入換出,開發人員不用同時面對緩存資料庫和持久化資料庫;
三是存儲空間無上限,單表最大支持 50TB,支持不停服擴容,能很好地支持全區全服。
目前 TCaplus在騰訊內部得到了廣泛使用,包括王者榮耀、火影忍者、CF以及絕地求生手游等數百款遊戲,都以 TCaplus作為主資料庫。
4
LayaAir引擎是 Layabox推出的 HTML5開源引擎,不僅支持 AS3、TS、JS三種語言開發 HTML5遊戲,還可以同時發布為 Native APP遊戲和微信小遊戲,以及 QQ玩一玩遊戲。開發者可直接在 LayaAirIDE工具內快捷的開發產品和提交產品。Layabox 合伙人李明詳細分享了如何利用 LayaAir引擎與 LayaAirIDE工具一鍵發布微信小遊戲。
小遊戲創建前的準備工作
發布微信小遊戲之前需要做一些準備工作,包括環境配置、工具下載、創建賬號等。
第一:環境配置,即下載並安裝引擎的開發環境。LayaAir引擎的開發工具 LayaAirIDE、發布小遊戲的功能適配都在這個環境裡面實現;
第二:下載並安裝微信開發者工具;
第三:創建一個小程序的企業開發者帳號,獲得開發者 ID(AppID)。這裡,值得注意的是,個人開發者不需要版號,但是也不能開內購支付;對於企業開發者,如果版號沒辦完,也可以提供版號申辦回執。
H5引擎開發微信小遊戲的流程
H5引擎開發微信小遊戲主要包括創建、開發、發布、真機調試與上線發布等步驟,首先需要在 IDE裡面創建小遊戲示例項目,然後用 IDE內進行小遊戲的開發,開發完成後在 IDE內可直接發布小遊戲項目。小遊戲項目發布後,還需要在微信的開發者工具內導入 IDE發布的小遊戲項目,然後通過在微信開發者工具內的預覽和上傳功能,進行真機調試和上線發布。
在 IDE裡面創建小遊戲項目。這個比較簡單,打開新建項目按鈕即可看到創建界面,需要注意的是創建時一定要選擇微信小遊戲 2D示例或微信小遊戲 3D示例,否則不會創建微信開發者工具的工程文件,以及不會導入小遊戲適配庫。
IDE內進行小遊戲開發。在小遊戲開發過程中有一個很重要的關注點,是 4M本地包,這個本地包主要用於存放 JS文件與最基礎的預載入資源(整 個項目的 JS必須放在本地包),本地包超過 4M後,可遠程動態載入資源,通過 LayaAir引擎適配庫的本地包白名單功能,可以方便的管理本地資源與遠程資源的載入。另外,在小遊戲的緩存管理這一塊,LayaAir引擎適配庫提供自動緩存管理與手動緩存管理,常用資源小於 50M的小遊戲建議採用自動緩存管理,常用資源大於 50M的需要手動管理緩存。
IDE內發布小遊戲項目。項目開發完成後,可點擊發布按鈕,將 H5項目直接一鍵發布為小遊戲項目,因為微信小遊戲、QQ小遊戲都提供了標準的渲染介面,LayaAir引擎通過建立適配庫,對不同平台的介面與引擎 API進行對接,保障開發者一次開發就可以同時發布多平台。
微信開發工具中導入項目。打開微信開發者工具,創建一個小遊戲項目,創建時的目錄直接指向發布後的小遊戲項目即可。
微信小遊戲的調試。微信小遊戲的調試包括常規開發調試和真機調試兩個部分,常規開發調試只需開發時在 IDE或 chrome下調試即可(小遊戲工具內也是基於 chrome),真機調試要求本地包必須小於 4M,微信的真機調試環境較為簡單,調試主要靠 log輸出。
小遊戲上線發布。微信小遊戲調試結束後,如果打算上線,直接在微信開發者工具內點擊上傳,即可將小遊戲版本提交到微信開發者平台中,在平台中提交相關資料,審核通過後,可上線。
以上,就是用 LayaAir引擎一鍵發布小遊戲的完整流程。據悉,Layabox還將與騰訊雲聯手優化小遊戲發布與開發流程,未來 LayaAirIDE中將集成一鍵上傳微信小遊戲的動態載入包到騰訊雲,避免人工拆分目錄 、打開伺服器傳輸工具等繁瑣流程,同時,用戶還可以將 LayaAirIDE中的帳號與騰訊雲關聯綁定,通過 IDE快速購買騰訊雲的伺服器。
5
實踐:如何利用小程序技術解決企業銷售難題
小程序時代,不僅需要懂開發,還要你善運營,一個擁有多功能和高性能的小程序,需要配合完備的運營手段,才能發揮最大的價值。加推科技聯合創始人劉翌,分享典型企業營銷場景痛點解析,以及加推如何結合小程序解決企業銷售難題。
企業營銷痛點解析
在講解企業營銷痛點之前,劉翌分析了企業營銷的三大剛需,即收入、銷售和銷售管理,這裡面,後兩點直接影響了企業收入,那麼,企業如何做銷售和銷售管理呢?下圖是是一個中國 8000萬名銷售員的痛點的總結,可以大部分企業都會面臨以下四大類的痛點:
首先獲客難度大,獲客成本非常高。舉個例子,大家經常會碰到房產中介,每一天可能要打 300個電話,每個通話假設只有 30秒,核算下來也有 150分鐘,但一般電話銷售的最終轉化都非常低;
另外觸達率很低:假設在人員密集的展會上,一個銷售遞出去 500張名片,這其中,可能有 480張名片將會被拋棄,獲客觸達難,所以成交率就低;
銷售流動性高:在所有職業裡面,銷售的流動性絕對是排前的,而一旦銷售離職,很多該銷售手上的客戶就會被帶走,最終造成客戶流失;
成交率低:不管是電話營銷、現場交流還是名片傳遞,這些方式的成交率都非常低,可能 2000個電話裡面才會觸達 1個客戶,10場展會只有 1個實現轉化。
加推微信智能營銷解決方案
不管是微信公眾號、微商城、企業官網還是小程序,在企業初期階段,沒有推流和運營的情況下,獲客率一般都不高;即便獲的銷售線索,由於缺乏可視化、智能化篩選工具,營銷人員只能一對一聯繫跟蹤,無法系統管理客戶,工作效率較低。
那麼,有沒有一種通用的方法和工具,能夠打通企業、微信、小程序等不同渠道,將推廣、運營、銷售轉化形成有效的閉環?基於這種思路,加推結合微信小程序,從 SaaS小程序接入,開發了全球首款 B2S2C微信智能銷售系統。通過 AI名片、AI雷達等解決方案實現微信小程序 10億用戶的觸達與轉化。
AI名片:智能生成個人小程序名片,用戶只需掃一掃銷售小程序碼,即可添加名片,添加成功的用戶可以隨時查看銷售個人信息,包括個人聯繫方式、公司職位、功能產品等,信息可根據需要自主設置;
AI銷售雷達:在小程序添加朋友之後,AI銷售雷達通過智能「客戶捕手」和客戶管理等功能,實時追蹤客戶行為軌跡,隨時隨地掌控客戶真實需求,及時跟進,同時客戶管理功能通過客戶畫像分析,標籤化分類用戶,篩選精準用戶;
BOSS雷達:BOSS雷達通過可視化員工分析系統,將員工拜訪執行過程同步到 BOSS系統,沉澱准客戶資源,同時,員工客戶數據自動保存雲端,即使離職,所有數據都能保證全程可追溯。
※可視化了解一下?ECharts 4.0最全技術攻略
※聚焦上海:千錘百鍊出神器,高可用架構實戰案例
TAG:InfoQ |