阿里妹導讀:IFTTT是一個被稱爲 「網絡自動化神器」 的創新型互聯網服務理念,它既實用,概念又簡單,能夠經過標準化協議知足用戶的強需求,讓各類互聯網產品爲用戶服務,2010年剛推出,就擁有了極高的熱度。閒魚 IFTTT 是基於閒魚的業務場景與 IFTTT 理念結合後產生的,上線以來,它提供了買賣雙方實時雙向互動能力,平均天天處理關係數據數億條,點擊率翻倍,給團隊注入了新能量。今天就由閒魚技術的工程師劍辛,爲你們揭曉這個系統。
在閒魚生態裏,用戶之間會有不少種關係。其中大部分關係是由買家觸發,聯繫到賣家,好比買家經過搜索、收藏、聊天等動做與賣家產生聯繫;另一部分是平臺與用戶之間的關係。對這些關係分析以後咱們發現這些關係中存在兩個問題:數據庫
上面提到的場景通過抽象概括以後都是同一個範式:當某個條件被知足以後,就會觸發相對應的動做。這個範式是 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 規範對業務進行建模,分爲Channel、Trigger和Action層,其中 Channel 層是數據底層,將 Trigger 和 Action 關聯後組成標準Recipe。阿里雲
接下來咱們說一下閒魚 IFTTT 詳細技術方案,方案以下:
總體技術方案按照業務建模的結構圖細化,補充依賴的技術組件。總體流程再也不細述,針對流程中重點模塊詳細說明。
場景快速接入
設計場景快速接入的目的是讓業務對接入閒魚 IFTTT 無感知,由於在最開始的設計中,場景接入是準備經過在業務邏輯裏增長AOP切面,將業務數據和場景上報。但由於這種方式對業務自己有必定侵入,增長業務執行的RT並且不夠靈活,最終被否決。
而如今的場景快速接入方案解決了這些問題,經過SLS接入全部應用的海量網絡請求日誌,記錄請求的URL、參數和響應;將 SLS 做爲 Blink 流計算任務的數據源;根據 diamond 動態下發的規則實時篩選網絡請求URL和參數,把數據按照指定格式組裝後上報給 Channel 層。
場景快速接入方案將業務邏輯與場景接入解耦,支持快速接入,靈活變動且延遲低,是針對大數據場景接入的高性能解決方案。
計算用戶名單
計算用戶名單模塊採用責任鏈模式設計,由於在不一樣 Trigger 場景中,業務對用戶名單的計算和篩選邏輯都是不一樣的。經過責任鏈模式,將主流程與業務篩選邏輯解耦,並支持各業務靈活定製篩選邏輯,互不干擾。
PushAction
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的概念雖然簡單,卻經過標準化協議知足用戶的強需求——讓各類互聯網產品爲用戶服務。這其實也給咱們互聯網從業者一些思考:在新機遇面前,到底是快速投入比較重要仍是抽象標準協議解決一類問題更加有效?
本文來自雲棲社區合做夥伴「阿里技術」,如需轉載請聯繫原做者。