天天看點

消息點選率翻倍的背後——閑魚無侵入可擴充IFTTT系統一、面臨問題二、IFTTT概念三、技術方案四、效果驗證五、名詞注解

作者:閑魚技術-劍辛

一、面臨問題

在閑魚生态裡,使用者之間會有很多種關系。其中大部分關系是由買家觸發,聯系到賣家,比如買家通過搜尋、收藏、聊天等動作與賣家産生聯系;另外一部分是平台與使用者之間的關系。對這些關系分析之後我們發現這些關系中存在兩個問題:

  • 使用者産生關系的層次不夠豐富;

    現有系統隻維護了一部分使用者關系,包括收藏、點贊等,使用者關系的層次還不夠豐富。

  • 使用者之間關系是單向且不夠實時;

    在現有的玩法中,買家可以通過多種行為與賣家産生聯系,但賣家不能主動與買家發生關系和互動;而且平台計算的關系都是離線的,對使用者的吸引力不足。

上面提到的場景經過抽象歸納之後都是同一個範式:當某個條件被滿足之後,就會觸發相對應的動作。這個範式是IFTTT的基本理念,而閑魚IFTTT就是對這些問題的解決方案。

二、IFTTT概念

IFTTT是一個被稱為 “網絡自動化神器” 的創新型網際網路服務理念,它很實用而且概念很簡單。IFTTT全稱是 If this then that ,意思是如果滿足“this”條件,則觸發執行“that”動作。IFTTT由三部分構成,分别為Trigger、Action和Recipe。

消息點選率翻倍的背後——閑魚無侵入可擴充IFTTT系統一、面臨問題二、IFTTT概念三、技術方案四、效果驗證五、名詞注解

可以看出IFTTT本身概念并不複雜,它的真正魔力在于“由簡單組成的複雜”,也就是由衆多簡單的IFTTT流程互相銜接成跨越整個網際網路、跨越多平台、跨越多裝置的狀态機。

2.1、閑魚IFTTT

閑魚IFTTT是基于閑魚的業務場景與IFTTT理念結合後産生的,提供IFTTT标準協定封裝,對業務無侵入可擴充的服務編排系統。

消息點選率翻倍的背後——閑魚無侵入可擴充IFTTT系統一、面臨問題二、IFTTT概念三、技術方案四、效果驗證五、名詞注解

閑魚IFTTT的兩個特性對應上述兩個問題,分别是:

  • 多元使用者關系感覺

多元指的是覆寫面,閑魚IFTTT通過更多元度的挖掘,抽象并維護了更豐富的使用者關系。基于使用者關系資料,我們可以産出使用者畫像,并通過更有效的方式觸達使用者。

  • 實時使用者雙向互動

閑魚IFTTT底層具有對使用者關系大資料的高效存儲和處理能力,以支援上層業務中使用者關系實時處理;閑魚IFTTT不僅支援買家到賣家關系,而且通過設計天生支援賣家到買家關系。

閑魚IFTTT把之前平台與使用者的互動、買家到賣家的聯系,切換稱閑魚使用者之間天然的關系互動,對使用者騷擾更少且激活拉回的效果更好,我們基于這個場景設計閑魚IFTTT的技術方案。

三、技術方案

消息點選率翻倍的背後——閑魚無侵入可擴充IFTTT系統一、面臨問題二、IFTTT概念三、技術方案四、效果驗證五、名詞注解

首先按照IFTTT規範對業務進行模組化,分為Channel、Trigger和Action層,其中Channel層是資料底層,将Trigger和Action關聯後組成标準Recipe。

  • Channel

    Channel層在閑魚IFTTT的作用是儲存和管理使用者關系資料,Channel層定義了使用者關系的中繼資料結構,包括關系類型、源賬戶和目标賬戶。Channel層是閑魚IFTTT的基石,Trigger和Action均基于使用者關系資料進一步抽象業務邏輯。

  • Trigger

    Trigger是業務上自定義的觸發事件,與業務息息相關,可能是關注的人上新、浏覽寶貝降價或者是參加的百币奪寶活動開獎等。當Trigger觸發後,閑魚IFTTT會根據Trigger類型和配置的關系類型計算使用者名單,并調用Action層進行處理。

  • Action

    Action層處理對象是Trigger觸發後計算的使用者名單,可以給名單裡的使用者發Push,發權益或者其他定制邏輯。Action本身是标準化、可插拔的元件,業務上可以利用Action元件對使用者名單做AB測試,快速實驗不同Action政策。

接下來我們說一下閑魚IFTTT詳細技術方案,方案如下:

消息點選率翻倍的背後——閑魚無侵入可擴充IFTTT系統一、面臨問題二、IFTTT概念三、技術方案四、效果驗證五、名詞注解

整體技術方案按照業務模組化的結構圖細化,補充依賴的技術元件。整體流程不再細述,針對流程中重點子產品詳細說明。

3.1、場景快速接入

設計場景快速接入的目的是讓業務對接入閑魚IFTTT無感覺,因為在最開始的設計中,場景接入是準備通過在業務邏輯裡增加AOP切面,将業務資料和場景上報。但因為這種方式對業務本身有一定侵入,增加業務執行的RT而且不夠靈活,最終被否決。

而現在的場景快速接入方案解決了這些問題,通過SLS接入所有應用的海量網絡請求日志,記錄請求的URL、參數和響應;将SLS作為Blink流計算任務的資料源;根據diamond動态下發的規則實時篩選網絡請求URL和參數,把資料按照指定格式組裝後上報給Channel層。

場景快速接入方案将業務邏輯與場景接入解耦,支援快速接入,靈活變更且延遲低,是針對大資料場景接入的高性能解決方案。

3.2、計算使用者名單

計算使用者名單子產品采用責任鍊模式設計,因為在不同Trigger場景中,業務對使用者名單的計算和篩選邏輯都是不同的。通過責任鍊模式,将主流程與業務篩選邏輯解耦,并支援各業務靈活定制篩選邏輯,互不幹擾。

3.3、PushAction

Action層是閑魚IFTTT中最重要的一環,會直接觸達到使用者,Action的邏輯會直接影響使用者對平台的直覺感受和活躍率。消息Push是Action中最常見的邏輯,更要防止使用者被騷擾,PushAction邏輯如下:

  • 敏感人群過濾;
  • 疲勞度校驗;
  • 對發送人群進行AB實驗;
  • 組裝消息;
  • 将Action各節點日志同步到SLS,友善檢索和排查問題;
  • 統計消息發送資料及點選資料,為業務後續決策提供依據;

3.3.1、疲勞度

疲勞度是防止使用者被騷擾的關鍵,我們針對疲勞度進行了分層設計,分為三層,第一層為使用者級别疲勞度,控制一個使用者在一個周期内收到消息數量;第二層是業務次元,控制使用者在一個周期内收到某個業務的消息數量;第三層是目标級别,控制使用者在一個周期内收到同一個發送者消息數量。

在業務次元層面,支援靈活控制多個業務聯合疲勞度,保證使用者不會被消息過度騷擾。

消息點選率翻倍的背後——閑魚無侵入可擴充IFTTT系統一、面臨問題二、IFTTT概念三、技術方案四、效果驗證五、名詞注解

3.4、使用者關系存儲

使用者關系資料是閑魚IFTTT的基石,它的特點是存儲量級大,達到TB級别;而且對存儲和查詢的性能要求高,TPS和QPS的峰值都在一萬以上。經過調研,我們發現集團内部開發的Lindorm可以滿足需求。

Lindorm是阿裡内部基于Hbase自研的高性能KV存儲資料庫,對Hbase的性能和穩定性均有一定優化。閑魚IFTTT采用Lindorm作為使用者關系資料存儲,經性能測試驗證資料讀取QPS達到7萬,資料存儲TPS在10萬以上。Lindorm本身性能優異,為閑魚IFTTT高性能奠定基礎。

四、效果驗證

閑魚IFTTT自上線以來,已支援關注上新、浏覽寶貝降價和租房小區上新等多個業務場景,提供買賣雙方實時雙向互動能力,平均每天處理關系資料數億條,處理Trigger量達到上千萬,處理Action量達到億級别,消息點選率較離線push提高1倍以上。

閑魚IFTTT目前支援的是使用者互動場景,後續我們将結合閑魚自身業務特點,對IFTTT進行更高次元抽象,封裝标準Recipe接口,将閑魚IFTTT打造成提供流程編排、管理能力的服務平台。

在我看來,IFTTT從2010年推出以來,在國外有很大的熱度,在網際網路和物聯網領域都有專門的公司和團隊在研發,IFTTT的概念雖然簡單,卻通過标準化協定滿足使用者的強需求-讓各種網際網路産品為使用者服務。這其實也給我們網際網路從業者一些思考:在新機遇面前,究竟是快速投入比較重要還是抽象标準協定解決一類問題更加有效?

五、名詞注解