推薦系統怎樣穩定高效提供服務,持續不斷知足業務需求,持續不斷面對技術挑戰,是每個服務端開發同窗應該持續思考,和持續不斷優化線上服務。算法
之前咱們開發的程序更多的是網站,而且以單體服務形式構建,好處是整個程序一次構建,維護方便,但當公司發展後,組織機構變大,程序由多我的維護,單體程序維護成本高,難於修改,難於持續升級問題就暴漏了出來。影響了線上業務持續發展,產品需求及時上線。緩存
爲了應對大型機構,特別是大型電子商務系統,須要持續不斷優化,將單體程序進行橫向縱向拆分,每一個組織只維護本身的服務,每一個模塊可進行不斷持續的升級優化,微服務將系統拆分,整個系統複雜度下降,而且每一個系統部分,根據本身流量狀況動態調整資源,能夠既保證資源最大化利用,又能夠很好的應對618,雙11等流量大促狀況。微信
對於大部分程序微服務已經可以很好的解決問題。當下個性化推薦系統面臨問題和通常程序有必定差別性,一方面個性化意味着「千人千面」,每一個用戶用到數據都不同,常規緩存策略失效,這就要求對程序不斷優化已保證性能。 多線程
當下個性化推薦正由策略主導,轉型到由機器學習算法,深度學習算法,這一過程對於服務端要求要支持更多數據拉取,個性化推薦服務比較核心指標召回率,準確率。所謂召回率是根據用戶偏好,興趣,熱門等各類條件拉取文章或sku商品數量大小。準確率比較好理解是召回數據裏面多少是用戶願意去點擊的,帶來多少點擊量。 架構
當前今日頭條,淘寶等個性化推薦服務均是構建在微服務架構之上,整個流程是根據用戶信息拉取分類召回集,過濾已經曝光過,已經購買過等分類召回集,根據分類召回集拉取素材,過濾相應曝光,已購買等素材信息,對數據進行品牌,品類分隔優化用戶體驗,這是原來常規邏輯。線上服務接入GBDT,深度學習DNN等模型後,須要根據素材信息,拉取用戶,分類素材,用戶素材交互特徵,場景特徵等多個維度幾十個特徵,這樣特徵須要每一個用戶實時拉取成千上萬組,對於線上服務性能穩定性是極大挑戰,換個角度看對於提高服務端技術水平也是很好機會。機器學習
線上每分鐘10萬次訪問系統實時拉取大量數據而且進行實時模型計算,是個頗有挑戰問題,面對問題咱們怎麼處理呢?首先咱們處理這個核心思路是,職責拆分,將模型CTR計算拆爲單獨服務,召回集由60擴大到200。分佈式
把線上素材特徵召回集一會兒由200擴大到1000,性能一降低到400ms,性能不可接受,經定位分析發現耗時爲計算服務,怎麼樣才能優化GBDT模型計算性能呢?單個線程解決不了,那就多個線程,這時召回集擴大到一千單整個服務性能由原來400毫秒縮到到60毫秒,擴大召回集成功,線上點擊率轉換率獲得提高,你們努力沒有白費,仍是頗有成就感的。微服務
再一次擴大召回集,須要將服務拆成分佈式,微服務節點只拉取分類召回集,素材找回集特徵數據由模型計算節點處理。並分主從節點並由主節點,協調進行分佈式計算,減小IO避免特徵無用傳輸,僅返回有意義的數據素材排序,同時每一個多線程利用多核計算,將召回集擴大到幾千,上萬徹底知足線上需求。性能
線上服務挑戰會一直存在,什麼樣心態面對,會帶來大相徑庭的結果。學習
微信搜索:debugme123
掃描二維碼關注: