做者:閒魚技術-劍辛數據庫
在閒魚生態裏,用戶之間會有不少種關係。其中大部分關係是由買家觸發,聯繫到賣家,好比買家經過搜索、收藏、聊天等動做與賣家產生聯繫;另一部分是平臺與用戶之間的關係。對這些關係分析以後咱們發現這些關係中存在兩個問題:網絡
上面提到的場景通過抽象概括以後都是同一個範式:當某個條件被知足以後,就會觸發相對應的動做。這個範式是IFTTT的基本理念,而閒魚IFTTT就是對這些問題的解決方案。數據結構
IFTTT是一個被稱爲 「網絡自動化神器」 的創新型互聯網服務理念,它很實用並且概念很簡單。IFTTT全稱是 *If this then that *,意思是若是知足「this」條件,則觸發執行「that」動做。IFTTT由三部分構成,分別爲Trigger、Action和Recipe。 分佈式
能夠看出IFTTT自己概念並不複雜,它的真正魔力在於「由簡單組成的複雜」,也就是由衆多簡單的IFTTT流程相互銜接成跨越整個互聯網、跨越多平臺、跨越多設備的狀態機。性能
閒魚IFTTT是基於閒魚的業務場景與IFTTT理念結合後產生的,提供IFTTT標準協議封裝,對業務無侵入可擴展的服務編排系統。 測試
閒魚IFTTT的兩個特性對應上述兩個問題,分別是:多維指的是覆蓋面,閒魚IFTTT經過更多維度的挖掘,抽象並維護了更豐富的用戶關係。基於用戶關係數據,咱們能夠產出用戶畫像,並經過更有效的方式觸達用戶。大數據
閒魚IFTTT底層具備對用戶關係大數據的高效存儲和處理能力,以支持上層業務中用戶關係實時處理;閒魚IFTTT不只支持買家到賣家關係,並且經過設計天生支持賣家到買家關係。優化
閒魚IFTTT把以前平臺與用戶的互動、買家到賣家的聯繫,切換稱閒魚用戶之間自然的關係互動,對用戶騷擾更少且激活拉回的效果更好,咱們基於這個場景設計閒魚IFTTT的技術方案。this
接下來咱們說一下閒魚IFTTT詳細技術方案,方案以下: 阿里雲
總體技術方案按照業務建模的結構圖細化,補充依賴的技術組件。總體流程再也不細述,針對流程中重點模塊詳細說明。設計場景快速接入的目的是讓業務對接入閒魚IFTTT無感知,由於在最開始的設計中,場景接入是準備經過在業務邏輯裏增長AOP切面,將業務數據和場景上報。但由於這種方式對業務自己有必定侵入,增長業務執行的RT並且不夠靈活,最終被否決。
而如今的場景快速接入方案解決了這些問題,經過SLS接入全部應用的海量網絡請求日誌,記錄請求的URL、參數和響應;將SLS做爲Blink流計算任務的數據源;根據diamond動態下發的規則實時篩選網絡請求URL和參數,把數據按照指定格式組裝後上報給Channel層。
場景快速接入方案將業務邏輯與場景接入解耦,支持快速接入,靈活變動且延遲低,是針對大數據場景接入的高性能解決方案。
計算用戶名單模塊採用責任鏈模式設計,由於在不一樣Trigger場景中,業務對用戶名單的計算和篩選邏輯都是不一樣的。經過責任鏈模式,將主流程與業務篩選邏輯解耦,並支持各業務靈活定製篩選邏輯,互不干擾。
Action層是閒魚IFTTT中最重要的一環,會直接觸達到用戶,Action的邏輯會直接影響用戶對平臺的直觀感覺和活躍率。消息Push是Action中最多見的邏輯,更要防止用戶被騷擾,PushAction邏輯以下:
疲勞度是防止用戶被騷擾的關鍵,咱們針對疲勞度進行了分層設計,分爲三層,第一層爲用戶級別疲勞度,控制一個用戶在一個週期內收到消息數量;第二層是業務維度,控制用戶在一個週期內收到某個業務的消息數量;第三層是目標級別,控制用戶在一個週期內收到同一個發送者消息數量。
在業務維度層面,支持靈活控制多個業務聯合疲勞度,保證用戶不會被消息過分騷擾。
用戶關係數據是閒魚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的概念雖然簡單,卻經過標準化協議知足用戶的強需求-讓各類互聯網產品爲用戶服務。這其實也給咱們互聯網從業者一些思考:在新機遇面前,到底是快速投入比較重要仍是抽象標準協議解決一類問題更加有效?
更多前沿技術,歡迎訂閱公衆號「閒魚技術」