揭秘!閒魚拉新投放系統如何設計

閒魚技術發表於2019-05-28

背景

閒魚目前已經是國內最大的閒置物品交易平臺。隨著閒魚體量的增長和使用者規模不斷擴大,閒魚App上的一個普通banner抑或是feeds中的一張普通的卡片,每天都可能被數以千萬計的人看到。

為了更好地服務好廣大的使用者群體,更加個性化的內容推薦和更加精細化的素材投放就顯得尤為必要了。今天我們來聊一聊如何設計一個可以精準觸達使用者、運營快速試錯、解放開發生產力的投放系統。

思路

投放是什麼?舉例來說,往城市廣場的一塊廣告牌上在不同時段不同場景下更換廣告畫就是一種投放,當然網際網路技術帶來了人的維度,不同使用者看到的廣告畫可能也是不一樣的。我們來看下這樣一個系統應該包含哪些功能。

1、我們把“城市廣場上的那塊廣告牌”叫資源位,那麼需要一個服務端介面來獲取需要透出的素材。 2、不同資源位需要透出的素材格式可能是不一樣的,可能是banner,可能是feeds,可能是運營自定義的手填資料,可能是任何合理的資料結構。 3、同一個資源位,不同時段,針對不同平臺、不同人群,透出的素材可能是不一樣的,那麼就需要有一個服務來在一堆素材中篩選出適合資源位的內容。在資源位命中了多個素材的時候,還需要有一些機制來裁決出最終透出的那一個。

詳細設計

我們設計的投放系統扮演的是前端實體資源位和後端多種資料來源之間的橋樑的角色。它負責從各個業務資料來源中根據一定規則篩選出在特定資源位上需要透出的資料,基本的資料流如下圖所示:

揭秘!閒魚拉新投放系統如何設計

圖中的這些概念在我們的系統中是怎麼分解的呢?

資源位

所謂資源位,在我們這個體系內,是指前端頁面上的實體坑位。是技術同學在產品開發中建立的。理所當然,資源位需要消費的資料結構是在開發階段就確定了,比如banner、feeds或者結構非常靈活的手填資料等。

在我們這個體系裡,我們用一個 schema 描述資源位需要消費的資料結構。

揭秘!閒魚拉新投放系統如何設計

這個 schema 是用 json 描述的。技術同學在前端頁面上開發實體資源位後,需要在我們的系統中建立對應的虛擬資源位,並透過一個圖形化的 json schema 編輯器來定義這個資源位需要消費的資料結構。

揭秘!閒魚拉新投放系統如何設計

投放物料

上述 schema 定義了一個資源位所需要消費的資料的格式。但是光有 schema 是不夠的,因為資源位要消費的是資料,而不是資料結構本身。在我們的系統中,我們用一個動態表單模組根據schema生成動態的表單,產品運營同學透過動態表單生產的資料,我們稱之為投放物料。資源位消費的就是投放物料。

對於一些手填資料,表單直接產生的資料就是資源位可用的了。但是對於 Feeds 之類的,表單往往只能定義 Feeds 的一些諸如選品等特徵欄位。對於這類特殊型別的資料來源,服務端就不能簡單的直接返回資料了,需要根據這些特徵欄位,做一些資料查詢和資料解析工作,再返回給前端一個完整規範的資料。

揭秘!閒魚拉新投放系統如何設計

投放單元

前述文章說到,同一個banner,可能對新使用者投放的是紅包,對年輕男孩子投放的是手機數碼內容,對年輕女孩子投放的是美妝服飾。我們把這個連線了資源位、投放物料與多個投放因子的橋樑叫做投放單元。

那麼投放單元需要有多少個投放因子呢?其實是視業務而定的,我們認為基礎的投放因為應該包含 投放時段、投放人群、投放平臺、投放AB配置等。

當資源位向投放系統發起請求拉取資料時,投放系統在這個資源位上掛載的所有投放單元中根據投放因子篩選出命中的投放單元,最後將命中的投放單元上掛載的投放物料返回給前端的投放資源位。當命中了多個投放單元時,需要有些方法來裁決出最終勝出的那一個。這個方法簡單點做,可以在投放單元中配一個權重,篩選時最後選擇權重高的那個,也可以引入演算法決策,根據投放的 ctr 資料做排序。

揭秘!閒魚拉新投放系統如何設計

投放計劃

投放計劃是產品運營對多個資源位管理形式。簡單來說,一個投放計劃下,可以掛載多個關聯的資源位。試想一下,一次大促活動可能涉及到幾十個資源位的投放,將這些資源位組織到同一個投放計劃中進行管理,可以更加方便操作以及檢視投放效果。

端側接入

對於前端來說,我們希望透過提供一個封裝的npm包,透過簡單呼叫,傳入resourceId(資源位ID) 即可獲取資料。

揭秘!閒魚拉新投放系統如何設計

這種呼叫方式對業務呼叫方來說是比較優雅的,但是對頁面效能來說卻是不省心的。因為一個頁面往往由很多個資源位組成,每個資源位單獨發起請求就會形成大量的併發請求,不僅頁面效能會降低,還會對伺服器產生比較大的qps壓力。

針對這種情況,我們做了一個小最佳化。服務端提供一個批次查詢的介面,前端SDK內部,每10ms 對模組的請求呼叫做一次聚合,將單個資源位的資料獲取轉化成批次的查詢。負面影響是對部分資源位的資料載入造成最大10ms的延時,優點是提升了頁面整體的效能,有效減小了服務端QPS壓力。

揭秘!閒魚拉新投放系統如何設計

效果

上述投放系統在閒魚拉新業務實踐中穩定了run了半年多,為閒魚應用內的數百個資源位提供投放能力支援,每天服務千萬級別的閒魚使用者。

既實現了資源位的精細化投放,提高了單個資源位的利用率,又賦能運營更自由地進行各種拉新投放實驗,減小試錯成本,還減少了技術同學頻繁參與運營實驗改造的開發工作量,解放了技術同學的生產力。

寫在最後

上述文章介紹了一個簡易的投放系統的設計思路,本質上是一個連線前端實體資源位和服務端多種資料來源的橋樑的設計。

其中有很多能力是依賴了團隊內部其它同學努力的成果,比如: 1、描述資源位資料結構的 json schema如何設計 2、根據json schema動態生成的表單怎麼實現 3、人群校驗的服務和能力 4、AB測試的能力 5、feeds 的選品服務 6、個性化動態banner能力

這個系統還有很多可以最佳化的點,比如資料迴流如何做得更好,怎樣引入演算法能力對策略篩選進行最佳化等等,都是未來值得努力的方向。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69900359/viewspace-2645957/,如需轉載,請註明出處,否則將追究法律責任。

相關文章