消息鏈路優化之弱感知鏈路優化

背景

閒魚的消息系統作為溝通買家與賣家的工具,增進理解、促進信任,對閒魚的商品成交有重要的價值,是提升用戶體驗最關鍵的環節。

閒魚消息系統面臨的問題包括:在線消息的延遲問題、離線推送的到達率問題、消息玩法與消息底層系統的耦合過強。

現階段離線推送的問題最為關鍵,對用戶體驗影響較大,本文優先解決離線推送的到達問題。

消息系統現狀

強感知鏈路與弱感知鏈路

根據閒魚客戶端是否在線,閒魚的整體消息鏈路大致可以分為強感知鏈路和弱感知鏈路。

強感知鏈路由發送方客戶端、idleapi-message(閒魚的消息網關)、heracles(閒魚的消息底層服務)、accs(阿里自研的長連接通道)、接收方客戶端組成。整條鏈路的核心指標在於端到端延遲和消息到達率。強感知鏈路的雙方都是在線的,消息到達客戶端就可以保證接收方感知到。強感知鏈路的主要痛點在消息的端到端延遲。

弱感知鏈路與強感知鏈路的主要不同在於:弱感知鏈路的接收方是離線的,需要依賴離線推送這樣的方式送達。因此弱感知鏈路的用戶感知度不強。其核心指標在於消息的到達率,而非延遲。當前弱感知鏈路的主要的問題是到達率不高。

閒魚消息架構

這裡放一張閒魚消息系統的架構圖,大家感受下整體鏈路:

消息鏈路優化之弱感知鏈路優化

HSF是一個遠程服務框架,是dubbo的內部版本。tair是阿里自研的分佈式緩存框架,支持 memcached、Redis、LevelDB 等不同存儲引擎。agoo是阿里的離線推送中臺,負責整合不同廠商的離線推送通道,向集團用戶提供一個統一的離線推送服務。accs是阿里自研的長連接通道,為客戶端、服務端的實時雙向交互提供便利。lindorm是阿里自研的NoSQL產品,與HBase有異曲同工之妙。域環是閒魚消息優化性能的核心結構,用來存儲用戶最新的128條消息。

強感知鏈路和弱感知鏈路在通道選擇上是不同的。強感知鏈路使用accs這個在線通道。弱感知鏈路使用agoo這個離線通道。

弱感知鏈路問題分析

鏈路這件事情,比較抽象。首先需要分析鏈路的核心指標、鏈路的環節、鏈路的瓶頸,然後才能著手優化。問題分析清楚,也就成功了一半。

何為弱感知

本期先帶大家看看閒魚的弱感知鏈路優化。弱感知鏈路是指閒魚的離線推送系統。相比較於在線消息和端內推送,離線推送難以確保被用戶感知到。典型的情況包括:

  • 未發送到用戶設備。因為離線通道的token失效、參數錯誤、用戶關閉應用通知、用戶已卸載等原因,推送未送達用戶設備。這種情況可以從通道的返回分析。

  • 發送到用戶設備但沒有展示到系統通知欄。閒魚曾遇到通道返回成功,但是用戶未看到推送的案例。具體原因仍在分析,這種情況佔比很少。

  • 展示到通知欄,並被系統摺疊。不同安卓廠商對推送的摺疊策略不同,摺疊的原因包括:點擊率、應用在廠商處的權重、推送的數量等。推送被摺疊後,需要用戶主動展開才能看到推送內容,觸達效果會明顯變差。

  • 展示到通知欄,並被用戶忽略。離線推送的點擊率相比於在線推送更低,原因包括:用戶不願意查看推送;用戶看到了推送,但是對內容不感興趣;用戶在忙別的事,無暇處理。

離線推送用戶感知度不高,閒魚稱之為弱感知鏈路。

弱感知鏈路的構成

閒魚的弱感知鏈路分為系統、通道、用戶三個部分,包含Hermes、agoo、廠商、設備、用戶、承接頁這幾個環節。

消息鏈路優化之弱感知鏈路優化

從推送的產生到用戶最終進入閒魚,共分為如下幾個步驟:

Step 1. Hermes是閒魚的用戶觸達系統,負責人群管理、內容生成、時機把控,是整個弱感知鏈路的起點。

Step 2. agoo是阿里內部承接離線推送的中臺,是閒魚離線推送能力的基礎。

Step 3. agoo實現離線推送依靠的是廠商的推送通道,例如:蘋果的apns通道、Google的fcm通道、以及國內各大廠商的自建通道。

Step 4. 通過廠商的通道,推送最終出現在用戶的設備上,這是用戶能感知到推送的前提條件。

Step 5. 如果用戶剛巧看到這條推送,推送的內容也很有趣,在用戶的主動點擊下。會喚起閒魚,打開承接頁,進而給用戶展示個性化的商品。到此,弱感知鏈路就完成了使命。

弱感知鏈路面臨的問題

弱感知鏈路的核心問題在於:

  • 推送的消息是否投遞給了用戶。

  • 用戶是否有感知

這對應推送的兩個階段:

  • 推送到達設備

  • 用戶查看推送並點擊

其中,到達設備這個階段是最基礎的,也是本次優化的核心。我們可以將每一步的消息處理量依次平鋪,展開為一張漏斗圖,從而直觀的查看鏈路的瓶頸。漏斗圖斜率最大的地方是優化的重點,差異小的地方不需要優化。

消息鏈路優化之弱感知鏈路優化

通過分析閒魚的漏斗圖,弱感知鏈路的優化重點在三個方面:

  • agoo受理率。agoo受理率是閒魚發送推送的數量到可以通過agoo(阿里承接離線推送的中臺)轉發到廠商通道的數量之間的漏斗。

  • 廠商受理率。廠商受理率是agoo中臺受理的量到廠商返回成功的量之間的漏斗。

  • Push點擊。

有了優化方向,我們來看看優化手段吧。

弱感知鏈路優化

我們跟隨推送的視角,順著鏈路看下閒魚的優化。

agoo受理率優化

用戶的推送,從 Hermes 站點搭乘“班車”,駛向下一站:agoo。這是推送經歷的第一站,到站一看,傻眼了,只有不到一半的推送到站下車了。這是咋回事嘞?這就要先說說 agoo 了,調用 agoo 有兩種方式:

  • 指定設備和客戶端,agoo直接將推送投遞到相應的設備

  • 指定用戶和客戶端,agoo根據內部的轉換表,找到用戶對應的設備,再進行投遞。

閒魚不保存用戶的設備信息。因此,閒魚是按照用戶來調用agoo的。同時,因為由於沒有用戶的設備信息,並不知道用戶是 iOS 客戶端還是 Android 客戶端。工程側不得不向 iOS 和 Android 都發送一遍推送。雖然保證了到達,但是,一半的調用都是無效的。為了解這個問題,我們使用了agoo的設備信息。將用戶轉換設備這一階段提前到了調用 agoo 之前,先明確用戶對應的設備,再指定設備調用 agoo,從而避免無效調用。

消息鏈路優化之弱感知鏈路優化

agoo調用方式優化後,立刻剔除了無效調用,agoo受理率有了明顯提升。至此,我們總算能對 agoo 受理失敗的真正原因做一個高大上的分析了。根據統計,推送被 agoo 拒絕的主要原因是:用戶關閉了通知權限 同時,對 agoo 調用數據的進一步分析發現。有部分用戶找不到對應的設備。優化到此,我們猛然發現多了兩個問題。那就優化唄:

  • 通知體驗優化,引導打開通知權限

  • 與agoo共建設備庫,解決設備轉換失敗的問題

這兩個優化方向又是一片新天地,我們擇日再聊。

廠商受理率優化

推送到達 agoo ,分機型搭乘廠商“專列”,駛向下一站:用戶設備。這是推送經歷的第二站。出站查票,發現竟然超員了。於是乎,閒魚每天有大量推送因為超過廠商設定的限額被攔截。提供推送通道的廠商,為了保證用戶體驗,會對每個應用能夠推送的消息總量進行限制。這個限制會根據推送的類型和應用的用戶規模設定。推送主要分為產品類的推送和營銷類的推送。對於產品類推送,廠商會保證到達;對於營銷類推送,廠商會進行額度限制。未標記的推送默認作為營銷類推送對待。閒魚剛好沒有對推送進行標記,因此觸發了廠商的推送限制。這對閒魚的用戶來說,會帶來困擾。閒魚的交易,很依賴買賣家之間的消息互動。這部分消息是需要確保到達的。同樣,訂單類的消息、用戶的關注,也需要保證推送給用戶。我們和主流廠商進行了合作。將閒魚的Push分為即時通訊消息、訂單狀態變化、用戶關注內容、營銷消息這幾類,並進行相應標記。同時,在業務上,我們也進行了推送的治理。將用戶關注度不高的消息,取消推送,避免打擾。經過這些優化,閒魚因為超過廠商限額而被攔截的推送實現了清零。

Push點擊優化

在日常的開發測試過程中,閒魚的工程師們發現了推送的兩個體驗問題:

  • 用戶點擊Push有開屏廣告

  • 營銷Push 也有權限校驗,更換用戶登陸後無法點擊

對於開屏廣告功能,閒魚增加了Push點擊跳廣告的能力。針對Push的權限校驗功能,閒魚根據場景做了細分。涉及個人隱私的推送,保持權限校驗不變。營銷類的推送,放開權限校驗。以上是點擊體驗的優化,我們還需要考慮用戶的點擊意願。用戶點擊量與推送的曝光量、推送素材的有趣程度相關。推送的曝光量又和推送的到達量、推送的到達時機有關。通過優化agoo受理率、廠商受理率,我們解決了推送到達量的瓶頸。在推送內容上,我們需要優化的是推送的時機和相應的素材。在推送時機上,算法會根據用戶的偏好和個性化行為數據,計算每個用戶的個性化推送時間,在用戶空閒的時間推送。避免在不合適的時間打擾用戶,同時也能提升用戶看到推送的可能性。在推送素材上,算法會根據素材的實時點擊反饋,對素材做實時賽馬。只發用戶感興趣的素材,提高用戶點擊意願。

鏈路優化效果

通過分析鏈路的瓶頸並進行相對應的優化,整體鏈路有了不錯的提升,到達率相對提升了兩位數。

後續計劃

今天主要和大家聊一下消息鏈路中的一環:弱感知鏈路的優化。消息系統整體,還是一個比較複雜的領域。閒魚在消息的發展過程中,面臨著如下問題:

  • 如何進行消息的鏈路追蹤

  • 如何保證IM消息的快速到達

  • 如何將消息的玩法和底層能力分離

  • 離線推送中如何通過用戶找到對應的設備

在後續的文章中,我們會和大家一一討論這些主題。預知後事如何,且聽下回分解。

消息鏈路優化之弱感知鏈路優化


分享到:


相關文章: