騰訊分析系統架構解析

2020-11-30 CSDN技術社區

TA(Tencent Analytics,騰訊分析)是一款面向第三方站長的免費網站分析系統,在數據穩定性、及時性方面廣受站長好評,其秒級的實時數據更新頻率也獲得業界的認可。本文將從實時數據處理、數據存儲等多個方面帶你深入探尋TA的系統架構及實現原理。

網站分析(Web Analytics)主要指的是基於網站的用戶瀏覽行為,對網站的點擊流數據和運營數據進行分析,以監控網站的運營狀況,為網站的優化提供決策依據。網站分析系統已成為站長日常運營必不可少的工具,業界比較流行的網站分析系統主要有Google Analytics、CNZZ和百度統計等產品。

TA作為網站分析產品的後起之秀在社區分析、用戶畫像、網站工具等多方面形成了自己的特色,其秒級的實時數據更新頻率更是業界翹楚。在數據穩定性、準確性和及時性方面,TA在站長圈也是享有良好的口碑。隨著接入業務量的不斷發展,TA日均需要處理和計算的數據量達到TB級。如此龐大的數據量想要達到秒級實時且保證系統的高可用並非件易事。

TA的實時計算框架借鑑了一些業界流行的流式計算系統的思路。雖然在構建系統中遇到了一些問題,但由於海量數據的實時處理、實時存儲具備一定的典型性與通用性,所以將TA的解決方案分享出來,希望能給大家一些啟示。

基本原理及系統架構

TA的基本原理是通過嵌入站長網站的JavaScript腳本收集用戶訪問行為數據,並發送TA採集集群,採集集群收到數據後將其過濾、編碼、格式化後繼續向後分發。數據處理集群負責按照業務邏輯計算數據,並將計算結果「寫入」到數據存儲集群,最後將結果數據展現給廣大站長使用。TA的基本原理如圖所示。

TA後臺是一套完整的數據流處理系統:由JavaScript採集的用戶行為數據像川流不息的河水一樣流入TA後臺,經過清洗、計算後源源不斷地流出到TA存儲集群,供用戶瀏覽和查詢。TA的具體架構及核心部件如圖所示。

TA的後臺分為離線和實時兩部分:實時部分負責系統的主要功能計算,數據更新頻率為秒級;離線部分負責系統複雜的關聯分析及跨天計算,數據更新頻率為天級。

  • Http Access:主要負責HTTP協議的解析,數據的清洗及格式化。

  • ESC:Event Streaming Coder,主要負責將系統不可枚舉的數據類型編碼成為整型,並將對應關係持久化。

  • ESP:Event Streaming Processor,主要負責將數據按照站點、UID重新組織並計算PV、UV、停留時長和蹦失率等網站分析指標。

  • ESA:Event Streaming Aggregator,主要負責匯總ESP計算後的數據按照站點,並寫入到Redis。

  • Center:系統的中心節點,負責系統配置、數據路由管理,並承擔容災切換功能。

  • Logserver:負責將Access收集到的數據以字符串形式寫入文件,並上傳到TDCP上。

  • TDCP:騰訊分布式計算平臺,負責離線數據的計算,並由腳本將結果數據寫入MySQL中。

實時解決方案

前TA日均需要處理幾十萬網站的上TB級數據,處理過後的URL個數仍有上億條,系統存儲的key個數超過十億。如何高效、低延遲地處理如此大量的業務數據是TA實時系統面臨的主要挑戰。TA解決方案的主要思路可以概括為數據全二進位化、計算全內存化、存儲NoSQL化。下面就實時計算和實時存儲這兩大子系統進行深入的討論。

實時計算

對於計算子系統,我們參考了Hadoop、S4和Storm等開源項目,力圖設計為一個較為通用,擴展性較強的全內存實時Event處理系統(或者套用流行的術語稱為流式實時Event處理系統)。對於這樣的一個系統,我們設計支持的典型輸入輸出流程大致如圖所示。


實時計算系統的設計要點在數據組織、協議和增量計算模型上。

數據組織。萬物皆int,考慮到內存以及計算過程的性能需求,我們將所有非int的數據類型轉化為int。可以枚舉的數據類型,將其配置化映射為唯一int;不可枚舉的數據類型,則利用MD5算法近似得到唯一的int。例如,頁面URL屬於不可枚舉的類型,則預處理通過MD5算法近似得到唯一的int;UserAgent裡的瀏覽器類型字符串則屬於可枚舉的數據,則預先配置化映射為int。這個方法節省了較多內存,提高了整個系統的計算性能。

協議。協議層面上,我們首先設計實現了一種可擴展的Event結構,這種Event結構支持半自動化的序列化/反序列化機制(參考自msgpack的設計)和緊湊的二進位編碼(基於Zigzag編碼,參考Protobuf的實現)。這種Event結構在流式高性能I/O(網絡傳輸和持久化)方面表現得相當良好。實時計算子系統被設計為可以擴展支持任意的Event實現。

增量計算模型。增量計算模型,指的是基本計算過程,被定義為以下三部分(如圖所示)


具體到流程方面,分為以下三步(如圖所示)。


增量計算模型弱化了分布式系統中單臺機器的事務狀態,相應地簡化了分布式計算系統的實現,同時也提高了整個系統的性能。

實時存儲

在TA系統中,實時存儲的數據都是需要通過Web展示層讀取的統計數據。這類數據存在兩個典型特點。

  • 頻繁更新寫。更新頻度視系統實時性而定,每條統計結果更新頻度最快可以達到1秒。
  • 少量讀取。「少量」是相對上述更新而言的。同時根據業務邏輯,可將統計數據劃分為兩類。
  • 固定不變數據:主要是URL、搜索關鍵詞等數據。這一部分數據理論上是在不停地增加,不會修改舊有數據。
  • 動態數據:主要是頻繁更新的結果統計數據。這一部分數據則需要不停地更新。例如,www.qq.com域名下的PV和UV統計結果。

考慮到上述的TA實時統計數據的特點,我們選擇NoSQL實現我們的存儲系統;同時,針對兩類不同的數據類型,分別選用LevelDB和Redis來存儲。

Redis

TA實時存儲的主要構件。考慮到TA系統本身就是一個比較完善的分布式集群系統,因此我們需要的存儲構件是「not clustering, but sharding」。也就是說像HBase和MongoDB這樣的「重武器」並不適合TA,而NoSQL資料庫中的「瑞士軍刀」Redis憑藉其出色的性能走入我們的視野。同時TA的結果數據類型也比較豐富,有像站點PV、UV、VV和IP等Hash類型的數據,也有像用戶訪問軌跡這樣set類型的「動態數據」,而Redis豐富的數據結構很好地完成了這項任務。

選擇Redis的另一個原因是它足夠簡單且易於擴展。在實際應用的過程中,我們發現的問題都可以通過擴展Redis命令來解決。

例如,TA中有這樣的一種應用場景:為了消除ESA模塊的狀態,存儲在Redis中的數據往往並不是最終的結果數據,而是還需要進一步運算的中間數據。像bounce rate這個指標(bouncerate=bounce session數/total session數),需要前臺查詢兩次再做一次運算後最終展示給用戶。在高並發的情況下,無疑會影響系統的響應速度。

本著「移動計算,而不是移動數據」的原則,我們對Redis的sort、hmget命令進行了擴展使其支持四則運算,成功地將原來的兩次查詢優化為一次。擴展四則運算的另外一個目的是可以「通過計算換取存儲」,例如需要將兩種類型加總成總和的類型數據,可以只存儲兩份,加總數據「通過計算換取」。

除了數據讀取,數據的寫入也可以進行類似合併數據的優化。例如,TA在寫入URL的PV、UV、VV、IP、停留時長和bounce rate這6個指標時,需要調用6次Redis命令。而實際上這6個指標是存儲在同一個Hash內的,通過擴展hmincrby命令,支持將Hash的所有field一次更改,便能將調用次數優化至一次。上線之後也取得了良好的效果,峰值時的CPU利用率幾乎下降了一半,同時也大幅提升了上層模塊ESA的吞吐量。

LevelDB

它是Redis的有效補充。考慮到Redis為內存資料庫,而使用內存的成本要高於硬碟,因此選擇引入了基於磁碟存儲的LevelDB作為補充。由於LevelDB的寫性能足夠好,而讀性能也遠遠超過目前「在線少量讀取」的需求,所以我們選擇LevelDB存儲「固定不變數據」。

在數據存儲的架構設計上,由於實時數據服務與在線系統,可靠性要求較高,因此我們主要採取雙寫複製+Sharding的設計方法。

雙寫複製。所有的數據存儲都會至少同步寫兩份,以提高在線系統服務的可用性。

數據分片(Sharding)

基於域名:所有的數據以域名為單位組織分片;任何域名可以調整到任意分片中;單個域名數據原則上存儲在一個分片中。

動態調整(如圖所示):只調整分片策略,不移動數據;基於數據量計算分片負載。


此外,針對分片集群數據的查詢,我們主要做了三項工作(如圖所示)。


Redis Protocol Stack是一個較為完整的Redis協議棧,是上層應用的基礎。直接用Redis協議作為對外提供查詢的通用協議,這樣外部用戶可直接通過目前各種Redis Client實現來查詢訪問數據。Query Rule Engine是一個靈活的查詢引擎。能夠根據規則智能地在多個Redis、LevelDB數據源中查詢,執行類join的操作;也簡單擴展支持其他的異構數據源,如MySQL、HBase等。

  • Query Compute Engine是一個實時查詢計算引擎,能根據基礎查詢結果實時計算。引入此部分的主要目的在於減少Redis數據空間佔用。

未來展望

目前TA雖然在後臺上已經做到數據秒級更新,但展示方式仍為傳統的靜態方式。後續TA會在數據的動態刷新上進行更多嘗試,讓站長可以第一時間了解網站營銷效果,時刻感受網站心跳。

相關焦點

  • 騰訊首次解析智能安防感知系統,為數據中心開啟「索倫之眼」
    9月17日,騰訊數據中心高級架構師顏小雲在DCD數據中心國際峰會首次全面解析了自研數據中心智能安防感知系統——索倫之眼。索倫之眼是騰訊針對數據中心、智慧園區等應用場景,基於 AI 視頻分析、物聯網等前沿技術,孵化出的一套安防管控和數據接入解決方案,包括智慧安防、便捷感知、智慧機器人三大板塊。索倫之眼配合騰訊智維平臺,可以幫助用戶快速建立起對數據中心現場的管控能力,解決安防能力弱、數據盲區多等問題,提升數據中心的數位化、自動化、智能化水平。
  • 騰訊開源微服務架構 Tars,高性能 RPC 開發框架
    騰訊微服務架構 Tars 於今日正式開源。
  • 實例分析:一整套業務系統產品技術架構的方法論
    系統是指相互之間有直接或間接關係的功能元素形成的集合,此集合能單獨為特定使用者提供特定的服務,比如:銷售系統、客服系統。我們說的技術架構, 一定是「多個」獨立系統之間的事情。我們開始談技術架構的第一步,各系統必須先獨立,工程和數據耦合的一起的系統,沒有架構可言。沒有任何關係的功能元素組成,不能稱為系統。同樣的沒有任何關係的系統組成,不需要架構。
  • 我如何成了騰訊架構調整的炮灰
    他們與騰訊雲籤訂一年合同,購買雲服務以及一項名為「人臉融合」的技術服務,每月支付500萬左右費用。但「人臉融合」技術是天天P圖提供給騰訊雲的,此前兩個團隊都屬於騰訊SNG事業群。9月27號天天P圖停止向騰訊雲提供技術支持,並力推同類小程序「瘋狂變臉」。騰訊雲試圖通過內部溝通來解決,但三天後騰訊宣布組織架構調整,兩個團隊分屬兩個事業群,內部協商難度加大。
  • 解析SNS社區產品架構模型
    最近,時值騰訊QQ空間及手機社區平臺高速發展,迭創新高;我也想結合自身的工作實踐,簡單地聊一些關於SNS的理解。  個人認為,從嚴格產品意義而言,國外是FACEBOOK,國內是校內網最先實現相對完整地SNS社區產品架構的。而早期的網易社區,騰訊IM平臺,早期博客形態的QQ空間,包括現在一些手機社區,都和SNS有些偏差。
  • 分享| 大中小型視頻監控系統網絡組網架構分析
    網絡架構如何組成?本篇重點討論一下網絡視頻監控系統組網方式。 前言: 大型網絡視頻監控如何組網?網絡架構如何組成?
  • 競品分析報告:騰訊會議&Mindlinker&Newline
    視頻會議行業發展趨勢 根據艾瑞諮詢披露信息:2020年,疫情短期內促使雲視頻會議系統快速滲透,但終究是以免費擴容為代價, 收益尚未體現,加之硬體視頻會議廠商損失第一季度的穩定;2020 年市場增速並不樂觀,需靠被激活的增量付費企業客戶與亟需升級系統的政府來抵消疫情負面影響。
  • 圖文並茂的解讀歷年系統架構設計師考試的常見易錯選擇題
    系統架構設計師既然屬於軟考高級,它的含金量肯定也是比較大的。軟考證書是全國認可的,在很多國企、事業單位以及一些其他企業,可以用軟考證書來評職稱。而系統架構設計師屬於軟考高級資格證書,可聘任高級工程師職務,幫助升職加薪。當然也是對過往成績的一次認證,同時也是繼續出發的一個起點,故精調細選往年的系統架構設計師考試的易錯選擇題,和大家一起分享及解讀!
  • 騰訊哈勃分析系統:刷QQ會員APP風險高
    日前,騰訊手機管家攔截到一款偽裝成刷QQ會員工具的安卓盜號木馬,用戶如果輕信該木馬可以瞬間刷QQ永久會員的謊言,填入自己的QQ帳號和密碼,就會遭遇盜號。據騰訊哈勃文件分析系統分析(http://habo.qq.com/),這類木馬存在高度風險。
  • 雲+社區技術沙龍丨解析騰訊最新開源項目背後的技術棧
    楊曉峰:《Kona JDK 在騰訊大數據領域的實踐和發展》騰訊專家工程師、TEG JDK 團隊負責人楊曉峰,在演講中簡要介紹了 Kona JDK 項目的緣起,分析了當前 OpenJDK 的技術發展熱點,以及國內該領域的發展狀態和趨勢,對 Kona JDK 在騰訊大數據領域的需求痛點、實踐心得以及未來發展進行了分享。
  • 騰訊安全雲鼎實驗室利用騰訊安全自主研發的系統到底是什麼
    騰訊安全雲鼎實驗室利用騰訊安全自主研發的「defylibrary」和騰訊安全開放雲平臺聯合打造了基於anyway.os的開源系統——anywaylab系統。騰訊安全雲鼎實驗室表示:「anywaylab計劃旨在面向未來企業級系統應用,開發高效、可擴展、安全的解決方案,創建跨運營商、雲計算、ai、5g、物聯網等多場景大生態,推動產業創新發展。」
  • 「騰訊吐個槽」全解析:不僅僅是競品分析
    用戶反饋體系的主要構成包含用戶端、信息反饋系統、管理員端三部分,用戶通過信息反饋平臺發表評論,被錄入系統資料庫,反饋系統根據一定的規則對大量用戶反饋信息進行處理,提供給管理員。一方面,管理員可以對這些信息進行編輯,與用戶互動,另一方面,藉助反饋平臺功能對數據監控、分析,可以解決實際產品問題,產出支持企業決策的報表。
  • 解析:機器人系統架構有哪些特殊技巧?
    一個理想的機器人編程過程包括(假定硬體已經一切就緒):1.系統架構設計2.具體功能的算法實現3.編碼與集成 由於筆者所從事工作性質,主要集中在:1.系統設計和2.算法的研究上,3.coding的機會並不是很多。
  • 競品分析:阿里雲 VS 騰訊雲,AT的短兵相接
    本文是阿里雲和騰訊雲的競品分析報告,文章重點分析了這兩款雲服務產品的行業情況、產品策略、產品結構、商業模式等4個方面,梳理了發展趨勢,與大家分享。一、分析目的阿里巴巴和騰訊在各個賽道上的競爭越發激烈,隨著未來5G和人工智慧時代的來臨,AT兩家對於基礎中的基礎——雲服務的投入越來越多。
  • B2C電商系統產品架構:全局分析系統定義與職責
    筆者在七八年職業經歷中,主要是聚焦於電商系統上下遊進行工作,而筆者在本文中就將結合工作實踐與經驗認知,為大家分析電商系統的各種架構,並對各個系統註明主要定義和主要職責。本人在過去七八年的職業經歷中,從事的都是複雜業務的解決方案,更多聚焦在電商系統上下遊,所以電商系統產品架構也算我的產品領域之一。在接下來的時間內,我單獨開啟一個系列文章來講整個電商系統的各種系統架構,核心目的還是總結提升自己。剛開始寫,我也定幾個原則或目標,這樣會比較有意思(寫不了會丟人……)。
  • 騰訊宣布架構調整:縮減成六大事業群 OMG被拆分
    雷帝網 雷建平 9月30日報導騰訊今日宣布公司架構調整,在原有七大事業群(BG)的基礎上進行重組整合。包括包括:騰訊新聞、騰訊視頻、騰訊體育、微視、騰訊影業、騰訊動漫等板塊。騰訊稱,微信、QQ、QQ空間、應用寶、瀏覽器等是中國最大的社交網絡及流量分發平臺,能為創新產品提供最有效的用戶觸達。
  • 架構師分析 架構的重要性
    技術需要架構,晶片的架構,軟體需要架構,公司需要架構,建築需要架構,產品需要架構,人也需要架構,聊聊架構的話題。  這是有道理的,架構是我們搭建一棟樓,一個項目,一個公司,一種技術的基礎,就用晶片為例,晶片的架構好壞,覺得了晶片的功耗,晶片的性能,晶片的速度。同樣的,公司如果有好的架構,公司的執行速度,公司的協同能力,公司的成本都會不一樣。
  • 高清洗能力的DDoS防護產品源於優秀的架構
    騰訊安全聯合實驗室研製的DDoS高防產品就依託其優秀的架構做到對攻擊的完全檢測和高清洗能力。使用光稜物理分光做1:1流量鏡像,旁路Netflow檢測鏡像流量,不影響客戶正常業務流向,檢測後的鏡像流量被丟棄。檢測原理主要為基於流量建模分析客戶IP的流量中是否存在攻擊流量。
  • 騰訊布局IDC智能安防 為數據中心開啟「索倫之眼」
    9月17日,IDC行業頂尖會議DCD數據中心國際峰會於新加坡舉辦,在會上,騰訊數據中心高級架構師顏小雲首次全面解析了自研數據中心智能安防感知系統——索倫之眼。據顏小雲介紹,索倫之眼的感知能力已覆蓋便捷式電力監控、無線溫溼度監控、便捷式視頻監控、可攜式氣象站、空氣品質監測、配電櫃測溫系統、加速度監測系統等為數據中心提供關鍵運營支持的方方面面。大部分監控監測系統支持不停電施工,並基於無線的系統集成方案,在不影響在線業務的情況下,快速施工、快速上線。此前騰訊就運用索倫之眼,成功為深圳某機房快速加裝了便捷式電力監控系統。
  • 騰訊工業雲首席架構師餘弦:騰訊雲向10萬家中小企業提供幫扶資源
    來源:每日經濟新聞今日(4月28日),在由每日經濟新聞主辦的「聚焦新基建—中國工業網際網路的啟蒙年代」在線沙龍上,騰訊工業雲首席架構師餘弦介紹了疫情暴發背景下,騰訊如何幫助中小企業鋪平上雲之路的難點問題。從發展趨勢看,數位化轉型已經成為社會各界共識。