社區搜索離線回溯系統設計:架構、挑戰與性能優化|得物技術

一、項目背景

在社區場景中,我們積累了豐富的用戶互動數據。這些歷史互動信息對CTR/CVR預估建模具有重要參考價值,用戶的每次互動都反映了其特定維度的偏好特征。當前,已在多個業務實踐中驗證,基于用戶歷史互動特征進行未來行為預測是有效的。用戶互動序列越長,包含的偏好特征就越豐富,但同時也帶來了更大的技術挑戰。

目前社區搜索領域已經在序列建模方向取得了一些應用成果,顯著提升了搜索效率,但在該方向上仍有優化空間,主要體現在:

算法精排模型現狀:長周期的用戶互動特征尚未被充分利用,現有模型僅使用了基礎標識信息,泛化能力有待提升。我們計劃引入SIM方案來增強個性化序列建模能力,推動搜索效率提升。

迭代效率優化:當前互動特征優化依賴于實時數據采集鏈路,新增特征需要長時間數據積累(2個月以上)才能驗證效果。我們計劃建設用戶特征離線回溯服務,降低算法優化對實時數據的依賴,加快項目迭代速度,提高實驗效率。

離線回溯主要解決迭代效率問題,本文重點探討在社區搜索場景下開發離線回溯,并做離線一致性驗證過程中發現的一些問題,針對這些問題做了哪些優化措施及思考。

二、架構設計

全局架構

序列產出流程鏈路

※ ?在線流程鏈路

在線鏈路通過實時數倉提供全量表和實時流兩種數據源,在特征平臺下構建1w長度的實時用戶畫像,召回階段SP,將畫像傳給SIM引擎,在引擎中完成對用戶序列hard/soft search等異步加工,最終傳給Nuroe,完成在線序列dump落表。

※ ?離線流程鏈路

離線鏈路通過仿真在線的處理邏輯,利用請求pv表和離線數倉提供的10w原始序列,模擬在線序列10w->1w->100的過程,最終產出離線回溯序列。

最終通過在線/離線全鏈路數據的一致性驗證,確認全流程數據無diff(或diff可解釋),序列流程可靠性達標,可交付算法團隊用于模型訓練。

序列產出全局架構

在線架構

在線側抽象GSU模塊支持社區搜索和增長搜索等多場景復用。該模塊在QP(Query Processing)階段后,通過外調基于DSearch構建的SIM引擎進行用戶序列處理。SIM引擎內完成hard/soft search等用戶序列加工,在精排階段前獲取topk序列特征及對應sideinfo,并將其透傳給精排模塊,最終實現用戶序列的落表存儲。

在線通用GSU模塊

離線鏈路

數據產出三階段

※ ?原始序列預處理階段

通過收集一個用戶,按照 [月初ts+1w, ?月末ts] 將序列進行預處理。

※ ?pv表合并序列表階段

按照user_id將畫像和pv表合并,將每個request_id的數據按照request_time過濾處理。

※ ?用戶序列加工階段

完成hard/soft search等用戶序列加工邏輯處理,包括對長期序列按照相似度過濾,對短期序列按照時間過濾等。

離線回溯鏈路圖

三、問題與挑戰

在離線回溯開發階段,主要面臨以下挑戰。

挑戰

※ ?任務執行問題

任務頻繁失敗或執行效率低下,數據規模達單表數TB級別,且序列分布不均,部分長尾用戶序列過長導致嚴重數據傾斜;

※ ?一致性校驗階段問題

異常類型復雜多樣,累計發現25+種異常原因,導致數據diff形態復雜,一致性原因分析困難。修復鏈路冗長,涉及問題修復、在線索引重建、數據累計和離線數據回補,單次修復周期約需一周。

四、從踩雷到填坑的實戰記錄

離線任務運行耗時長的問題

問題說明

初步方案運行時存在兩大問題:

1.任務處理延遲顯著,單個任務運行3-8小時。

2.任務處理無法運行成功頻繁OOM。

任務執行慢

任務頻繁OOM

解決方案

※ 方案優化

任務執行慢主要是有長尾用戶打滿10w長序列,出現數據傾斜問題甚至oom。

通過對鏈路優化,先將原始10w長序列做預處理,由于回溯一般按照一個月跑數據,可以利用pv表先統計有哪些有效用戶,對有效用戶按照 【月初ts+1w, ?月末ts】截取原始序列,獲取相對較短的預處理隊列。

任務傾斜

原始序列預處理

※ ?ODPS任務性能調優

a. 按照?CPU :?MEM?=??1 : 4 調整計算和存儲的比例,可以最大化利用資源,因為我們申請的資源池都是按照這個固定比例來的。

資源沒有最大化使用

b. 在固化計算/存儲比例參數后,可以通過xxx.split.size 和 xxx.num 共同調優。xxx.split.size可以實現輸入分片大小,減少oom機會。xxx.num可以實現擴大并發數,加快任務的執行(xxx代表mapper、reducer、joiner幾個階段)。

分批次完成階段處理

c. 減少自定義UDF使用。在離線任務中有部分邏輯比較復雜,可能需要數據平鋪、聚合、再內置函數等。最好的使用原則是內置函數>“數據平鋪+內置函數”>自定義UDF。由于自定義UDF運行在Java沙箱環境中,需通過多層抽象層 (序列化/反序列化、類型轉換),測試發現大數據量處理過程性能相對最差。

一致性驗證歸因難的問題

問題說明

在線/離線全鏈路數據的一致性驗證過程中,由于按照天級全量dump序列,需要驗證15個序列,每個序列diff量在10w~50w不等,這種多序列大規模的diff問題人工核驗效率太慢。

解決方案

※ ?整體diff率分析

通過統計全序列diff率并聚類分析高diff樣本,定位共性根因,實現以點帶面的高效問題修復。

※ ?diff歸因工具

通過建立數據diff的歸因分類體系(如排序不穩定、特征穿越等),并標注標準化歸因碼,實現對diff問題的快速定位與根因分析,顯著提升排查效率。

歸因碼分類

※ ?重復度統計工具

由于在線受當時環境的影響,離線回溯無法100%復現原始序列,一致性差異在所難免。我們通過聚焦主要特征并統計其重復度,結合「diff率+重復度」雙維度評估方案,為算法決策提供量化依據,有效減少無效迭代。

重復度統計

現狀梳理不足的問題

問題說明

由于前期對業務場景理解不足(如用戶行為模式、異常數據、測試賬戶等),部分潛在問題未在開發階段充分識別,直至數據一致性驗證時才集中暴露,導致需緊急調整數據處理邏輯。由于單次全鏈路修復需3-5天,進而對項目進度造成一定延遲。

問題case1:滑動圖片:離線回溯數據分析時發現序列中大量重復且占比很高,后確定為滑動圖片行為

解決方案:對滑動圖片操作連續多次修改為只記錄第一次

問題case2:合并下單:測試購買序列有id重復,實時數倉反饋購買有合并下單的情況,ts會相同

解決方案:為了保持離線回刷數據穩定性,將序列按照ts/id雙維度排序

問題case3:異常數據:有行為時間戳超過當前時間的異常數據

解決方案:數倉對異常數據丟棄

問題case4:測試賬戶:數據不規范導致數據diff

解決方案:測試賬戶數據忽略

問題case5:query問題:取歸一化后還是原始的query、空字符串問題

解決方案:query為空過濾修復

問題case6:數據穿越問題:畫像原始數據request_time取neuron時間導致

解決方案:在線修改request_time獲取時間,離線回溯前置3s

修復周期長的問題

問題說明

數據問題的完整修復流程包含三個階段,全流程通常需要5-7個工作日完成。

※ ?Diff歸因階段(1-3日)

  • 需要定位數據差異的根本原因,區分是數據異常、處理邏輯錯誤還是業務規則變更導致

  • 涉及多團隊協作排查(數據/算法/工程)

  • 復雜問題可能需要多次驗證

※ ?問題修復階段(1-3日)

  • 根據歸因結果修改代碼邏輯或數據處理流程

  • 可能涉及歷史數據修正

※ ?數據迭代階段(2-3日)

  • 在線畫像引擎部署新數據

  • 累計在線數據

  • 離線畫像回補數據

解決方案

受限于初期人力投入,我們在當前方案基礎上通過多輪版本迭代逐步完成數據一致性驗證。后續將通過工具升級(數據邊界劃分+自動化校驗框架)和數據采樣策略,實現驗證到修復的階躍式提升。

※ ?數據邊界劃分

現行方案離線鏈路都是算法工程來維護,排查鏈路太長,需要數據源有穩定的保障機制。后續將劃分數據邊界,各團隊維護并保障數據模塊在離線的一致性。

數據邊界劃分

※ ?全鏈路采樣方案減少驗證時間

離在線一致性驗證方面耗時較長,主要在于數據量太大,在數倉構建、特征平臺構建、累計數據等流程消耗大量的時間,如果全鏈路先針對少量用戶走通全鏈路,能快速驗證流程可行性。

采樣方案

平臺基建的問題

問題說明

首次構建序列建模體系,由于缺乏標準化基礎設施,被迫采用煙囪式開發模式,導致多鏈路驗證復雜且問題頻發。

平臺待建能力

  • 特征平臺排序功能不足,只支持單一字段排序,不支持多字段聯合排序,導致排序結果不穩定。

  • 特征平臺過濾功能限制,僅支持毫秒級時間戳過濾。

  • 索引構建效率低,個性化行為序列表數據量過大(3TB),導致索引構建壓力大,初始構建耗時約28小時。升級至FS3集群后,構建時間降至12小時左右,最短至7小時,但仍未達理想效率。

五、展望與總結

后續我們將深入研究行業內的優秀解決方案,并結合我們的業務特性進行有針對性的優化。

例如,我們會嘗試實施離在線數據與邏輯一致性方案,這種方案包括以下幾個特點:

  1. 數據一致性:離線與在線共用同一套原始畫像,能夠解決數據源不一致導致的差異問題。

  2. 邏輯一致性:離線與在線都調用GSU服務,實現統一的序列邏輯處理,避免邏輯差異。

  3. 技術架構復雜性:新方案帶來了新的技術挑戰,比如在線處理10萬序列可能引發的I/O問題、離在線的sim引擎采用存算一體和存算分離架構。

綜上,沒有絕對完美的技術方案,最終都是在成本、性能和效率多方面權衡后的相對最優解。

離在線數據與邏輯一致性方案

本次特征回溯雖面臨性能與數據對齊等挑戰,但團隊通過攻堅積累了經驗,為特征平臺后續特征回溯工具化打下基礎,也期待能為后續算法模型迭代帶來質的飛躍。

往期回顧

1.從 “卡頓” 到 “秒開”:外投首屏性能優化的 6 個實戰錦囊|得物技術

2.從Rust模塊化探索到DLB 2.0實踐|得物技術

3.eBPF 助力 NAS 分鐘級別 Pod 實例溯源|得物技術

4.正品庫拍照PWA應用的實現與性能優化|得物技術

5.匯金資損防控體系建設及實踐 | 得物技術

文 / 野雨

關注得物技術,每周更新技術干貨

要是覺得文章對你有幫助的話,歡迎評論轉發點贊~

未經得物技術許可嚴禁轉載,否則依法追究法律責任。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89984.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89984.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89984.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

WPF——自定義ListBox

在閱讀本文前,最好先看看WPF——自定義RadioButton 背景 WPF中實現單選功能通常有兩種方案: - RadioButton組:傳統方案,但代碼冗余 - ListBox定制:通過樣式改造,兼顧數據綁定和UI靈活性 需求 一組選項中…

rancher上使用rke在華為云多網卡的服務器上安裝k8s集群問題處理了

報錯:問題:[[network] Host [192.168.0.213] is not able to connect to the following ports: [192.168.0.213:2379]. Please check network policies and firewall rules]問題: roothwy-isms-210-66:~# gotelnet 172.17.210.66 2379 map[2379:failed] …

xformers包介紹及代碼示例

文章目錄主要特性安裝方式主要優勢使用場景注意事項代碼示例xFormers是由Meta開發的一個高性能深度學習庫,專門用于優化Transformer架構中的注意力機制和其他組件。它提供了內存高效和計算高效的實現,特別適用于處理長序列和大規模模型。github地址&…

CityEngine自動化建模

CityEngine學習記錄 學習網址: 百度安全驗證 CityEngine-CityEngine_Rule-based_Modeling-基于規則建模和輸出模型 - 豆丁網 CityEngine 初探-CSDN博客 City Engine CGA 規則包_cga規則-CSDN博客 CityEngine學習記錄 學習網址:百度安全驗證 CityE…

Nacos+LoadBalancer實現服務注冊與發現

目錄 一、相關文章 二、兼容說明 三、服務注冊到Nacos 四、服務發現 五、服務分級存儲模型 六、查看集群服務 七、LoadBalancer負載均衡 一、相關文章 基礎工程:gradle7.6.1springboot3.2.4創建微服務工程-CSDN博客 Nacos服務端安裝:Nacos服務端…

事務并發-封鎖協議

事務并發數據庫里面操作的是事務。事務特性:原子性:要么全做,要么不做。一致性:事務發生后數據是一致的。隔離性:任一事務的更新操作直到其成功提交的整個過程對其他事務都是不可見的,不同事務之間是隔離的…

大氣波導數值預報方法全解析:理論基礎、預報模型與誤差來源

我們希望能夠像天氣預報一樣,準確預測何時、何地會出現大氣波導,其覆蓋范圍有多大、持續時間有多長,以便為通信、雷達等應用提供可靠的環境保障。 目錄 (一)氣象預報 1.1 氣象預報的分類 1.2 大氣數值預報基礎 1.2…

關于JavaWeb的總結筆記

JavaWeb基礎描述Web服務器的作用是接受客戶端的請求,給客戶端響應服務器的使用Tomcat(最常用的)JBossWeblogicWebsphereJavaWeb的三大組件Servlet主要負責接收并處理來自客戶端的請求,隨后生成響應結果。例如,在處理用…

生成式引擎優化(GEO)核心解析:下一代搜索技術的演進與落地策略

最新統計數據聲稱,今天的 Google 搜索量是 ChatGPT 搜索的 373 倍,但我們大多數人都覺得情況恰恰相反。 那是因為很多人不再點擊了。他們在問。 他們不是瀏覽搜索結果,而是從 ChatGPT、Claude 和 Perfasciity 等工具獲得即時的對話式答案。這…

網編數據庫小練習

搭建服務器客戶端,要求 服務器使用 epoll 模型 客戶端使用多線程 服務器打開數據庫,表單格式如下 name text primary key pswd text not null 客戶端做一個簡單的界面:1:注冊2:登錄無論注冊還是登錄,…

理解 PS1/PROMPT 及 macOS iTerm2 + zsh 終端配置優化指南

終端提示符(Prompt)是我們在命令行中與 shell 交互的關鍵界面,它不僅影響工作效率,也影響終端顯示的穩定和美觀。本文將結合 macOS 上最流行的 iTerm2 終端和 zsh shell,講解 PS1/PROMPT 的核心概念、常見配置技巧&…

Laravel 原子鎖概念講解

引言 什么是競爭條件 (Race Condition)? 在并發編程中,當多個進程或線程同時訪問和修改同一個共享資源時,最終結果會因其執行時序的微小差異而變得不可預測,甚至產生錯誤。這種情況被稱為“競爭條件”。 例子1:定時…

83、形式化方法

形式化方法(Formal Methods) 是基于嚴格數學基礎,通過數學邏輯證明對計算機軟硬件系統進行建模、規約、分析、推理和驗證的技術,旨在保證系統的正確性、安全性和可靠性。以下從核心思想、關鍵技術、應用場景、優勢與挑戰四個維度展…

解決 Ant Design v5.26.5 與 React 19.0.0 的兼容性問題

#目前 Ant Design v5.x 官方尚未正式支持 React 19(截至我的知識截止日期2023年10月),但你仍可以通過以下方法解決兼容性問題: 1. 臨時解決方案(推薦) 方法1:使用 --legacy-peer-deps 安裝 n…

算法與數據結構(課堂2)

排序與選擇 算法排序分類 基于比較的排序算法: 交換排序 冒泡排序快速排序 插入排序 直接插入排序二分插入排序Shell排序 選擇排序 簡單選擇排序堆排序 合并排序 基于數字和地址計算的排序方法 計數排序桶排序基數排序 簡單排序算法 冒泡排序 void sort(Item a[],i…

跨端分欄布局:從手機到Pad的優雅切換

在 UniApp X 的世界里,我們常常需要解決一個現實問題: “手機上是全屏列表頁,Pad上卻要左右分欄”。這時候,很多人會想到 leftWindow 或 rightWindow。但別急——這些方案 僅限 Web 端,如果你的應用需要跨平臺&#xf…

華為服務器管理工具(Intelligent Platform Management Interface)

一、核心功能與技術架構 硬件級監控與控制 全維度傳感器管理:實時監測 CPU、內存、硬盤、風扇、電源等硬件組件的溫度、電壓、轉速等參數,支持超過 200 種傳感器類型。例如,通過 IPMI 命令ipmitool sdr elist可快速獲取服務器傳感器狀態,并通過正則表達式提取關鍵指標。 遠…

Node.js Express keep-alive 超時時間設置

背景介紹隨著 Web 應用并發量不斷攀升,長連接(keep-alive)策略已經成為提升性能和資源復用的重要手段。本文將從原理、默認值、優化實踐以及潛在風險等方面,全面剖析如何在 Node.js(Express)中正確設置和應…

學習C++、QT---30(QT庫中如何自定義控件(自定義按鈕)講解)

每日一言你比想象中更有韌性,那些看似艱難的日子,終將成為勛章。自定義按鈕我們要知道自定義控件就需要我們創建一個新的類加上繼承父類,但是我們還要注意一個點,就是如果我們是自己重頭開始造控件的話,那么我們就直接…

【補充】Linux內核鏈表機制

專題文章:Linux內核鏈表與Pinctrl數據結構解析 目標: 深入解析Pinctrl子系統中,struct pinctrl如何通過內核鏈表,來組織和管理其多個struct pinctrl_state。 1. 問題背景:一個設備,多種引腳狀態 一個復雜的…