565
汽車大全
百億級全網輿情分析係統存儲設計
前言
在時下互聯網信息的浪潮下,信息的傳播速度遠超我們的想象。微博裏一條大V的帖子,朋友圈的一個狀態更新,熱門論壇的一條新聞,購物平台的購物評價,可能會產生數以萬計的轉發,關注,點讚。如果是一些非理性負麵的評論會激發人們的負麵感,甚至影響到消費者對企業品牌的認同,如果不能及時的采取正確的應對措施,會造成難以估計的損失。所以我們需要一個高效的全網輿情分析係統,幫助我們實時的觀測輿情。
這個全網輿情分析係統,可以實現百億條網頁數據的存儲、實時新增網頁的抓取和存儲並能對新增網頁做實時的元數據提取。有了提取結果,我們還需要進行進一步的挖掘分析,這些分析包括但不限於
- 輿情的影響力診斷,從傳播量級和擴散趨勢來做預測,確定是否最終形成輿情。
- 傳播路徑分析,分析輿情傳播的關鍵路徑。
- 用戶畫像,對輿情的參與者提供共性特征勾勒,如性別,年齡,地域和感興趣話題。
- 情感分析,分析新聞或者評價是正麵還是負麵。情感分類後進行統計聚合。
- 預警設置,我們支持輿情討論量閾值設置,達到閾值後通知推送業務方,避免錯過輿情的黃金參與時間。
這些挖掘後的輿情結果會被推送至需求方,同時也提供接口給各業務方搜索,查詢使用。下麵我們就展開討論係統設計中可能會遇到的問題,我們會重點關注係統設計中存儲相關的話題,針對這些問題找到一個最優化的方案。
係統設計
對於一個輿情係統,首先需要一個爬蟲引擎,去采集各大主流門戶,購物網站,社區論壇原始頁麵內容,微博,朋友圈的各類消息信息。采集到的海量網頁,消息數據(百億級別)需要實時存儲下來。再根據網站url獲取網頁之前還需要判斷一下是否是之前爬過的頁麵,避免不必要的重複爬取。采集網頁後我們需要對網頁進行萃取,去除不必要的標簽,提取標題,摘要,正文內容,評論等。萃取後的內容進入存儲係統方便後續查詢,同時還需要把新增的抽取結果推送至計算平台進行統計分析,出報表,或者後續提供輿情檢索等功能。計算的內容根據算法不同可能需要新增數據,也可能需要全量數據。而輿情本身的時效敏感性決定了我們係統一定要能高效處理這些新增內容,最好是秒級別延時後就可以檢索到新熱搜。
我們可以總結下整個數據流如下:
根據上圖我們不難發現,設計一個全網輿情的存儲分析平台,我們需要處理好抓取,存儲,分析,搜索和展示。具體我們需要解決如下問題:
- 如何高效存儲百億級別的網頁原始信息,為了提高輿情分析的全麵性,準確性,我們往往希望可以盡可能多的爬取網頁信息,再根據我們設置的權重聚合。所以網頁的曆史全庫會比較大,積累數百億的網頁信息,數據量可以達到百TB甚至數PB。在數據量如此之大的情況下,我們還需要做到讀寫毫秒級別的低延時,這使得傳統數據庫難以滿足需求。
- 如何在爬蟲爬取網頁之前判斷是否之前已經爬取過,針對普通網頁,輿情在意他們的時效性,可能我們對同一個網頁隻希望爬取一次,那我們就可以利用網頁地址做爬取前去重,減少不必要的網頁資源浪費。所以我們需要分布式存儲提供基於網頁的高效隨機查詢。
- 如何新增原始網頁存儲完成後進行實時的結構化提取,並存儲提取結果。這裏我們原始的網頁可能是包括各種html的標簽,我們需要去除這些html的標簽,提取出文章的標題,作者,發布時間等。這些內容為後續輿情情感分析提供必要的結構化數據。
- 如何高效的對接計算平台,流式新增提取後的結構化數據進行實時的計算。這裏我們需要根據網頁,消息描述的內容做分類,進行情感識別,識別後的結果統計分析。由於全量分析時效性差,加上輿情往往關注最新的新聞,評論,所以我們必須做增量分析。
- 如何提供高效的輿情搜索,用戶除了訂閱固定關鍵詞的輿情以外,做一些關鍵詞搜索。例如希望了解競爭公司新產品的一些輿情分析。
- 如何實現新增輿情的實時推送,為了保證輿情的時效性,我們不僅需要持久化輿情分析結果,同時也要支持推送輿情結果。推送的內容通常是我們實時分析出來的新增輿情。
係統架構
針對上麵介紹這些問題,我們下麵來介紹下如何基於阿裏雲上的各類雲產品來打造全網百億級別的輿情分析平台,我們會重點關注存儲產品的選型和如何高效的對接各類計算,搜索平台。
爬蟲引擎我們選用ECS,可以根據爬取量決定使用ECS的機器資源數,在每天波峰的時候也可以臨時擴容資源進行網頁爬取。原始網頁爬取下來後,原始網頁地址,網頁內容寫入存儲係統。同時如果想避免重複爬取,爬蟲引擎抓取之前要根據url列表進行去重。存儲引擎需要支持低延時的隨機訪問查詢,確定當前url是否已經存在,如果存在則無需重複抓取。
為了實現網頁原始內容的實時抽取,我們需要把新增頁麵推送至計算平台。之前的架構往往需要做應用層的雙寫,即原始網頁數據入庫同時,我們重複寫入一份數據進入計算平台。這樣的架構會需要我們維護兩套寫入邏輯。同樣的在結構化增量進入輿情分析平台中,也有類似的問題,抽取後的結構化元數據也需要雙寫進入輿情分析平台。輿情的分析結果也需要一份寫入分布式存儲,一份推送至搜索平台。到這裏我們可以發現,圖中的三根紅線會帶來我們對三個數據源的雙寫要求。這會加大代碼開發工作量,也會導致係統實現,維護變的複雜。每一個數據源的雙寫需要感知到下遊的存在,或者使用消息服務,通過雙寫消息來做解耦。傳統數據庫例如mysql支持訂閱增量日誌binlog,如果分布式存儲產品在可以支撐較大訪問,存儲量的同時也可以提供增量訂閱就可以很好的簡化我們的架構。
網頁數據采集入庫後,增量流入我們的計算平台做實時的元數據抽取,這裏我們可以選用函數計算,當有新增頁麵需要提取時觸發函數計算的托管函數進行網頁元數據抽取。抽取後的結果進入存儲係統持久化後,同時推送至MaxCompute進行輿情分析,例如情感分析,文本聚類等。這裏可能會產生一些輿情報表數據,用戶情感數據統計等結果。輿情結果會寫入存儲係統和搜索引擎,部分報表,閾值報警會被推送給訂閱方。搜索引擎的數據提供給在線輿情檢索係統使用。
在介紹完整體架構後,下麵我們看下在阿裏雲上如何做存儲選型。
存儲選型
通過架構介紹我們再總結一下對存儲選型的要求:
- 可以支撐海量數據存儲(TB/PB級別),高並發訪問(十萬TPS~千萬TPS),訪問延時低。
- 業務隨著采集訂閱的網頁源調整,采集量會動態調整。同時一天內,不同時間段爬蟲爬下來的網頁數也會有明顯波峰波穀,所以數據庫需要可以彈性擴展,縮容。
- 自由的表屬性結構,普通網頁和社交類平台頁麵的信息我們需要關注的屬性可能會有較大區別。靈活的schema會方便我們做擴展。
- 對老數據可以選擇自動過期或者分層存儲。因為輿情數據往往關注近期熱點,老的數據訪問頻率較低。
- 需要有較好的增量通道,可以定期把新增的數據導出至計算平台。上麵的圖中有三段紅色虛線,這三部分都有個共同的特點需要可以實時的把增量導至對應的計算平台做計算,計算後的結果再寫入對應的存儲引擎。如果數據庫引擎本身就支持增量,則可以很大程度簡化架構,減少之前需要全量讀區篩選增量,或者客戶端雙寫來實現得到增量的邏輯。
- 需要可以有較好的搜索解決方案(本身支持或者可以數據無縫對接搜索引擎)。
有了這些需求後,我們需要使用一款分布式的NoSQL數據來解決海量數據的存儲,訪問。多個環節的增量數據訪問的需求,業務的峰值訪問波動進一步確定彈性計費的表格存儲是我們在這套架構中的最佳選擇。表格存儲的架構介紹可以參考表格存儲數據模型
TableStore(表格存儲)相比同類數據庫一個很大的功能優勢就是TableStore(表格存儲)有較完善的增量接口,即Stream增量API,Stream的介紹可以參考表格存儲Stream概述。場景介紹可以參考Stream應用場景介紹,具體API使用可以參考JAVA SDK Stream。有了Stream接口,我們可以很方便的訂閱TableStore(表格存儲)的所有修改操作,也就是新增的各類數據。同時我們基於Stream打造了很多數據通道,對接各類下遊計算產品,用戶甚至不需要直接調用Stream API,使用我們的通道直接在下遊訂閱增量數據,自然的接入了整個阿裏雲的計算生態。針對上麵架構中提到的函數計算,MaxCompute,ElasticSearch和DataV,TableStore(表格存儲)都已經支持,具體使用可以參考:
TableStore(表格存儲)在屬性列上,是自由的表結構。針對輿情分析這個場景,隨著輿情分析算法的升級我們可能會新增屬性字段,同時針對普通網頁和微博這類社交頁麵的屬性也可能不盡相同。所以自由表結構相比傳統數據庫可以很好的匹配我們這個需求。
在架構中,我們有三個存儲庫需求。分別是原始頁麵庫,結構化元數據庫和輿情結果庫。前兩者一般是一個離線存儲分析庫,最後一個是一個在線數據庫。他們對訪問性能,存儲成本有著不同的需求。表格存儲有兩種類型的實例類型支持存儲分層,即高性能和容量型。高性能適用於寫多讀多的場景也就是做為在線業務存儲使用。容量型適合寫多讀少的場景,也就是離線業務存儲用。他們的寫入單行延時都可以控製在10毫秒內,讀取高性能可以保持在毫秒級別。TableStore(表格存儲)同時支持TTL,設置表級別數據過期時間。根據需求,輿情結果我們可以設置TTL,隻提供近期數據的查詢,較老的輿情自動過期刪除。
有了TableStore(表格存儲)的這些功能特性,係統對存儲選型的六項要求就可以得到很好的滿足,基於TableStore(表格存儲)可以完美的設計和實現全網輿情存儲分析係統。
後記
本文對實現海量數據輿情分析這一場景中會遇到的存儲和分析問題進行了總結,介紹了如何通過使用阿裏雲自研的TableStore(表格存儲)在滿足業務基本數據量的前提下,通過Stream接口和計算平台的對接實現架構簡化。TableStore(表格存儲)是阿裏雲自主研發的專業級分布式NoSQL數據庫,是基於共享存儲的高性能、低成本、易擴展、全托管的半結構化數據存儲平台,輿情數據存儲分析是TableStore在大數據處理領域的重要應用之一。其他場景使用可以參考TableStore進階之路。
更多的應用場景和技術探討,歡迎加入我們的釘釘交流群(群號:11789671)。
最後更新:2017-11-29 14:34:58