超級 App 手機百度雲端架構設計與個性化推薦

weixin_33766168發表於2015-07-06

2015 年 6 月 28 日下午,百度與 InfoQ 攜手舉辦了手機百度“雲和端技術實踐”沙龍活動。這是手機百度首次公開超級 App 背後的技術知識。活動分雲端和客戶端技術兩個會場同時舉辦,吸引了眾多技術愛好者前來學習交流。現場人數爆滿,氣氛熱烈。

\\

手機百度產品總經理,百度副總監黎科峰出席會議並簡要介紹了手機百度的業務狀況和講師團隊成員。他談到,手機百度作為百度在移動網際網路時代的億級使用者流量入口,不僅支撐著百度內部產品,更希望打造一個開放平臺,支撐眾多第三方行業及應用的發展,從連線人與資訊擴充到連線人與服務。比如開啟手機百度就可以看到 9.9 上門推拿服務。手機百度的未來應用前景擁有很大的想像空間,在雲端和移動客戶端技術業務的實現上也積累了很多寶貴經驗和創新實踐!

\\

下面是此次技術沙龍活動雲端分會場的主題演講概要總結:

\\

主題一:個性化在手機百度中的實踐(蘭田)

\\\\

手機百度是一個超級 app , 不僅為使用者提供搜尋服務,而是覆蓋了使用者生活的各個方面。挑戰是非常多的,首先使用者獲取資訊成本不斷增高,在時間和流量有限的情況下,如何能夠滿足使用各種垂類資訊(小說,視訊),各種團購,各種app, 各種O2O服務。然後是使用者多種多樣,需要對不同的使用者進行場景化和個性化的運營和推送。主題先介紹了個性化任務在手百上的願景:希望每個使用者的手機百度都是獨一無二的,使用者可以最快捷,最有效的發現此時此刻最適合自己的資訊和服務。主題從移動使用者的畫像(Profile)談起,進而介紹了傳統的推薦演算法,然後探討了移動端給推薦帶來的機會,之後以百度生活頻道採用的推薦作為案例講解,最後展望了手百個性化系統的未來。

\\

手百個性化在設計的時候就考慮了精準豐富的使用者標籤,包括使用者本身的資訊,如性別、年齡、職業、教育與消費等,還有使用者的目的如興趣、關注、需求。豐富的標籤在手百的實際使用中起到很重要的作用,可以進行卡片推薦,幫助個性化解決冷啟動問題,幫助產品更加了解使用者的需求,幫助運營選擇特定興趣使用者並進一步推薦相關運營活動。蘭田給出了對95後使用者行為分析的例子,展現了95後使用者對遊戲和動漫更感興趣,而95前使用者則對購物和美食等話題更感興趣。

\\

主題接下來介紹了傳統的推薦系統,從使用者行為出發,根據使用者和使用者,item和item之間的各種關聯為使用者做出推薦,主要有兩種形式,一個是相關推薦,另一個是列表推薦,目前在手百上的應用主要是視訊和小說兩個垂直應用。特別地,蘭田講解了相似性這一推薦系統的基石,從亞馬遜2003年提出的協同過濾入手,簡要介紹了空間中相距近的點具有相同性質這一樸素概念,並給出了概率解釋。隨後他介紹了常用的相似度量,分析了優缺點。如基於使用者的計算量大,但可以帶來新穎的推薦,基於item的計算量相對小,是大多數推薦系統採用的度量方式,而基於內容的可解決冷啟動問題,但需要專家知識。目前手百採用的是item+內容相結合的度量方式。

\\

主題接下來給出了手百推薦系統的現有架構如下圖:

\\

從圖中可以看出整個架構非常靈巧鬆散,模組之間都是通過API連線,可以進行比較靈活的配置。底層機器學習和資料探勘相關方法構建在Hadoop之上,輸入有統計和行為資料,而輸出則通過推薦演算法的計算由推薦API給出。

\\

手百推薦系統有兩大難點,一是使用者數量極大,離線訓練模型規模大,一週有千萬數量級。二是需要整合多個資源方的內容,需要在資料合併和清洗上做大量工作,保證資源的質量。但與此同時,手百具有相當大的兩個優勢,一是百度內部機器學習資源豐富,有易用的並行框架。處理過億的三元組,可以在10分鐘內搞定。二是百度有大量的使用者搜尋資料和使用者畫像資料,可以幫助使用者更好的進行冷啟動。

\\

399b2867970407ccc1d867a2f16d7b17.png

\\

與傳統的pc端相比,移動端對推薦系統的需求更大,比如由於螢幕小,顯示空間有限等原因,就需要更精準的推薦。另外,使用者資訊更容易收集,因為無需登入,且使用頻率很高,各方面資料的反饋都更加及時。以及,移動端固有的特點可以為推薦系統引入更多的緯度,如時間地點和使用場景等。

\\

主題隨後介紹了推薦系統的演變,從單純的評分到排序,到頁面優化最後到基於上下文的推薦,越來越多地引入更多的特徵,以尋求更加精準的推薦結果。主題還進一步介紹了一些推薦演算法,如Point-wise、Pairwise 等排序學習的演算法。

\\

接下來,主題給出了一個推薦系統在O2O領域的嘗試,試圖通過手百建立人和服務的連線,所採用的資源來自糯米,地圖和直達號等多個第三方服務,給出的例項框架圖如下:

\\

609574f149a9e3201f624c1a9a2f9a91.png

\\

針對在推薦系統中使用場景的問題,主題給出了人工匹配規則,修正然後作為特徵加入學習演算法的技術方案。具體來講,人工配置規則 (專家知識),由 PM 和運營人工配置了近百條規則,由規則引擎根據場景和使用者畫像進行匹配。人工規則作為先驗概率 P,和熱門推薦點選率相當,使用者實際點選和常識並不一樣。然後利用使用者實際點選情況修正規則。將使用者實際點選修正先驗概率,效果比人工配置提高 0.5% 左右。最後將場景作為特徵,融入到機器學習演算法中。機器學習演算法還涉及到一個特徵選擇問題,目前手百所用的特徵包括但不限於使用者、物料和場景等特徵,而採用的演算法除了常用的邏輯迴歸以外,還有最近業界尤其是影象領域常用的深度學習網路模型。根據模型輸出的概率值對推薦結果進行重新排序,在融入場景特徵後,發現效果提升了 2%。

\\

主題接下來探討了從推薦向個性化發展的問題。推薦只是個性化的一種形式,不是所有的個性化都是推薦(買電影票的時候,幫助我選擇我經常訂的位置 )。現有推薦系統大多是幫助使用者發現某種商品/服務,個性化有更廣泛的產品含義,可以具體到背景皮膚的選擇,產品 tag 的位置。這方面手百以個性化卡片為入口做了一些嘗試,產品目的是豐富手機百度首屏的內容,將使用者日常關注的內容用卡片的形式展現出來。通過個性化的推薦引導使用者新增。和傳統的推薦不同,卡片數目少,且興趣點基本上是熱點興趣(傳統推薦是頭部+長尾)。卡片之間關聯關係弱,無法進行協同過濾。會根據PM 和運營需求,隨時新增卡片,需要把這個卡片推送給最合適的使用者。需要不斷的挖掘使用者新的特徵。需要挖掘使用者的興趣,最近的意圖,人生階段等各個方面。因此需要通過使用者畫像和產品屬性進行規則匹配。

\\

主題最後對手百推薦和個性化的未來做了展望,更完善的推薦系統框架。及時反饋,更迅速的響應使用者的行為。做出最及時的推薦。更好的推薦效果展示和演算法控制平臺。進一步研究場景在推薦系統中的作用。引入更多的機器學習 model,研究深度學習在推薦系統中的應用。甚至提到了更遠的類似 Google Now 的個人生活助手產品。

\\

主題二:手機百度雲端架構設計與實踐(韓超\u0026amp;黎博)

\\\\

主題主要介紹了手百雲端在實際開發過程中一些工程化的運用,尤其是涉及傳統PHP工程師做web網站和超級APP的技術轉型和深化的過程。

\\

主題首先分析了目前手百雲端所面對的問題,鑑於手百非純粹客戶端,而是瀏覽器和CS模式混合的產品,所面對的主要可分為三個問題:軟體高併發、大容量,需要高靈活性和可靠性,然後還需要解決由於定製話程度高而帶來的相容性問題。對此,主題給出了一個多層解決方案,底層包含資源的雲端聚合、不同功能的Cache和多種DB。中間層包含動態介面展示、使用者賬戶狀態承載、多協議多平臺支援和資訊主動送達。上層測包括配置和運營,H5和NA並存支援以及客戶端的動態更新。傳統的Web網站的構建中,LAMP架構中的PHP+MySql+快取已經有了成熟理論和實踐。作為超級APP的伺服器工程師,需要繼承Web網站的技術底蘊,並針對自身特性做出改進。這種改進主要來自三方面:效能優化、相容擴充套件性和雲端控制性。

\\

主題開始講解了效能優化的部分,效能是任何伺服器設計必須考慮的問題,面對超級APP帶來的高QPS、峰值的高併發、不確定的寫請求,系統不可能無限制地擴容,軟體設計要先行。Web網站效能優化的N種武器,要換一種方式用起來。需要考慮兩方面的因素,一是伺服器的容量,伺服器端有限的CPU、IO和記憶體會面對無限的客戶端,壓力會傳遞給資料儲存、快取、後端服務,雲端的每一個環節都有可能被壓垮。二是使用者體驗,從前做Web網站,現在做Native客戶端。Native並非天然就比Web網站快,因為瀏覽器和伺服器的優化手段已經很成熟。效能優化部分本主題講的比較深入,主要涉及了Page快取、快取協商和請求合併等,具體讀者可參考幻燈片。

\\

主題接下來分享了相容和擴充套件性方面的內容,一個超級APP的伺服器,它所面臨開發模型並不是一個點對點的開發,而是一個基於時間軸的矩陣,這就涉及兩方面內容,一個方面客戶端本身在升級,因此伺服器在升級的時候,需要相容歷史所有的客戶端,並且還要向未來進行展望。更復雜的是客戶端本地還有豐富的儲存,升級過程中也需要考慮,裡面包含了一些不可控的因素,尤其是這種多版本多平臺的情況下。手百在這方面有幾個策略,首先服務端被動相容的條件是客戶端的特性可知,通過客戶端自身的資訊進行相容,例如:作業系統、版本號、渠道等。然後是程式碼分支方式,把穩定基礎性功能分成不同的模組,找到邏輯上需要區分的地方,由上層程式碼對基礎功能組合呼叫。再有資源獲取,調整後端請求、持久化儲存、快取的獲取順序,便於排列組合和再處理。還有特製化邏輯,瞭解客戶端的現實分佈和業務情況,利用引數預處理篩選功能,對結果通過用個性化引數進行調整、過濾和合並。最後是快取策略,提高Cache的命中率和Cache使用效率;

\\

主題最後一部分討論了雲端可控性的問題。由於客戶端APP的固有特點,不可強制要求使用者手中的客戶端版本,從超級APP的功能上,要突破此瓶頸,在客戶端不升級的情況下,實現雲端可控的特性。主要包括三方面,一是動態展示,根據需要將最新的資料、樣式、介面送達給使用者。二是動態事件和行為,服務端產生的事件可送達客戶端(客戶端拉取或服務端推送),可控制客戶端的各種行為。三是動態的配置和策略,伺服器上具有動態配置和策略,客戶端通過獲得之後,根據自身的情況進行實施。

\\

主題給出了手百雲端的技術架構如下圖,主要解決了幾個業務特性帶來的挑戰。一個是軟體生命週期較長。二是高併發且流量不均。三是資源連線眾多且不穩定。四是需求比較複雜。更多關於雲端開發除錯的手段和技巧可參見後續視訊與幻燈片資料。

\\

aaf6c16e68345fbfead002ecaac92735.png

\\

主題三:手機百度前端探索之路(夏藝天)

\\

主題主要分享了手百的前端探索之路,從開發到工程,再到釋出的整個過程。典型的小團隊開發,利用Zepto、OpenJs等類庫,在合理的組織下,撐起了手百的前端開發。

\\

第一部分是開發環節。主要介紹了SASS框架,講解了手百如何針對SASS進行改造和定製,並開發了模擬客戶端的環境。在基礎類庫方面,Zepto是用的比較多的構件。基礎部分還包括了基於EMD模組的實現,以及模組間、事件和跨域通訊等。其他類目包括UI元件、監控、統計和運營等等。在此基礎上,手百前端團隊對一些常見的東西給出瞭解決方案,一個是前端的模板,二是本地快取方案,三是SPA(單頁面應用解決方案)。

\\

第二部分是工程化。所謂的工程化,一開始前端可能做的功能化是類似於手動的去壓縮程式碼,現在有了很多工程化的解決方案,手機百度工程化是用公司統一的FIS整合方案,同時對FIS的外掛進行改造,通過這些東西可以完成以上的全部的工作,以及更多的比如依賴分析、程式碼檢測,按需載入,程式碼檢測程式碼的規範,還有快取、壓縮、合併最後達到整個模板編印的效果。整個構建化流程,有一個線下的系統,線下構建去完成前端程式碼的壓縮以及拼接,完成這部分功能後,首先會把其它資源打個包,然後在釋出的時候這個靜態資源會發布到CDN伺服器上,同時線下的構建工具會去生成一個類似於資源地圖的東西,記載每一個模組每一個JS檔案的依賴,它大概是一個表,編輯整個檔案去生成記錄所有模組與模組依賴的一個表。然後在訪問的時候,template根據頁面所需要的模組,在資源地圖,完成拼接過程,交給使用者,這就是整個工程化構建的流程。

\\

2d53991f0ab9ccbd11b8d7669fc60d59.png

\\

第三部分是釋出。主要是利用Tiny快速搭建平臺,通過上線系統進行配置管理,然後通過模組化的介面提供API,並利用MDP裝置畫像平臺進行監控統計。

\\

主題還對前端發展的未來進行了展望,即更加的混合模式的開發。例如不在利用網路來請求前端程式碼,而是直接預裝到APP,以及React Native模式等。

\\

附:後續 InfoQ 官網會發布本次手機百度“雲和端技術實踐”沙龍的視訊資料,請感興趣的朋友繼續關注!

\\

感謝Raymond Zhao對本文的審校。

\\

給InfoQ中文站投稿或者參與內容翻譯工作,請郵件至editors@cn.infoq.com。也歡迎大家通過新浪微博(@InfoQ@丁曉昀),微信(微訊號:InfoQChina)關注我們,並與我們的編輯和其他讀者朋友交流(歡迎加入InfoQ讀者交流群06e1fec4a87eca3142d54d09844c629f.png)。

相關文章