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