小程序開源業(yè)務(wù)架構(gòu)是怎樣做的
發(fā)布時間:2022-07-16
發(fā)布作者:睿思設(shè)計(jì)
查閱次數(shù):1453次
標(biāo)簽:小程序 開源 生態(tài)
百度從做智能小程序的第一天開始就打造真正開源開放的生態(tài),我們的愿景是:定義移動時代最佳體驗(yàn),建設(shè)智能小程序行業(yè)標(biāo)準(zhǔn),打破孤島,共建開源、開放、繁榮的小程序行業(yè)生態(tài)。百度智能小程序的生態(tài)玩家有三類,分別是:聯(lián)盟合作伙伴、開發(fā)者和用戶。對于聯(lián)盟合作伙伴,滿足合作伙伴的生態(tài)共建、流量共享、商業(yè)共贏訴求,使得合作伙伴App內(nèi)缺失場景得到高效補(bǔ)充,拉動合作伙伴App用戶使用時長,共享小程序的變現(xiàn)收入。對于開發(fā)者,滿足了開發(fā)者一次開發(fā),多端運(yùn)行訴求,使得開發(fā)者流量獲取更加便捷高效、并且增加開發(fā)者商業(yè)收入。對于用戶,滿足用戶的無需跳出即可享受一站式服務(wù)訴求。百度搜索做為小程序的十分重要分發(fā)入口,通過構(gòu)建統(tǒng)一的小程序行業(yè)生態(tài), 提升百度的搜索生態(tài)中的用戶體驗(yàn)、服務(wù)閉環(huán)。

百度智能小程序開源的架構(gòu)是如何支撐起整個聯(lián)盟生態(tài)運(yùn)轉(zhuǎn)的呢?

如圖所示,小程序開源聯(lián)盟的整個業(yè)務(wù)架構(gòu)分位四層。包括:聯(lián)盟宿主層、對外聯(lián)盟賦能層、中間服務(wù)層、基礎(chǔ)建設(shè)層。
- 聯(lián)盟宿主層。百度智能小程序已經(jīng)接入非常豐富的聯(lián)盟宿主,包括OPPO瀏覽器、VIVO瀏覽器、小米瀏覽器、愛奇藝、百度極速版等等。
- 對外聯(lián)盟賦能層,百度智能小程序開源聯(lián)盟主要通過開源聯(lián)盟平臺對宿主提供入場能力、經(jīng)營能力、資源輸出能力,以支持開源生態(tài)成員的入駐、配置、集成、準(zhǔn)入檢測、小程序信息、物料信息、分傭、訂單信息、運(yùn)營等訴求。宿主通過資源輸出模塊拿到小程序以及物料的數(shù)據(jù)后,可以在自己的App內(nèi)場探索可落地的場景并進(jìn)行資源的分發(fā)。
- 內(nèi)部中間服務(wù)層,主要是承上啟下的服務(wù),封裝基礎(chǔ)服務(wù),并支撐對外聯(lián)盟賦能層對基礎(chǔ)業(yè)務(wù)數(shù)據(jù)的獲取。主要包含:小程序開源宿主管理、能力資產(chǎn)管理、分發(fā)管理、訂單及分傭管理、數(shù)據(jù)管理等。
- 基礎(chǔ)建設(shè)層,主要包含小程序開源框架、數(shù)據(jù)服務(wù)、小程序/物料服務(wù)、包服務(wù)以及安全加固等方案的落地。
隨著百度小程序開源聯(lián)盟的不斷發(fā)展,也吸引了頭部手機(jī)廠商。小程序開源與廠商共建了豐富的業(yè)務(wù)場景,不僅包含廠商的瀏覽器場景,還有桌面鎖屏、負(fù)一屏、全局搜等多種場景。如此多樣化的場景建設(shè)中,我們面臨的共性挑戰(zhàn)是:如何保障廠商線上分發(fā)質(zhì)量、如何建設(shè)一條從廠商瀏覽器到百度搜索到小程序的全流程分發(fā)管控通路,從而可以精準(zhǔn)、實(shí)時的管控廠商瀏覽器的小程序分發(fā)。
具體我們是如何考慮并建設(shè)的呢?下面將詳細(xì)介紹下。
二、整體技術(shù)建設(shè)思路介紹
2.1小程序開源分發(fā)保障技術(shù)要點(diǎn)
開源保障核心圍繞的對象為宿主與小程序,核心目的是為了保障小程序在宿主上的分發(fā)質(zhì)量。
為什么會存在分發(fā)質(zhì)量問題?宿主在入駐開源后需要集成開源SDK并進(jìn)行相關(guān)能力的開發(fā),在這些流程完成后宿主就獲得了相應(yīng)的宿主能力。小程序是基于swanjs開發(fā)框架進(jìn)行的開發(fā),swanjs這套運(yùn)行時框架底層同樣是依賴開源SDK運(yùn)行,因此在小程序完成開發(fā)后小程序本身也獲得或依賴了相關(guān)能力。因?yàn)椴煌乃拗髂芰χС智闆r不同,就會導(dǎo)致同一個小程序在不同宿主上分發(fā)時可能遇到某個宿主不支持小程序使用到的某個能力,進(jìn)而導(dǎo)致該小程序無法在宿主上正常打開或者降級為H5打開,導(dǎo)致用戶體驗(yàn)受損。
因此需要有一套開源保障方案來提前發(fā)現(xiàn)宿主與小程序之間能力不匹配情況,進(jìn)而確保系統(tǒng)能夠自由管控小程序在宿主上分發(fā)全過程。

要實(shí)現(xiàn)小程序在宿主上分發(fā)通路建設(shè),核心涉及端流程打通、能力與定級流打通及最終分發(fā)流打通三大板塊,如下圖所示:

宿主入駐開源,入駐成功后宿主需要集成開源SDK與開發(fā),宿主開發(fā)完成后即可打包發(fā)布宿主App;同時宿主包在發(fā)布前需要經(jīng)過宿主能力測試,通過下載宿主工具進(jìn)行CTS能力測試并產(chǎn)出宿主能力支持情況。
開發(fā)者進(jìn)行小程序開發(fā),開發(fā)完成后操作小程序包版本發(fā)布上線,之后小程序開源保障模塊會訂閱小程序發(fā)版動作,同時拉取小程序包信息執(zhí)行小程序能力掃描測試,并產(chǎn)出小程序能力使用情況。
在宿主與小程序分別完成接入與能力掃描后,開源保障系統(tǒng)就可以分別基于宿主與小程序能力掃描結(jié)果進(jìn)行解析,產(chǎn)出最終的宿主和小程序能力使用情況并存儲。同時開源保障系統(tǒng)可以基于宿主能力與小程序能力分別對宿主和小程序進(jìn)行能力定級,計(jì)算出宿主與小程序當(dāng)前能達(dá)到哪個等級,并給宿主和小程序分別打上等級標(biāo)識。
主要由小程序分發(fā)端實(shí)現(xiàn),主要根據(jù)用戶在開源保障系統(tǒng)中配置的分發(fā)策略,基于策略計(jì)算小程序是否滿足在宿主上分發(fā)條件。
能力:能力指的是小程序開源系統(tǒng)中,對百度APP或者說開源SDK中所封裝并支持的各種API、組件、框架等系統(tǒng)能力的統(tǒng)稱,詳細(xì)可參考小程序開發(fā)者文檔https://smartprogram.baidu.com/docs/develop/api/apilist/進(jìn)行了解,目前小程序開源共支持的能力有1000多個。
CTS測試:CTS即Compatibility Test Suite, 兼容性測試套件;是為了保障智能小程序在宿主APP穩(wěn)定運(yùn)行,提供了一套兼容性測試集合,宿主APP上線前,需先通過CTS測試。
AST掃描:抽象語法樹(Abstract Syntax Tree)掃描,是小程序應(yīng)用的一種源碼掃描工具,通過抽象語法樹的方式對小程序源碼進(jìn)行掃描分析,目前已支持小程序用到的能力、能力屬性、能力參數(shù)、能力返回值、能力涉及的關(guān)鍵路徑等多種維度的掃描功能。
L級:根據(jù)能力在小程序側(cè)使用情況,區(qū)分出一些基礎(chǔ)能力與特色能力和低頻能力等,同時宿主可以根據(jù)這些能力標(biāo)準(zhǔn)進(jìn)行按需實(shí)現(xiàn),等級劃分如下:
L1:小程序自帶,不用宿主額外配合(框架實(shí)現(xiàn))。
L2:能力建議端補(bǔ)齊,確?;A(chǔ)體驗(yàn),內(nèi)部矩陣必要實(shí)現(xiàn)(包含手百獨(dú)有能力在內(nèi)的必要能力)。
L3:特色能力,強(qiáng)依賴端能力滿足,宿主按需實(shí)現(xiàn)。
L4:低頻能力,不追求滿足,宿主按需實(shí)現(xiàn)。

宿主在集成開源SDK并完成開發(fā)后進(jìn)行打包,可在開源宿主平臺下載宿主工具,對包體進(jìn)行CTS能力測。,CTS支持宿主進(jìn)行全能力自動測試和補(bǔ)充測試,補(bǔ)充測試可以對全能力測試中未通過的能力進(jìn)行批量測試,測試完成后上傳自動測試報告。其中還存在部分能力無法實(shí)現(xiàn)CTS自動化測試,需進(jìn)行手動測試,測試完成后宿主在手機(jī)上傳手動測試報告。
在宿主執(zhí)行完自動測試與手動測試后,需分別上傳自動測試報告與手動測試報告至開源保障系統(tǒng),同時因?yàn)橥粋€宿主版本可能存在多次重復(fù)測試過程,會產(chǎn)生多份測試報告,因此宿主需要分別選擇一份最終的自動測試報告和手動測試報告,使得開源保障系統(tǒng)可以對最終確認(rèn)的報告進(jìn)行解析。
開源系統(tǒng)在收到宿主確認(rèn)報告的操作后,開始執(zhí)行報告解析,計(jì)算宿主能力支持情況,產(chǎn)出最終的宿主能力列表并存儲下來;在宿主能力產(chǎn)出的同時同樣會執(zhí)行宿主能力定級,計(jì)算出宿主能力等級并進(jìn)行標(biāo)記;產(chǎn)出的宿主能力和宿主等級將在后續(xù)宿主分發(fā)小程序時分發(fā)策略中使用。
當(dāng)用戶完成測試報告確認(rèn)動作后,開源保障系統(tǒng)實(shí)時進(jìn)行報告解析和能力解析相關(guān)操作,在一個進(jìn)程中完成,如果因?yàn)橄到y(tǒng)執(zhí)行異常導(dǎo)致的宿主能力檢測失敗,開源保障系統(tǒng)中設(shè)計(jì)重試任務(wù)進(jìn)行兜底,保障所有宿主都能完成能力檢測。

小程序能力檢測通路依賴開發(fā)者在開發(fā)者中心完成小程序開發(fā)與發(fā)版全流程,之后開源保障系統(tǒng)負(fù)責(zé)訂閱小程序發(fā)版行為并自動拉取小程序包體信息,最后推送給AST小程序能力掃描工具進(jìn)行掃描操作。
小程序能力掃描核心依賴AST小程序能力掃描工具完成,該工具主要通過抽象語法樹方式實(shí)現(xiàn)對小程序包體代碼進(jìn)行掃描分析,共支持掃描小程序使用到哪些開源能力,能力對應(yīng)的參數(shù)、返回值及屬性,及能力涉及的小程序關(guān)鍵路徑,以上信息掃描成功后的結(jié)果將回傳給開源保障系統(tǒng)。
開源保障系統(tǒng)在接收到AST小程序能力掃描結(jié)果后,會進(jìn)行掃描結(jié)果分析,提取出小程序使用的能力情況及其他關(guān)鍵信息并存儲下來,同時會觸發(fā)小程序定級任務(wù)來執(zhí)行小程序等級計(jì)算,產(chǎn)出并存儲當(dāng)前小程序包版本的等級以便后續(xù)保障流程使用。
當(dāng)開源保障系統(tǒng)訂閱到小程序發(fā)版信息后,開始走推送AST掃描及后續(xù)流程,整個流程過程均為實(shí)時流,但是中間存在跨系統(tǒng)交互等多個子流程,為了保證小程序能力檢測過程一定能全部執(zhí)行成功,開源保障系統(tǒng)中設(shè)計(jì)重試任務(wù)進(jìn)行兜底,對能力檢測失敗的小程序記錄進(jìn)行重推AST掃描及能力解析等,同時中間步驟保證冪等,保障所有小程序都能完成能力檢測。
為了得到宿主App與小程序的兼容情況,小程序開源業(yè)務(wù)系統(tǒng)建設(shè)了分級機(jī)制。將小程序與宿主App從低到高分別評定為 L1 至 L4 級,并基于L級確定可以分發(fā)哪些小程序。具體步驟包括:
1.宿主App與小程序的能力分析:將待匹配的宿主App進(jìn)行能力測試得到宿主App所支持的全部能力;將待匹配的小程序進(jìn)行能力掃描得到小程序運(yùn)行需要的全部能力。
2.宿主App與小程序的等級評定:根據(jù)能力的重要性,對宿主App與小程序的能力進(jìn)行等級映射、等級聚合來評定App與小程序的等級。
3.宿主App與小程序的分發(fā)匹配:根據(jù)宿主App等級確定匹配的小程序集,其中L1級的宿主App僅能匹配到L1級的小程序,L2級的宿主App可以匹配到L1與L2的小程序,宿主App的最高級別為L4,即具備運(yùn)行全部小程序的能力。

為了得到宿主App上可分發(fā)的小程序,小程序開源業(yè)務(wù)系統(tǒng)結(jié)合內(nèi)部分發(fā)匹配機(jī)制與管理員干預(yù)機(jī)制,來確定宿主App可以打開的小程序集。具體步驟包括:
1.小程序管理員管控:第一級小程序分發(fā)管控,基于管理員對小程序的私有化、App黑名單,以及小程序下線的訴求,確保App上無法打開私有、被拉黑、下線的小程序。
2.L級匹配機(jī)制管控:第二級小程序分發(fā)管控,通過L級匹配機(jī)制得到App可正常運(yùn)行的小程序集合,使默認(rèn)情況下宿主App只能打開L級相匹配的小程序。
3.宿主App管理員干預(yù):匹配機(jī)制的補(bǔ)充,App管理員可根據(jù)小程序運(yùn)行的數(shù)據(jù)、App應(yīng)用場景等需求,提交想分發(fā)的小程序名單,來表達(dá)分發(fā)訴求。

打破孤島,共建開源、開放、繁榮的小程序行業(yè)生態(tài) 一直是小程序開源聯(lián)盟努力的目標(biāo)?;A(chǔ)能力框架的完善、各行各業(yè)數(shù)據(jù)的互通以及開發(fā)者、宿主和百度友好積極的合作模式是完成這樣目標(biāo)的關(guān)鍵。技術(shù)架構(gòu)的規(guī)劃一定是圍繞著共同的目標(biāo)和伙伴們的訴求展開,切實(shí)的跟蹤和服務(wù)為理念,用合理的技術(shù)手段賦能產(chǎn)品和生態(tài),這樣才可以體現(xiàn)生態(tài)價值。在小程序開源業(yè)務(wù)架構(gòu)建設(shè)道路中對服務(wù)化結(jié)構(gòu)以及全流程的問題排查有如下總結(jié)和思考:
3.1服務(wù)化架構(gòu)的設(shè)計(jì)思路
1.基礎(chǔ)數(shù)據(jù)的內(nèi)聚和服務(wù)的收斂
數(shù)據(jù)是服務(wù)的基礎(chǔ),無論是開發(fā)者平臺、tp平臺還是宿主平臺,都會對基礎(chǔ)數(shù)據(jù)的使用場景,統(tǒng)一管理基礎(chǔ)數(shù)據(jù)可以很好的保證基礎(chǔ)信息在各個平臺的統(tǒng)一性,而統(tǒng)一收斂的基礎(chǔ)數(shù)據(jù)提供服務(wù),可以有效的管理和運(yùn)維。
2.自研rpc框架賦能微服務(wù)架構(gòu)和治理
微服務(wù)的架構(gòu)往往離不開的組件就是rpc框架,整體框架中的內(nèi)部服務(wù)調(diào)用使用rpc框架,在提高網(wǎng)絡(luò)交互的效率同時,使用rpc框架的運(yùn)維功能,有效提高服務(wù)穩(wěn)定性。
3.單一職責(zé)原則拆分原有的重模塊,切實(shí)落地架構(gòu)微服務(wù)化
隨著開源業(yè)務(wù)逐年快速發(fā)展,很多模塊原有的功能聚合和邊界劃分已經(jīng)不太符合現(xiàn)有場景,基于業(yè)務(wù)發(fā)展的趨勢和微服務(wù)單一職責(zé)理念,對服務(wù)進(jìn)行拆解,不僅可以有效降低服務(wù)的耦合度,而且衍生出更易擴(kuò)展和更健壯的服務(wù)。
4.日志收集、監(jiān)控報警 服務(wù)穩(wěn)定性保障
分布式的日志收集和全面的監(jiān)控報警是保證服務(wù)穩(wěn)定性的重要手段,也是問題排查和解決的常用方式,但也并不是所有的地方都要日志收集和監(jiān)控報警,合理有效的的日志上報和監(jiān)控報警指標(biāo)可以有效的在第一時間發(fā)現(xiàn)問題和解決問題。
小程序開源的鏈路比較長,在遇到線上badcase的時候,如果核心日志數(shù)據(jù)不完善,日志數(shù)據(jù)鏈路沒打通,上下游數(shù)據(jù)鏈路情況就無法查詢,排查問題周期長,甚至排查不了問題,繼而導(dǎo)致穩(wěn)定性問題得不到很好的解決和處理,基于這樣的問題,在線日志建設(shè)十分重要。
1.http請求日志鏈路
- trace維護(hù):基于 server mesh 理念,使用 java agent 能力和 openTrace 標(biāo)準(zhǔn),發(fā)布平臺統(tǒng)一管理trace生成和傳遞,不僅無侵入,而且對于業(yè)務(wù)只需要很少的接入成本即可完成。
- trace鏈路:發(fā)布平臺提供想用的trace鏈路拓?fù)?,有效的排查traceId下調(diào)用場景和花費(fèi)時間,幫助開發(fā)同學(xué)及時發(fā)現(xiàn)問題和排查問題。
- trace日志:統(tǒng)一分布式日志收集服務(wù)將收集業(yè)務(wù)方提交日志,兼容發(fā)布平臺統(tǒng)一管理的trace信息,保留trace鏈路的具體日志詳情,方便在具體問題場景上面更詳細(xì)排查問題。
2.物料消息日志鏈路
- 物料唯一標(biāo)識:物料服務(wù)將統(tǒng)一管理和存儲物料數(shù)據(jù),對于不同場景的物料都有各自的唯一標(biāo)識體系,使用物料唯一表示進(jìn)行物料消息的鏈路日志串聯(lián)。
- 日志收集檢索:公司統(tǒng)一的收集服務(wù)提供業(yè)務(wù)標(biāo)識定義、檢索和排序功能,對于長鏈路的物料消息傳遞分發(fā)場景,可以很好的串聯(lián)起整個異步鏈路。