TiDB 在西山居實時輿情監控系統中的應用

公司簡介

西山居建立 1995 年初夏,在美麗的海濱小城珠海,西山居工做室孕育而生,一羣西山居居士們十年如一日尅勊業業的奮鬥。"創造快樂,傳遞快樂!" 一直是西山居居士們的創做宗旨。西山居以領先的技術做爲堅實的基礎以獨特的本土化產品爲玩家提供時尚化服務。在將來,西山居仍以娛樂軟件爲主導產品,不斷進行研發和市場活動,逐步發展成爲國內最優秀的集製做、發行於一體的數字化互動娛樂公司。算法

業務背景

因爲公司產品的社交屬性都很是強,對相關輿情進行分析與瞭解就顯得頗有必要,在此背景下,輿情監控系統應運而生。該系統利用算法組提供的分詞算法,對文本進行解析與分類,打上各種標記後再經過計算產生中間結果。輿情繫統直接查詢這些中間結果,產生各種報表與趨勢圖,爲及時掌握各種輿情趨勢提供便利。用戶能夠自由組合輿情關注點,從而對平臺有很嚴格的實時交互性查詢要求,是典型的實時 HTAP 類業務。數據庫

存儲技術選型

輿情繫統以前咱們曾經實現過一個客服系統,這個系統要求能實時查詢,但面對是海量的玩家行爲記錄。在當時狀況下(2016 年),能夠選擇的對象只有 MyCAT 這類數據庫中間件,經過綜合壓力測試後,咱們選定了 KingShard 這一款由公司前同事開發的中間件,KingShard 雖然沒有 MyCAT 豐富的周邊功能,但它在知足咱們業務需求的核心功能上有更快的表現。但正由於有了這一次中間件的使用,咱們對中間件有了比較全面的瞭解,它們在查詢優化上有着天生的弱點,沒法知足更復雜的查詢或者表現極不友好,爲此咱們還不得不砍掉了客服系統的部分業務功能,因此在那時我已開始尋找更優的技術方案,其中分佈式數據庫是咱們考察的重點方向。服務器

BigTable、GFS、MapReduce 是谷歌在分佈式存儲與查詢領域的探索成果,他們沒有公開具體實現代碼,但卻發佈了相應論文,對分佈式文件系統、大數據挖掘和 NoSQL 發展起了重大促進做用。開源界根據這一成果開發出對應產品是 HBase、HDFS、Hadoop,這三個產品紅極一時,相關周邊產品更是百花齊放,不少細分領域都同時出現了多個產品競爭,讓整個生態很是繁榮但也變得複雜,提升了咱們的學習與使用成本。那麼,在一些領域中有沒有更加簡單、直接、具備較強融合能力的解決方案呢?此時距谷歌這三篇論文發表已近 10 年,谷歌內部早已在嘗試融合 NoSQL 和 SQL,並對它們進行了屢次更新換代,Spanner、F1 兩篇論文即是谷歌在這一方向的探索成果。開源分佈式數據庫 TiDB 即是受論文啓發而設計的 HTAP (Hybrid Transactional and Analytical Processing) 數據庫,結合了傳統的 RDBMS 和 NoSQL 的最佳特性,兼容 MySQL,具備支持分佈式事務、無限的水平擴展、數據強一致性保證等核心 NewSQL 特性。網絡

當時,輿情繫統接入的第一個遊戲平均天天入庫數據量就已達到 8500 萬條,而且還須要支持各類實時交互性查詢,顯然中間件已不能知足要求,傳統的關係型數據庫則更加不可能了。考慮到之後還會有其它遊戲接入,咱們果斷選擇了分佈式數據庫。
隨着互聯網經濟的發展,數據量跟併發數也在飛速增加,單機數據庫已愈來愈不能知足要求了,爲此谷歌、阿里等大廠都有了自研的分佈式數據庫,但都沒有開源,而 MySQL 的 MGR 及相關功能進展的步子過小,TiDB 的出現很好的彌補了市場空白,成爲咱們的惟一選擇。架構

服務器配置

輿情繫統是內部孵化項目,服務器具體以下:併發

新購物理機器 6 臺:框架

image

舊物理機 4 臺:分佈式

image

咱們將對資源使用相對較小的 PD、監控服務分別放在舊物理機上,TiDB、TiKV 和 TiSpark 則分配在新機器上,詳細以下:oop

image

其中每一個 TiKV 分配 CPU 10C / 內存 64G / 硬盤 2T,每一個 TiSpark 分配 CPU 20C / 內存 64G。在資源有限狀況下,結合數據量及輿情繫統的 AP 業務屬性,咱們設計了這樣相對複雜的架構,目的是爲了充分利用好服務器資源,讓它們能承擔更極限的壓力,過後有屢次歷史數據的導入也證實了咱們這樣設計的必要性,多謝 TiDB 的兄弟全程耐心指導及幫助。性能

項目開發過程

得出中間結果是一個很是大的計算過程,因此咱們使用了 TiSpark。TiSpark 是 PingCAP 爲解決用戶複雜 OLAP 需求而推出的產品,它是將 Spark SQL 直接運行在分佈式存儲引擎 TiKV 上的 OLAP 解決方案。有了 TiSpark 咱們能夠方便地使用 Spark,而不須要再單獨搭建一套 Spark 集羣。

從 TiDB 的 1.0 RC 3 版本開始,咱們就在金山雲上搭建集羣來試用與壓測。期間經歷了屢次版本熱更,集羣也一直很穩定,功能與性能愈來愈強,因此在輿情繫統開始開發時咱們果斷使用了 TiDB。而且 TiDB 有強烈的市場需求,他們的版本更新很是迅速,在試用期間時發現了一些功能不能知足須要,每每在下一個版本就解決了,這讓人很是驚歎。

當前版本未加入實時計算業務,再加上使用了 TiSpark,因此整個架構相對簡單,詳細以下圖:

image

項目上線及使用狀況

輿情繫統目前總數據量數 T,已正式上線三個月,期間從未出現過異常,系統平穩、使用效果也很是好。如今天天原始文本數據在 2500 萬條以上,經過算法分詞後產生的中間結果則天天有 6000 萬條左右(日均入庫 8500 萬條),高峯時段的平均 QPS 在 3K 以上,閒時的平均 QPS 爲 300 多一點。根據這樣的量級,在一開始評估時設定的目標是:支持最近一個星期的實時交互性查詢,但如今已經遠遠超過咱們的預期。目前全部一個月內的時間跨度查詢都在 1 秒左右完成,個別複雜的 3 個月的實時交互性查詢則須要 2 秒多一點。

能夠說 TiDB 給咱們的體驗遠超預期,這樣的數據量級及響應,單機版數據庫是不可能達到要求的。

做者介紹:鄒學,輿情監控系統技術負責人,珠海金山網絡遊戲科技有限公司(西山居)數據中心架構師,2015 年加入西山居,具備 10 年遊戲行業軟件開發經驗,主要參與了公司的遊戲網關設計,數據分析框架底層架構建設等,現專一於實時計算、爬蟲、分佈式系統方向。
相關文章
相關標籤/搜索