百亿级全网舆情分析系统存储设计
百億級全網輿情分析系統存儲設計
前言
在時下互聯網信息的浪潮下,信息的傳播速度遠超我們的想象。 微博里一條大V的帖子,朋友圈的一個狀態更新,熱門論壇的一條新聞, 購物平臺的購物評價,可能會產生數以萬計的轉發,關注,點贊。 如果是一些非理性負面的評論會激發人們的負面感, 甚至影響到消費者對企業品牌的認同,如果不能及時的采取正確的應對措施, 會造成難以估計的損失。所以我們需要一個高效的全網輿情分析系統, 幫助我們實時的觀測輿情。
這個全網輿情分析系統,可以實現百億條網頁數據的存儲、 實時新增網頁的抓取和存儲并能對新增網頁做實時的元數據提取。 有了提取結果,我們還需要進行進一步的挖掘分析,這些分析包括但不限于
這些挖掘后的輿情結果會被推送至需求方,同時也提供接口給各業務方搜索,查詢使用。 下面我們就展開討論系統設計中可能會遇到的問題, 我們會重點關注系統設計中存儲相關的話題, 針對這些問題找到一個最優化的方案。
系統設計
對于一個輿情系統,首先需要一個爬蟲引擎,去采集各大主流門戶,購物網站, 社區論壇原始頁面內容,微博,朋友圈的各類消息信息。 采集到的海量網頁,消息數據(百億級別)需要實時存儲下來。 再根據網站url獲取網頁之前還需要判斷一下是否是之前爬過的頁面,避免不必要的重復爬取。 采集網頁后我們需要對網頁進行萃取,去除不必要的標簽, 提取標題,摘要,正文內容,評論等。萃取后的內容進入存儲系統方便后續查詢, 同時還需要把新增的抽取結果推送至計算平臺進行統計分析, 出報表,或者后續提供輿情檢索等功能。 計算的內容根據算法不同可能需要新增數據,也可能需要全量數據。 而輿情本身的時效敏感性決定了我們系統一定要能高效處理這些新增內容, 最好是秒級別延時后就可以檢索到新熱搜。
我們可以總結下整個數據流如下:
根據上圖我們不難發現,設計一個全網輿情的存儲分析平臺, 我們需要處理好抓取,存儲,分析,搜索和展示。
具體我們需要解決如下問題:
系統架構
針對上面介紹這些問題, 我們下面來介紹下如何基于阿里云上的各類云產品來打造全網百億級別的輿情分析平臺, 我們會重點關注存儲產品的選型和如何高效的對接各類計算,搜索平臺。
爬蟲引擎我們選用ECS,可以根據爬取量決定使用ECS的機器資源數, 在每天波峰的時候也可以臨時擴容資源進行網頁爬取。 原始網頁爬取下來后,原始網頁地址,網頁內容寫入存儲系統。 同時如果想避免重復爬取,爬蟲引擎抓取之前要根據url列表進行去重。 存儲引擎需要支持低延時的隨機訪問查詢,確定當前url是否已經存在, 如果存在則無需重復抓取。
為了實現網頁原始內容的實時抽取,我們需要把新增頁面推送至計算平臺。 之前的架構往往需要做應用層的雙寫,即原始網頁數據入庫同時, 我們重復寫入一份數據進入計算平臺。這樣的架構會需要我們維護兩套寫入邏輯。 同樣的在結構化增量進入輿情分析平臺中,也有類似的問題, 抽取后的結構化元數據也需要雙寫進入輿情分析平臺。 輿情的分析結果也需要一份寫入分布式存儲,一份推送至搜索平臺。 到這里我們可以發現,圖中的三根紅線會帶來我們對三個數據源的雙寫要求。 這會加大代碼開發工作量,也會導致系統實現,維護變的復雜。 每一個數據源的雙寫需要感知到下游的存在,或者使用消息服務,通過雙寫消息來做解耦。 傳統數據庫例如mysql支持訂閱增量日志binlog,如果分布式存儲產品在可以支撐較大訪問, 存儲量的同時也可以提供增量訂閱就可以很好的簡化我們的架構。
網頁數據采集入庫后,增量流入我們的計算平臺做實時的元數據抽取, 這里我們可以選用函數計算,當有新增頁面需要提取時觸發函數計算的托管函數進行網頁元數據抽取。 抽取后的結果進入存儲系統持久化后,同時推送至MaxCompute進行輿情分析,例如情感分析,文本聚類等。 這里可能會產生一些輿情報表數據,用戶情感數據統計等結果。 輿情結果會寫入存儲系統和搜索引擎,部分報表, 閾值報警會被推送給訂閱方。 搜索引擎的數據提供給在線輿情檢索系統使用。
在介紹完整體架構后,下面我們看下在阿里云上如何做存儲選型。
存儲選型
通過架構介紹我們再總結一下對存儲選型的要求:
有了這些需求后,我們需要使用一款分布式的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接口和計算平臺的對接實現架構簡化。T ableStore(表格存儲)是阿里云自主研發的專業級分布式NoSQL數據庫, 是基于共享存儲的高性能、低成本、易擴展、全托管的半結構化數據存儲平臺, 輿情數據存儲分析是TableStore在大數據處理領域的重要應用之一。 其他場景使用可以參考?TableStore進階之路。
總結
以上是生活随笔為你收集整理的百亿级全网舆情分析系统存储设计的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTC HD2解锁详细教程
- 下一篇: java信息管理系统总结_java实现科