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