0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

滴滴這DDD架構(gòu)建設(shè)方案太強(qiáng)了!

jf_ro2CN3Fa ? 來(lái)源:芋道源碼 ? 2023-07-19 14:47 ? 次閱讀

導(dǎo)讀

由于網(wǎng)約車(chē)業(yè)務(wù)本身的復(fù)雜性以及我們垂直式的領(lǐng)域化架構(gòu)約束,網(wǎng)約車(chē)服務(wù)端技術(shù)團(tuán)隊(duì)在對(duì)端渲染業(yè)務(wù)需求的迭代過(guò)程中,碰到了一系列的問(wèn)題,影響了研發(fā)效率。本文從這些具體問(wèn)題入手,分析產(chǎn)生的原因,介紹我們的解決思路和方案,以及方案的建設(shè)落地過(guò)程。

1. 服務(wù)端架構(gòu)演進(jìn)回顧

過(guò)去幾年,滴滴網(wǎng)約車(chē)為了滿足不同用戶的個(gè)性化出行需求,逐步推出了越來(lái)越豐富的品類(lèi)和功能。隨著品類(lèi)功能的不斷增加,我們系統(tǒng)的復(fù)雜度也越來(lái)越高,為了應(yīng)對(duì)這一挑戰(zhàn),網(wǎng)約車(chē)服務(wù)端技術(shù)團(tuán)隊(duì)構(gòu)建了一個(gè)「出行平臺(tái)」,內(nèi)部又稱(chēng)灣流平臺(tái)。灣流平臺(tái)的演進(jìn)主要經(jīng)過(guò)了以下幾個(gè)階段。

灣流平臺(tái)1.0(2017-2018)

在1.0階段,滴滴網(wǎng)約車(chē)的主要業(yè)務(wù)重心是豐富品類(lèi),為用戶提供更多選擇,其中包括專(zhuān)車(chē)、豪華車(chē)、優(yōu)享等。在這個(gè)階段,灣流平臺(tái)還是一個(gè)單體服務(wù),主要面臨的挑戰(zhàn)是如何快速新增品類(lèi)并支持多品類(lèi)之間的差異化開(kāi)發(fā)。

為了應(yīng)對(duì)這些挑戰(zhàn),我們引入了配置化和插件化。配置化使得新增品類(lèi)可以快速上線并進(jìn)行復(fù)用,提高開(kāi)發(fā)效率。插件化則能夠隔離不同品類(lèi)之間的差異邏輯,確保各品類(lèi)的獨(dú)立性和靈活性

80458a3e-25d4-11ee-962d-dac502259ad0.png

灣流平臺(tái)2.0(2018-2020)

在2.0階段,隨著品類(lèi)的不斷豐富和個(gè)性化功能的增加,開(kāi)發(fā)團(tuán)隊(duì)也不斷壯大,系統(tǒng)規(guī)模逐漸龐大,但日常的迭代效率和穩(wěn)定性出現(xiàn)了明顯下降。為了解決這些問(wèn)題,我們從兩個(gè)方向?qū)沉髌脚_(tái)進(jìn)行了改造。

首先,按照領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)的思路,對(duì)單體服務(wù)進(jìn)行了拆分,降低整體系統(tǒng)的復(fù)雜度,同時(shí)也解決了團(tuán)隊(duì)成員并行開(kāi)發(fā)導(dǎo)致的上線沖突和排隊(duì)的問(wèn)題,提高了開(kāi)發(fā)效率。

8087b166-25d4-11ee-962d-dac502259ad0.png

其次,在領(lǐng)域服務(wù)內(nèi)部,我們進(jìn)行了功能的聚合和抽象,通過(guò)將具有相似功能的業(yè)務(wù)進(jìn)行聚合,并對(duì)其進(jìn)行抽象,可以避免功能的重復(fù)開(kāi)發(fā),進(jìn)一步提高了開(kāi)發(fā)效率和代碼的可維護(hù)性。

80b78c10-25d4-11ee-962d-dac502259ad0.png

灣流平臺(tái)3.0(2020-至今)

在3.0階段,我們開(kāi)發(fā)了一套名為DuKang的業(yè)務(wù)框架,它將API的業(yè)務(wù)邏輯分為兩個(gè)層次。首先是流程層,用于串接狀態(tài)流轉(zhuǎn),提供了通用的流程實(shí)現(xiàn),不同的品類(lèi)可以根據(jù)自身需求定制自己的流程,以滿足差異化的業(yè)務(wù)要求。

其次是能力組件層,負(fù)責(zé)完成各個(gè)垂類(lèi)功能。組件內(nèi)使用策略模式實(shí)現(xiàn)不同的行為,例如播單組件內(nèi)部提供了延遲播單、實(shí)時(shí)播單等不同方式,不同的品類(lèi)可以根據(jù)自己的需求選擇適合自己的方式。同時(shí),組件也支持插件機(jī)制,可以讓品類(lèi)注入獨(dú)有的模式。

通過(guò)Dukang框架,我們能夠有效約束各服務(wù)系統(tǒng)的實(shí)現(xiàn),保持統(tǒng)一的規(guī)范,讓不同的領(lǐng)域服務(wù)可以復(fù)用能力組件,提高開(kāi)發(fā)效率和代碼的復(fù)用性。

80fb9b44-25d4-11ee-962d-dac502259ad0.png

灣流平臺(tái)詳細(xì)的建設(shè)思路,可以參考之前的文章「滴滴出行平臺(tái)業(yè)務(wù)架構(gòu)演進(jìn)」,系統(tǒng)的架構(gòu)簡(jiǎn)單示例如下:

81262dbe-25d4-11ee-962d-dac502259ad0.png

2. 新問(wèn)題和挑戰(zhàn)

在討論新問(wèn)題挑戰(zhàn)之前,我們先統(tǒng)一一些基本概念。

頁(yè)面:指用戶在終端上看到的整體區(qū)域,包含各種UI控件,例如打開(kāi)app看到的乘客首頁(yè)、司機(jī)接單后趕來(lái)的等待接駕頁(yè)等。

組件:頁(yè)面中獨(dú)立展示的功能區(qū)塊,通常具有特定的業(yè)務(wù)屬性,例如下圖的小助手組件,主要用于展示當(dāng)前場(chǎng)景下的一些重要業(yè)務(wù)提示和部分營(yíng)銷(xiāo)活動(dòng)。

模板:組件內(nèi)的不同UI展示樣式,依賴于組件的定義和存在。

功能:表示一些具體的業(yè)務(wù)場(chǎng)景,例如保障車(chē)隊(duì)功能、自選車(chē)功能等。

數(shù)據(jù)源:提供組件渲染數(shù)據(jù)的后端服務(wù)接口。

815f74a2-25d4-11ee-962d-dac502259ad0.png

在灣流平臺(tái)的持續(xù)建設(shè)過(guò)程中,渲染類(lèi)需求的迭代效率始終上不去,經(jīng)過(guò)進(jìn)一步的深入分析,我們發(fā)現(xiàn)雖然領(lǐng)域服務(wù)能夠通過(guò)能力層實(shí)現(xiàn)功能邏輯的復(fù)用,但在做對(duì)端的渲染邏輯時(shí)出現(xiàn)了一些問(wèn)題。不同位置的組件是由不同領(lǐng)域服務(wù)負(fù)責(zé)的,而這些領(lǐng)域服務(wù)各自有自己的渲染規(guī)范,因此,同一個(gè)功能想要在不同組件上進(jìn)行展示時(shí),就需要按照這些組件的渲染規(guī)范進(jìn)行適配,例如有的組件要求直接通過(guò)接口返回渲染數(shù)據(jù),而有些則要求在平臺(tái)上進(jìn)行數(shù)據(jù)配置,這就導(dǎo)致一個(gè)功能在渲染對(duì)接上需要花費(fèi)大量成本。同時(shí),除了服務(wù)端系統(tǒng)內(nèi)部的問(wèn)題外,還有一些外部溝通協(xié)作、數(shù)據(jù)開(kāi)發(fā)等挑戰(zhàn)。

下圖是當(dāng)前系統(tǒng)內(nèi)渲染處理現(xiàn)狀,具體的問(wèn)題可以結(jié)合下圖進(jìn)行討論。

81a0c402-25d4-11ee-962d-dac502259ad0.png

多端問(wèn)題

滴滴涵蓋了多個(gè)終端,包括Android、iOS和小程序等。由于我們劃分了不同的領(lǐng)域服務(wù),每個(gè)領(lǐng)域服務(wù)都需要直接向終端提供相關(guān)展示數(shù)據(jù),例如,售賣(mài)領(lǐng)域服務(wù)提供首頁(yè)相關(guān)數(shù)據(jù),交易撮合領(lǐng)域服務(wù)提供等待應(yīng)答頁(yè)的相關(guān)數(shù)據(jù)等。然而,這就導(dǎo)致了所有領(lǐng)域服務(wù)需要同時(shí)與所有終端進(jìn)行對(duì)接,增加了溝通和協(xié)作的成本,影響迭代效率。

同時(shí),網(wǎng)約車(chē)產(chǎn)品在大多數(shù)情況下要求多終端的體驗(yàn)保持一致,然而,由于各端獨(dú)立開(kāi)發(fā)和實(shí)現(xiàn),又沒(méi)有地方統(tǒng)一進(jìn)行管控,導(dǎo)致不一致的問(wèn)題經(jīng)常出現(xiàn)。例如,相同的標(biāo)簽展示內(nèi)容在長(zhǎng)度超過(guò)限制時(shí),iOS會(huì)截?cái)嗾故?,而Android則采用跑馬燈展示等。多端實(shí)現(xiàn)不一致同樣也會(huì)影響我們的迭代效率,例如當(dāng)產(chǎn)品希望對(duì)線上展示內(nèi)容進(jìn)行動(dòng)態(tài)更換時(shí),由于各端實(shí)現(xiàn)不同,導(dǎo)致動(dòng)態(tài)化能力參差不齊,產(chǎn)品不得不針對(duì)各端進(jìn)行差異化實(shí)現(xiàn);還有同一個(gè)功能上線后,由于各端埋點(diǎn)實(shí)現(xiàn)不一致,收集的數(shù)據(jù)差異很大,每次都需要排查原因,甚至需要為不同端制定不同的數(shù)據(jù)分析策略。總之多端一致有利于產(chǎn)品體驗(yàn)的提升,也能提升效率。

渲染邏輯管理困難

端上的組件位置是有限的,但是功能卻是不斷累積的,這導(dǎo)致在一個(gè)組件上需要根據(jù)不同的業(yè)務(wù)場(chǎng)景,展示不同的內(nèi)容。經(jīng)過(guò)統(tǒng)計(jì),一些熱點(diǎn)組件上,擁有四五十種展示形式,上百種展示場(chǎng)景,面對(duì)如此復(fù)雜的情況,流量分發(fā)、優(yōu)先級(jí)排序等管理十分復(fù)雜,而且所有的領(lǐng)域服務(wù)都需要重復(fù)實(shí)現(xiàn)這些復(fù)雜的邏輯,存在大量的重復(fù)工作。

82018c6a-25d4-11ee-962d-dac502259ad0.png

功能跨流程接入難

有很多功能需要在全流程進(jìn)行透出感知,比如拼車(chē)權(quán)益卡,在冒泡、等待應(yīng)答、行程結(jié)束等很多階段都需要進(jìn)行感知透出,這些階段的頁(yè)面由不同的領(lǐng)域服務(wù)處理,這些服務(wù)又歸屬于不同的團(tuán)隊(duì),在渲染接入上都有自己獨(dú)立的一套規(guī)范,導(dǎo)致拼車(chē)權(quán)益這樣一個(gè)功能接入跨流程的展示時(shí),需要和不同的領(lǐng)域服務(wù)進(jìn)行對(duì)接,而且需要進(jìn)行逐一適配,接入成本很高。

82a59c10-25d4-11ee-962d-dac502259ad0.png

數(shù)據(jù)看清難

各個(gè)組件的前后端埋點(diǎn)都是由不同團(tuán)隊(duì)的開(kāi)發(fā)同學(xué)進(jìn)行自定義實(shí)現(xiàn),缺乏統(tǒng)一的規(guī)范,下圖以拼車(chē)權(quán)益示例,可以看到,雖然各個(gè)位置都有埋點(diǎn),但是大家的規(guī)范都不一樣,想要把這些數(shù)據(jù)串起來(lái)非常的困難,每次要看數(shù)據(jù)時(shí),都需要數(shù)據(jù)產(chǎn)品單獨(dú)提需求進(jìn)行開(kāi)發(fā)實(shí)現(xiàn),周期長(zhǎng),成本也很高。

82f77832-25d4-11ee-962d-dac502259ad0.png

以上就是我們?cè)阡秩旧嫌龅降囊幌盗袉?wèn)題,從上面的問(wèn)題中可以看到,當(dāng)前架構(gòu)中最核心的問(wèn)題,是系統(tǒng)各個(gè)層級(jí)間缺乏統(tǒng)一的渲染標(biāo)準(zhǔn)和規(guī)范,導(dǎo)致出現(xiàn)了很多的重復(fù)工作以及相互間信息打不通,主要可以歸納為這三個(gè)方面:

前端 & 后端:如何構(gòu)建統(tǒng)一的組件認(rèn)知,如何保證多端一致,如何減少多終端的協(xié)作成本。

后端:如何管理組件內(nèi)復(fù)雜的功能展示邏輯,如何保證單一功能在全流程進(jìn)行感知時(shí),可以快速接入。

數(shù)據(jù) & 前端 & 后端:如何建設(shè)統(tǒng)一的前后端數(shù)據(jù)規(guī)范,如何快速看清數(shù)據(jù)

3. 解決思路

解決這幾個(gè)問(wèn)題的核心思路是進(jìn)行標(biāo)準(zhǔn)化,通過(guò)不同層次的標(biāo)準(zhǔn)化配合,形成一套統(tǒng)一的跨端渲染平臺(tái),詳細(xì)的方案思路如下所示。

組件標(biāo)準(zhǔn)化

組件標(biāo)準(zhǔn)化的思路是將我們頁(yè)面按功能模塊劃分成不同的組件,然后對(duì)這些組件進(jìn)行UI規(guī)范和數(shù)據(jù)交互協(xié)議的統(tǒng)一,各端再根據(jù)統(tǒng)一的UI規(guī)范和交互協(xié)議進(jìn)行組件的開(kāi)發(fā),同時(shí)在研發(fā)流程和研發(fā)模式上進(jìn)行管控,讓各終端架構(gòu)層面保持統(tǒng)一,盡可能地實(shí)現(xiàn)各端體驗(yàn)的一致。針對(duì)多端實(shí)現(xiàn)一致的問(wèn)題,Android和IOS也在探索跨端技術(shù)等方式,本文不對(duì)此展開(kāi)。

有了這些多端統(tǒng)一的標(biāo)準(zhǔn)化組件之后,為了實(shí)現(xiàn)組件的復(fù)用以及減少終端和后端的溝通協(xié)作成本,我們建設(shè)了組件管理平臺(tái)和渲染網(wǎng)關(guān)。終端研發(fā)在管理平臺(tái)上對(duì)頁(yè)面進(jìn)行配置,配置頁(yè)面上有哪些組件,這些組件通過(guò)什么樣的形式進(jìn)行布局,組件的數(shù)據(jù)從哪來(lái)等等。有了這些配置之后,終端進(jìn)行頁(yè)面渲染時(shí),不再和各個(gè)組件下游服務(wù)交互,而是和渲染網(wǎng)關(guān)進(jìn)行交互,渲染網(wǎng)關(guān)會(huì)根據(jù)終端傳入的頁(yè)面標(biāo)識(shí),在配置后臺(tái)拿到對(duì)應(yīng)頁(yè)面的配置,代理請(qǐng)求下游服務(wù),拿到各組件的數(shù)據(jù)統(tǒng)一進(jìn)行下發(fā)。通過(guò)這樣的形式,可以有效地減少終端和各后端的溝通協(xié)作成本,同時(shí)這種標(biāo)準(zhǔn)化構(gòu)建的組件,可以很方便地進(jìn)行跨頁(yè)面的復(fù)用,提升迭代效率。

組件標(biāo)準(zhǔn)化除了對(duì)開(kāi)發(fā)的收益之外,對(duì)產(chǎn)品業(yè)務(wù)同樣有很大的幫助,之前的產(chǎn)品迭代過(guò)程缺乏集中的沉淀,導(dǎo)致每次新功能需要做展示時(shí),即使展示樣式跟之前的功能很類(lèi)似,但由于沒(méi)有地方查閱,依然會(huì)找UI重新設(shè)計(jì),研發(fā)重新開(kāi)發(fā)實(shí)現(xiàn)。這也是導(dǎo)致一個(gè)組件上展示樣式爆炸式增長(zhǎng)的主要原因。進(jìn)行標(biāo)準(zhǔn)化之后,產(chǎn)品業(yè)務(wù)能夠在平臺(tái)上看到組件上當(dāng)前所有的展示樣式,新功能可以選擇復(fù)用之前的模板,提升研發(fā)效率,同時(shí)也能集中對(duì)組件和模板進(jìn)行管控,保持體驗(yàn)的統(tǒng)一。

通過(guò)組件的標(biāo)準(zhǔn)化,整體的需求開(kāi)發(fā)模式變成了如下的形式:

834a93f0-25d4-11ee-962d-dac502259ad0.png

組件標(biāo)準(zhǔn)化建設(shè)過(guò)程,主要是渲染網(wǎng)關(guān)和組件管理平臺(tái)的建設(shè),下面重點(diǎn)展開(kāi)介紹下這兩部分的詳細(xì)方案:

渲染網(wǎng)關(guān)

渲染網(wǎng)關(guān)主要提供了兩個(gè)接口,layout接口和data接口,layout接口負(fù)責(zé)下發(fā)頁(yè)面的布局信息,包括頁(yè)面的一些靜態(tài)配置以及有哪些組件等信息,data接口則負(fù)責(zé)獲取組件渲染所需的數(shù)據(jù)。在實(shí)際運(yùn)行過(guò)程中,考慮到性能和體驗(yàn)的問(wèn)題,在layout接口,會(huì)將核心組件的數(shù)據(jù)也進(jìn)行返回,端上拿到layout的數(shù)據(jù)之后就能夠進(jìn)行頁(yè)面的渲染,對(duì)于頁(yè)面上一些非核心可異步加載的組件,端上在拿到layout數(shù)據(jù)后,會(huì)再請(qǐng)求data接口獲取這些組件的數(shù)據(jù)。詳細(xì)的交互如下所示。

8371d73a-25d4-11ee-962d-dac502259ad0.png

組件管理平臺(tái)

組件管理平臺(tái)主要是提供一個(gè)配置后臺(tái),管理組件相關(guān)的內(nèi)容,主要功能包括:

頁(yè)面管理,管理頁(yè)面標(biāo)識(shí)和頁(yè)面組件關(guān)系等,可以在頁(yè)面管理里配置對(duì)應(yīng)頁(yè)面包含哪些組件,并且可以進(jìn)行一些組件實(shí)驗(yàn)和灰度的配置,頁(yè)面也提供了版本管理的能力。

組件管理,對(duì)組件進(jìn)行定義,并且對(duì)組件的模板進(jìn)行管理,包括模板的UI規(guī)范、IDL交互協(xié)議等。

數(shù)據(jù)源管理,對(duì)下游數(shù)據(jù)源進(jìn)行注冊(cè)、參數(shù)映射轉(zhuǎn)換等,組件在注冊(cè)到頁(yè)面時(shí)會(huì)配置對(duì)應(yīng)的數(shù)據(jù)源,這樣網(wǎng)關(guān)就能根據(jù)配置直接代理請(qǐng)求拿到組件數(shù)據(jù)。

組件全景圖,為產(chǎn)品業(yè)務(wù)打造的組件視圖,業(yè)務(wù)和產(chǎn)品可以在上面追蹤到當(dāng)前app有哪些頁(yè)面,每個(gè)頁(yè)面上是由哪些組件組成,每個(gè)組件上支持哪些展示樣式,也能看到有哪些功能會(huì)在這個(gè)組件下進(jìn)行展示,這些功能的流量是如何分配的。

838ba084-25d4-11ee-962d-dac502259ad0.png

除了上面提到的核心管理能力外,管理平臺(tái)在開(kāi)發(fā)體驗(yàn)上也提供了一些能力,比如多版本功能,可以實(shí)現(xiàn)類(lèi)似git的多分支并行配置開(kāi)發(fā)測(cè)試;網(wǎng)關(guān)接口文檔和mock能力,由于所有組件交互協(xié)議是托管在平臺(tái)上的,平臺(tái)會(huì)基于此實(shí)現(xiàn)接口文檔和下游組件數(shù)據(jù)的mock功能,提高開(kāi)發(fā)聯(lián)調(diào)效率。

功能接入標(biāo)準(zhǔn)化

功能接入標(biāo)準(zhǔn)化的主要思路是統(tǒng)一一套標(biāo)準(zhǔn)的渲染處理邏輯,不同領(lǐng)域服務(wù)進(jìn)行接入使用,這樣不僅能夠減少領(lǐng)域服務(wù)間的重復(fù)建設(shè),也能夠讓功能接入方式統(tǒng)一,不再需要進(jìn)行適配。為了統(tǒng)一渲染處理邏輯,我們?cè)贒ukang框架基礎(chǔ)上擴(kuò)充了渲染框架能力,將渲染流程固化為上下文構(gòu)建->功能過(guò)濾->功能決策→功能渲染。其中上下文構(gòu)建是組裝渲染所需的必要上下文數(shù)據(jù),功能過(guò)濾是根據(jù)地域、時(shí)間、品類(lèi)等規(guī)則過(guò)濾掉當(dāng)前場(chǎng)景下不展示的功能,功能決策是對(duì)剩余的功能進(jìn)行優(yōu)先級(jí)排序,選擇最終展示的功能,功能渲染則是選中的功能進(jìn)行數(shù)據(jù)的填充。除了渲染框架以外,我們還沉淀了一些標(biāo)準(zhǔn)可復(fù)用的能力,比如開(kāi)城、白名單、物料管理等等,這些能力的相關(guān)配置我們統(tǒng)一建設(shè)了功能管理平臺(tái)進(jìn)行集中管理。

下面介紹下渲染框架和功能管理平臺(tái)的詳細(xì)建設(shè)方案。

渲染框架

渲染框架主要思路是通過(guò)一套統(tǒng)一的功能執(zhí)行流程,對(duì)功能進(jìn)行標(biāo)準(zhǔn)化約束,框架限定了功能的執(zhí)行流程依據(jù)上下文構(gòu)建->功能過(guò)濾->功能決策->功能渲染,框架約束的只是執(zhí)行流程,具體邏輯依然是相關(guān)功能閉環(huán)實(shí)現(xiàn)。比如功能過(guò)濾,如果只是簡(jiǎn)單的開(kāi)城過(guò)濾,業(yè)務(wù)方可以直接使用標(biāo)準(zhǔn)的開(kāi)城能力;如果有一些不能抽象的復(fù)雜策略,業(yè)務(wù)方可以在自己的包中編碼實(shí)現(xiàn)。這樣既能保持功能的標(biāo)準(zhǔn)化定義,也能保持業(yè)務(wù)的靈活性。

83dac98e-25d4-11ee-962d-dac502259ad0.png

功能管理平臺(tái)

功能管理平臺(tái)主要提供功能管理能力,平臺(tái)的主要功能如下:

功能展示策略配置,結(jié)合沉淀的城市、品類(lèi)、場(chǎng)景等展示規(guī)則,配置不同功能對(duì)應(yīng)的展示策略

功能優(yōu)先級(jí)配置,配置組件下功能間的優(yōu)先級(jí),優(yōu)先級(jí)支持多個(gè)分組,比如不同城市,優(yōu)先級(jí)可能是不一樣

功能文案物料配置,配置對(duì)應(yīng)功能展示所需的文案以及相關(guān)物料,這部分由于不同功能的配置方式差別很大,我們結(jié)合了內(nèi)部的一個(gè)通用配置平臺(tái)實(shí)現(xiàn),在通用配置平臺(tái)上,rd先根據(jù)實(shí)際需求,進(jìn)行功能的文案和物料的配置模板開(kāi)發(fā),功能管理平臺(tái)和該通用配置平臺(tái)打通,將對(duì)應(yīng)的配置頁(yè)面集成進(jìn)來(lái),形成統(tǒng)一的配置平臺(tái)。

功能全鏈路視圖,該視圖主要提供給產(chǎn)品業(yè)務(wù)使用,之前由于缺少統(tǒng)一的規(guī)范和沉淀,一個(gè)功能在哪些地方進(jìn)行了透出,各個(gè)地方的效果轉(zhuǎn)化如何,很難在一個(gè)集中的地方看到。通過(guò)我們的標(biāo)準(zhǔn)化之后,我們可以提供功能的全鏈路視圖,方便的看到每個(gè)功能在哪些組件上進(jìn)行了透出,對(duì)應(yīng)的流量分布是怎樣的,轉(zhuǎn)化漏斗如何等等。

84396d68-25d4-11ee-962d-dac502259ad0.png

數(shù)據(jù)標(biāo)準(zhǔn)化

對(duì)組件和功能接入進(jìn)行標(biāo)準(zhǔn)化之后,數(shù)據(jù)標(biāo)準(zhǔn)化就水到渠成了,我們只需要在每個(gè)階段的日志中,記錄前面定義的頁(yè)面、組件、模板、功能等唯一標(biāo)識(shí),同時(shí)打通數(shù)據(jù)鏈路,按照統(tǒng)一的規(guī)范進(jìn)行數(shù)據(jù)上報(bào)、采集、清洗和聚合,就能夠形成一套標(biāo)準(zhǔn)的數(shù)據(jù)方案,在后面的功能開(kāi)發(fā)過(guò)程,不需要再進(jìn)行額外的數(shù)據(jù)開(kāi)發(fā),根據(jù)組件或功能的標(biāo)識(shí)就能夠看到需要的數(shù)據(jù)。

埋點(diǎn)協(xié)議統(tǒng)一

埋點(diǎn)協(xié)議統(tǒng)一的核心就是讓不同服務(wù)的埋點(diǎn)信息能夠聚合起來(lái),只要大家采用一套固定協(xié)議,約定好聚合的字段,通過(guò)數(shù)據(jù)采集清洗等步驟進(jìn)行聚合,就可以實(shí)現(xiàn)數(shù)據(jù)的統(tǒng)一。我們制定了前端上報(bào)、網(wǎng)關(guān)下發(fā)日志、數(shù)據(jù)源服務(wù)日志等一系列的協(xié)議,統(tǒng)一了頁(yè)面、組件、模板和功能等標(biāo)識(shí)。整體的思路如下所示,通過(guò)平臺(tái)統(tǒng)一管控埋點(diǎn)統(tǒng)一配置,各個(gè)服務(wù)利用sdk的方式對(duì)上報(bào)埋點(diǎn)進(jìn)行統(tǒng)一。

8460c282-25d4-11ee-962d-dac502259ad0.png

數(shù)據(jù)鏈路打通

打通從終端到后端服務(wù)的數(shù)據(jù)鏈路,通過(guò)標(biāo)準(zhǔn)的協(xié)議,將數(shù)據(jù)聚合到統(tǒng)一的數(shù)倉(cāng)中,進(jìn)而形成統(tǒng)一的數(shù)據(jù)看板。主要數(shù)據(jù)鏈路示意如下所示:

8482a17c-25d4-11ee-962d-dac502259ad0.png

總結(jié)

綜上所述,我們通過(guò)組件、功能接入和數(shù)據(jù)的標(biāo)準(zhǔn)化,完成了整個(gè)跨端統(tǒng)一渲染平臺(tái)的建設(shè),目前該平臺(tái)還在持續(xù)建設(shè)推廣中,渲染網(wǎng)關(guān)、組件管理平臺(tái)、渲染框架、埋點(diǎn)規(guī)范等已經(jīng)建設(shè)完成,功能管理平臺(tái)、數(shù)據(jù)鏈路還在建設(shè)中。當(dāng)前該統(tǒng)一渲染平臺(tái)已經(jīng)接入了20+頁(yè)面,未來(lái)將繼續(xù)覆蓋到所有的渲染場(chǎng)景。

平臺(tái)的整體的系統(tǒng)架構(gòu)圖如下所示:

84a8eb0c-25d4-11ee-962d-dac502259ad0.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1501

    瀏覽量

    62034
  • 架構(gòu)
    +關(guān)注

    關(guān)注

    1

    文章

    514

    瀏覽量

    25475
  • 網(wǎng)約車(chē)
    +關(guān)注

    關(guān)注

    3

    文章

    222

    瀏覽量

    11370

原文標(biāo)題:只會(huì) CRUD?滴滴這 DDD 架構(gòu)建設(shè)方案太強(qiáng)了!支持 iOS/Android/網(wǎng)頁(yè)多種終端

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    網(wǎng)絡(luò)安全體系基礎(chǔ)架構(gòu)建設(shè)

    網(wǎng)絡(luò)安全體系基礎(chǔ)架構(gòu)建設(shè)知識(shí) ? ?
    的頭像 發(fā)表于 09-11 09:36 ?1908次閱讀
    網(wǎng)絡(luò)安全體系基礎(chǔ)<b class='flag-5'>架構(gòu)建設(shè)</b>

    基于阿里云數(shù)加MaxCompute的企業(yè)大數(shù)據(jù)倉(cāng)庫(kù)架構(gòu)建設(shè)思路

    摘要:數(shù)加大數(shù)據(jù)直播系列課程主要以基于阿里云數(shù)加MaxCompute的企業(yè)大數(shù)據(jù)倉(cāng)庫(kù)架構(gòu)建設(shè)思路為主題分享阿里巴巴的大數(shù)據(jù)是怎么演變以及怎樣利用大數(shù)據(jù)技術(shù)構(gòu)建企業(yè)級(jí)大數(shù)據(jù)平臺(tái)。本次分享嘉賓是來(lái)自阿里
    發(fā)表于 03-15 12:43

    5G網(wǎng)絡(luò)的建設(shè)方案

      本文提出了5G組網(wǎng)架構(gòu),并根據(jù)實(shí)際網(wǎng)絡(luò)建設(shè)場(chǎng)景,總結(jié)了2.6GHz頻段5G網(wǎng)絡(luò)建設(shè)方案。同時(shí),針對(duì)2.6GHz頻段4G/5G協(xié)同組網(wǎng)進(jìn)行了分析,提出了4G/5G協(xié)同組網(wǎng)相關(guān)建議?!?/div>
    發(fā)表于 12-03 14:03

    MPLAB PM3滴滴滴滴滴滴 后死機(jī)了 無(wú)法連接電腦

    MPLAB PM3滴滴滴滴滴滴后死機(jī)了 無(wú)法連接電腦 有沒(méi)有遇到同樣問(wèn)題的朋友
    發(fā)表于 06-12 09:32

    黑客攻防入門(mén)與進(jìn)階ddd

    黑客攻防入門(mén)與進(jìn)階ddd黑客攻防入門(mén)與進(jìn)階ddd
    發(fā)表于 02-23 15:45 ?9次下載

    基于SOA架構(gòu)混合業(yè)務(wù)呼叫中心平臺(tái)建設(shè)方案李大連

    基于SOA架構(gòu)混合業(yè)務(wù)呼叫中心平臺(tái)建設(shè)方案_李大連
    發(fā)表于 03-17 08:00 ?0次下載

    SOA概念及架構(gòu)要素與基于SOA的數(shù)據(jù)中心建設(shè)方案

    本文介紹了結(jié)合自來(lái)水公司構(gòu)建的數(shù)據(jù)中心設(shè)計(jì)方案,解析了SOA的基本概念與架構(gòu)要素。
    發(fā)表于 10-12 17:36 ?10次下載
    SOA概念及<b class='flag-5'>架構(gòu)</b>要素與基于SOA的數(shù)據(jù)中心<b class='flag-5'>建設(shè)</b><b class='flag-5'>方案</b>

    哥只知道滴滴打車(chē),突然被叫停的滴滴打驢到底是什么鬼?

    滴滴打車(chē)大家聽(tīng)過(guò),但是滴滴打驢你聽(tīng)過(guò)嗎?當(dāng)然這個(gè)滴滴打驢軟件和滴滴公司沒(méi)有一點(diǎn)關(guān)系,這是一家奇特的網(wǎng)約車(chē)服務(wù)“驢的出行”,用戶可以在網(wǎng)上呼叫電動(dòng)車(chē)、摩托車(chē)、三輪車(chē),網(wǎng)友們紛紛稱(chēng)
    的頭像 發(fā)表于 12-25 09:20 ?6413次閱讀

    《賽博朋克2077》發(fā)售當(dāng)天已回本

    《賽博朋克2077》到底有多火,發(fā)售當(dāng)天就已經(jīng)回本,成績(jī)真的是太強(qiáng)了
    的頭像 發(fā)表于 12-13 10:37 ?1690次閱讀
    《賽博朋克2077》發(fā)售當(dāng)天已回本

    用好DDD必須先過(guò)Spring Data關(guān)

    DDD 是一種領(lǐng)域驅(qū)動(dòng)的設(shè)計(jì)方法,旨在通過(guò)建立對(duì)領(lǐng)域模型的清晰理解來(lái)解決業(yè)務(wù)問(wèn)題。和事務(wù)腳本不同,DDD 使用面向?qū)ο笤O(shè)計(jì)來(lái)應(yīng)對(duì)復(fù)雜的業(yè)務(wù)場(chǎng)景。
    的頭像 發(fā)表于 03-07 09:38 ?2146次閱讀

    淺談微服務(wù)架構(gòu)的分解設(shè)計(jì)方案

    領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) (DDD) 方法是一種構(gòu)建復(fù)雜軟件應(yīng)用程序的方法,它基于面向?qū)ο箢I(lǐng)域模型的開(kāi)發(fā)。
    發(fā)表于 03-13 09:44 ?343次閱讀

    談?wù)労蠖?b class='flag-5'>架構(gòu)的演進(jìn)過(guò)程:N-Layered和DDD架構(gòu)介紹

    在本文中,我們討論了 N-layered、DDD、六邊形、洋蔥和清潔架構(gòu)。這些只是眾多存在的架構(gòu)中的一部分,是一些比較出名的架構(gòu)。你可能還聽(tīng)說(shuō)過(guò) BCE、DCI 等。
    發(fā)表于 08-16 10:08 ?635次閱讀
    談?wù)労蠖?b class='flag-5'>架構(gòu)</b>的演進(jìn)過(guò)程:N-Layered和<b class='flag-5'>DDD</b><b class='flag-5'>架構(gòu)</b>介紹

    DDD是什么?DDD核心概念梳理

    DDD 是什么,DDD 的英文全稱(chēng)是 Domain-Driven Design,翻譯過(guò)來(lái)就是領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)。
    的頭像 發(fā)表于 09-07 11:12 ?8713次閱讀
    <b class='flag-5'>DDD</b>是什么?<b class='flag-5'>DDD</b>核心概念梳理

    DDD學(xué)習(xí)與感悟——向屎山?jīng)_鋒

    一種思想,旨在提供一種大型復(fù)雜軟件的設(shè)計(jì)思路和規(guī)范。通過(guò)DDD思想可以讓我們的業(yè)務(wù)架構(gòu)、系統(tǒng)架構(gòu)、部署架構(gòu)、數(shù)據(jù)架構(gòu)、工程
    的頭像 發(fā)表于 09-24 13:31 ?226次閱讀
    <b class='flag-5'>DDD</b>學(xué)習(xí)與感悟——向屎山?jīng)_鋒

    在DVEVM上通過(guò)ddd運(yùn)行Demo

    電子發(fā)燒友網(wǎng)站提供《在DVEVM上通過(guò)ddd運(yùn)行Demo.pdf》資料免費(fèi)下載
    發(fā)表于 10-15 10:05 ?0次下載
    在DVEVM上通過(guò)<b class='flag-5'>ddd</b>運(yùn)行Demo