淺談小程序開源業務架構建設之路
一、業務介紹 1.1 小程(cheng)序開源(yuan)整體介紹
百(bai)度(du)(du)從(cong)做智能小程(cheng)序(xu)的(de)(de)(de)第一天開(kai)始就(jiu)打(da)造真正開(kai)源(yuan)開(kai)放的(de)(de)(de)生(sheng)態(tai),我們的(de)(de)(de)愿(yuan)景(jing)是:定(ding)義移(yi)動時(shi)代(dai)最佳體(ti)(ti)驗,建(jian)設智能小程(cheng)序(xu)行(xing)(xing)業(ye)標準,打(da)破孤島,共(gong)建(jian)開(kai)源(yuan)、開(kai)放、繁榮的(de)(de)(de)小程(cheng)序(xu)行(xing)(xing)業(ye)生(sheng)態(tai)。百(bai)度(du)(du)智能小程(cheng)序(xu)的(de)(de)(de)生(sheng)態(tai)玩家有三類,分(fen)別是:聯盟合作伙(huo)(huo)(huo)(huo)伴(ban)、開(kai)發(fa)(fa)(fa)者(zhe)(zhe)和用戶(hu)。對于(yu)(yu)聯盟合作伙(huo)(huo)(huo)(huo)伴(ban),滿足(zu)合作伙(huo)(huo)(huo)(huo)伴(ban)的(de)(de)(de)生(sheng)態(tai)共(gong)建(jian)、流量共(gong)享、商業(ye)共(gong)贏(ying)訴求,使得合作伙(huo)(huo)(huo)(huo)伴(ban)App內缺失場景(jing)得到(dao)高(gao)效(xiao)補充,拉動合作伙(huo)(huo)(huo)(huo)伴(ban)App用戶(hu)使用時(shi)長,共(gong)享小程(cheng)序(xu)的(de)(de)(de)變現收(shou)入。對于(yu)(yu)開(kai)發(fa)(fa)(fa)者(zhe)(zhe),滿足(zu)了開(kai)發(fa)(fa)(fa)者(zhe)(zhe)一次開(kai)發(fa)(fa)(fa),多端運行(xing)(xing)訴求,使得開(kai)發(fa)(fa)(fa)者(zhe)(zhe)流量獲取更加(jia)(jia)便捷(jie)高(gao)效(xiao)、并且(qie)增加(jia)(jia)開(kai)發(fa)(fa)(fa)者(zhe)(zhe)商業(ye)收(shou)入。對于(yu)(yu)用戶(hu),滿足(zu)用戶(hu)的(de)(de)(de)無需跳出即可享受一站式服務訴求。百(bai)度(du)(du)搜索(suo)做為小程(cheng)序(xu)的(de)(de)(de)十分(fen)重要分(fen)發(fa)(fa)(fa)入口,通過構建(jian)統(tong)一的(de)(de)(de)小程(cheng)序(xu)行(xing)(xing)業(ye)生(sheng)態(tai), 提升百(bai)度(du)(du)的(de)(de)(de)搜索(suo)生(sheng)態(tai)中的(de)(de)(de)用戶(hu)體(ti)(ti)驗、服務閉環。
百度智能小程序開源(yuan)的架構是如何支(zhi)撐起整個聯盟生態運轉的呢?
如圖所示,小程序開源聯(lian)盟的整個業務(wu)(wu)架(jia)構分(fen)位四層(ceng)(ceng)。包括(kuo):聯(lian)盟宿主層(ceng)(ceng)、對外聯(lian)盟賦能層(ceng)(ceng)、中間服(fu)務(wu)(wu)層(ceng)(ceng)、基礎建設層(ceng)(ceng)。
1.2 小程序開(kai)源與(yu)廠商合作介紹
隨著百(bai)(bai)度小(xiao)程(cheng)序(xu)(xu)(xu)開(kai)(kai)源(yuan)聯盟的(de)(de)(de)不斷(duan)發展(zhan),也(ye)吸(xi)引了(le)頭部(bu)手機(ji)廠(chang)(chang)商(shang)(shang)(shang)。小(xiao)程(cheng)序(xu)(xu)(xu)開(kai)(kai)源(yuan)與廠(chang)(chang)商(shang)(shang)(shang)共建(jian)(jian)了(le)豐富的(de)(de)(de)業務場(chang)景,不僅包(bao)含(han)廠(chang)(chang)商(shang)(shang)(shang)的(de)(de)(de)瀏覽器(qi)場(chang)景,還(huan)有桌面鎖屏、負一屏、全局搜等(deng)多種場(chang)景。如此多樣化的(de)(de)(de)場(chang)景建(jian)(jian)設(she)中(zhong),我們面臨的(de)(de)(de)共性挑戰(zhan)是:如何(he)保障廠(chang)(chang)商(shang)(shang)(shang)線上分發質量、如何(he)建(jian)(jian)設(she)一條從(cong)廠(chang)(chang)商(shang)(shang)(shang)瀏覽器(qi)到百(bai)(bai)度搜索(suo)到小(xiao)程(cheng)序(xu)(xu)(xu)的(de)(de)(de)全流程(cheng)分發管控通路,從(cong)而可以精準、實(shi)時(shi)的(de)(de)(de)管控廠(chang)(chang)商(shang)(shang)(shang)瀏覽器(qi)的(de)(de)(de)小(xiao)程(cheng)序(xu)(xu)(xu)分發。
具(ju)體我們是如何考(kao)慮并建設的呢(ni)?下面將詳細介紹下。
二、整體技(ji)術建設思路介紹 2.1小程(cheng)序開源分(fen)發保(bao)障技(ji)術要(yao)點(dian)
1.背景介紹
開(kai)源保障核心圍繞的對象為(wei)宿主(zhu)與小程(cheng)序,核心目(mu)的是為(wei)了保障小程(cheng)序在(zai)宿主(zhu)上(shang)的分發質量(liang)。
為(wei)什(shen)么會(hui)存在(zai)(zai)(zai)分發(fa)質量問題(ti)?宿(su)主(zhu)在(zai)(zai)(zai)入駐開(kai)源(yuan)(yuan)后(hou)需要(yao)集(ji)成(cheng)開(kai)源(yuan)(yuan)SDK并進行相關能(neng)(neng)(neng)力(li)的開(kai)發(fa),在(zai)(zai)(zai)這些流程完成(cheng)后(hou)宿(su)主(zhu)就獲得了相應的宿(su)主(zhu)能(neng)(neng)(neng)力(li)。小程序是基(ji)于swanjs開(kai)發(fa)框架進行的開(kai)發(fa),swanjs這套(tao)運行時框架底層同樣是依(yi)賴開(kai)源(yuan)(yuan)SDK運行,因(yin)此在(zai)(zai)(zai)小程序完成(cheng)開(kai)發(fa)后(hou)小程序本身也獲得或(huo)依(yi)賴了相關能(neng)(neng)(neng)力(li)。因(yin)為(wei)不同的宿(su)主(zhu)能(neng)(neng)(neng)力(li)支持(chi)情況(kuang)不同,就會(hui)導致(zhi)(zhi)同一個小程序在(zai)(zai)(zai)不同宿(su)主(zhu)上分發(fa)時可能(neng)(neng)(neng)遇到某個宿(su)主(zhu)不支持(chi)小程序使用(yong)到的某個能(neng)(neng)(neng)力(li),進而導致(zhi)(zhi)該小程序無(wu)法(fa)在(zai)(zai)(zai)宿(su)主(zhu)上正常打開(kai)或(huo)者降級(ji)為(wei)H5打開(kai),導致(zhi)(zhi)用(yong)戶體驗受損。
因此需要(yao)有一套開(kai)源保(bao)障方(fang)案來提前(qian)發現宿主(zhu)與(yu)小程(cheng)序之間能(neng)力不匹配情況,進而(er)確(que)保(bao)系統能(neng)夠自由管控小程(cheng)序在(zai)宿主(zhu)上分發全過程(cheng)。
2.技術要點
要實現小程序在宿主上分發通路建設,核心涉及端流程打(da)通、能(neng)力與定級(ji)流(liu)(liu)打(da)通及最終(zhong)分發流(liu)(liu)打(da)通三大板塊,如下(xia)圖所(suo)示:
1)端流(liu)(liu)程(cheng)包含宿(su)主端流(liu)(liu)程(cheng)和小(xiao)程(cheng)序端流(liu)(liu)程(cheng)打通
a、宿主端流程:
宿(su)主入駐開源,入駐成功(gong)后宿(su)主需(xu)(xu)要(yao)集(ji)成開源SDK與開發,宿(su)主開發完(wan)成后即可(ke)打包發布宿(su)主App;同時(shi)宿(su)主包在發布前(qian)需(xu)(xu)要(yao)經過(guo)宿(su)主能(neng)力(li)(li)測試(shi),通過(guo)下載宿(su)主工(gong)具進行CTS能(neng)力(li)(li)測試(shi)并產出宿(su)主能(neng)力(li)(li)支持情況。
b、小程序端流程:
開發者進行小程序開發,開發完成后操作小程序包版本發布上線,之后小程序開源保障模塊會訂閱小程序發版動作,同時拉取小程序包信息執行小程序能力掃描測試(shi),并產(chan)出小程序能力使用情(qing)況。
2)能力與定級流
在宿(su)(su)主(zhu)(zhu)(zhu)與小程序分(fen)別完成(cheng)接入與能(neng)力(li)(li)掃描后(hou),開(kai)源保障系統就可以(yi)(yi)分(fen)別基于宿(su)(su)主(zhu)(zhu)(zhu)與小程序能(neng)力(li)(li)掃描結果(guo)進行解(jie)析,產出(chu)最終的宿(su)(su)主(zhu)(zhu)(zhu)和(he)小程序能(neng)力(li)(li)使用情況并存儲。同時開(kai)源保障系統可以(yi)(yi)基于宿(su)(su)主(zhu)(zhu)(zhu)能(neng)力(li)(li)與小程序能(neng)力(li)(li)分(fen)別對宿(su)(su)主(zhu)(zhu)(zhu)和(he)小程序進行能(neng)力(li)(li)定(ding)級(ji)(ji),計(ji)算出(chu)宿(su)(su)主(zhu)(zhu)(zhu)與小程序當前能(neng)達到哪個等級(ji)(ji),并給宿(su)(su)主(zhu)(zhu)(zhu)和(he)小程序分(fen)別打上(shang)等級(ji)(ji)標識。
3)分發流
主要由(you)小(xiao)程序(xu)分(fen)發(fa)端實現(xian),主要根(gen)據用(yong)戶在開源(yuan)保障系(xi)統中配置的分(fen)發(fa)策(ce)略(lve),基于策(ce)略(lve)計算小(xiao)程序(xu)是(shi)否滿(man)足(zu)在宿主上分(fen)發(fa)條(tiao)件。
3.名詞解釋
SWANJS:小程序前(qian)端運行時框架。
能(neng)(neng)力:能(neng)(neng)力指的(de)是小程序(xu)開源(yuan)(yuan)系(xi)(xi)統中,對(dui)百(bai)度APP或者說(shuo)開源(yuan)(yuan)SDK中所封裝并支(zhi)(zhi)持的(de)各種(zhong)API、組件、框架等系(xi)(xi)統能(neng)(neng)力的(de)統稱,詳細(xi)可參(can)考小程序(xu)開發者文檔(dang)進行了(le)解,目前小程序(xu)開源(yuan)(yuan)共支(zhi)(zhi)持的(de)能(neng)(neng)力有1000多個。
CTS測試:CTS即Compatibility Test Suite, 兼容(rong)性測試套件;是(shi)為了保障智(zhi)能小程序在宿主(zhu)APP穩定運行,提供了一(yi)套兼容(rong)性測試集合,宿主(zhu)APP上(shang)線前,需先通過CTS測試。
AST掃描(miao):抽象語法樹(Abstract Syntax Tree)掃描(miao),是小(xiao)程序應用(yong)的一種源碼掃描(miao)工具(ju),通過抽象語法樹的方式對小(xiao)程序源碼進行掃描(miao)分析,目前(qian)已支持(chi)小(xiao)程序用(yong)到的能(neng)力、能(neng)力屬性(xing)、能(neng)力參(can)數、能(neng)力返(fan)回值、能(neng)力涉(she)及的關鍵路徑等多種維度的掃描(miao)功能(neng)。
L級:根(gen)據(ju)能力在(zai)小程序側使用(yong)情況,區分出一些基礎(chu)能力與特色(se)能力和低頻能力等,同時宿主可以根(gen)據(ju)這些能力標準進行按需(xu)實現,等級劃(hua)分如下(xia):
L1:小程序自帶,不用宿主額外配合(框架實現)。
L2:能(neng)力建議端補(bu)齊(qi),確保基礎體驗(yan),內部矩陣必要(yao)實(shi)現(包含手百獨有能(neng)力在內的必要(yao)能(neng)力)。
L3:特色(se)能(neng)力,強依賴端能(neng)力滿足,宿主按需實(shi)現。
L4:低頻能力(li),不(bu)追求滿足,宿主按需(xu)實現。
2.2 宿主能力(li)檢測機制
1.使用宿主工具進(jin)行CTS能力測試
宿(su)(su)主(zhu)(zhu)(zhu)(zhu)在集成(cheng)開源(yuan)SDK并完(wan)成(cheng)開發后(hou)進(jin)行打包,可在開源(yuan)宿(su)(su)主(zhu)(zhu)(zhu)(zhu)平臺下(xia)載宿(su)(su)主(zhu)(zhu)(zhu)(zhu)工具(ju),對包體(ti)進(jin)行CTS能(neng)(neng)力(li)測(ce)。,CTS支持宿(su)(su)主(zhu)(zhu)(zhu)(zhu)進(jin)行全能(neng)(neng)力(li)自(zi)動測(ce)試(shi)和補(bu)充測(ce)試(shi),補(bu)充測(ce)試(shi)可以(yi)對全能(neng)(neng)力(li)測(ce)試(shi)中未(wei)通過的(de)能(neng)(neng)力(li)進(jin)行批量測(ce)試(shi),測(ce)試(shi)完(wan)成(cheng)后(hou)上傳自(zi)動測(ce)試(shi)報告(gao)。其(qi)中還存(cun)在部分(fen)能(neng)(neng)力(li)無法實現CTS自(zi)動化測(ce)試(shi),需(xu)進(jin)行手(shou)動測(ce)試(shi),測(ce)試(shi)完(wan)成(cheng)后(hou)宿(su)(su)主(zhu)(zhu)(zhu)(zhu)在手(shou)機上傳手(shou)動測(ce)試(shi)報告(gao)。
2.宿主工具上傳測試報告
在宿主(zhu)執行完自(zi)動測(ce)試(shi)(shi)與手動測(ce)試(shi)(shi)后,需(xu)分(fen)別(bie)上(shang)傳自(zi)動測(ce)試(shi)(shi)報(bao)告與手動測(ce)試(shi)(shi)報(bao)告至開源保障(zhang)系統(tong),同(tong)時因(yin)為同(tong)一個(ge)宿主(zhu)版本可(ke)能存在多(duo)次重(zhong)復(fu)測(ce)試(shi)(shi)過程,會產生多(duo)份(fen)(fen)測(ce)試(shi)(shi)報(bao)告,因(yin)此宿主(zhu)需(xu)要分(fen)別(bie)選擇一份(fen)(fen)最終的自(zi)動測(ce)試(shi)(shi)報(bao)告和手動測(ce)試(shi)(shi)報(bao)告,使得開源保障(zhang)系統(tong)可(ke)以對最終確(que)認的報(bao)告進行解(jie)析。
3.報告解析產(chan)出(chu)宿主能(neng)力
開源系統在(zai)收到宿(su)主(zhu)(zhu)確認報告的操作(zuo)后(hou),開始執(zhi)行報告解析,計(ji)算(suan)宿(su)主(zhu)(zhu)能(neng)力(li)(li)(li)支(zhi)持情(qing)況(kuang),產出最終的宿(su)主(zhu)(zhu)能(neng)力(li)(li)(li)列表并(bing)存儲下來;在(zai)宿(su)主(zhu)(zhu)能(neng)力(li)(li)(li)產出的同時(shi)同樣會執(zhi)行宿(su)主(zhu)(zhu)能(neng)力(li)(li)(li)定級,計(ji)算(suan)出宿(su)主(zhu)(zhu)能(neng)力(li)(li)(li)等級并(bing)進(jin)行標記;產出的宿(su)主(zhu)(zhu)能(neng)力(li)(li)(li)和(he)宿(su)主(zhu)(zhu)等級將在(zai)后(hou)續宿(su)主(zhu)(zhu)分發小程序(xu)時(shi)分發策略中使(shi)用。
能力檢測服務可用性(xing)保障:
當用(yong)戶完成測(ce)試報告(gao)(gao)確認動(dong)作后,開源(yuan)保障(zhang)系統(tong)實(shi)時進(jin)行(xing)(xing)(xing)報告(gao)(gao)解析和能力解析相關操作,在一個進(jin)程中完成,如果因為系統(tong)執行(xing)(xing)(xing)異常導(dao)致的宿主(zhu)能力檢測(ce)失敗,開源(yuan)保障(zhang)系統(tong)中設(she)計重試任務進(jin)行(xing)(xing)(xing)兜底(di),保障(zhang)所有(you)宿主(zhu)都能完成能力檢測(ce)。
2.3 小(xiao)程序能力檢測(ce)機制(zhi):