騰訊分析系統架構解析

2021-07-25 09:59:39 字數 2302 閱讀 9745

n http access:主要負責http協議的解析,資料的清洗及格式化;

n esc: event streaming coder:主要負責將系統不可列舉的資料型別編碼成為整型,並將對應關係持久化;

n esp: event streaming processor:主要負責將資料按照站點、uid重新組織並計算pv、uv、停留時長、蹦失率等**分析指標;

n esa:event streaming aggregator:主要負責將esp計算後的資料按照站點彙總,並將接入寫入到redis中;

n center:系統的中心節點,負責系統配置、資料路由的管理,並承擔容災切換功能;

n logserver:負責將access收集到的資料以字串形式寫入檔案,並上傳到tdcp上;

實時計算

對於計算子系統我們參考了hadoop, s4,storm等開源專案,力圖設計為乙個較為通用,擴充套件性較強的全記憶體實時event處理系統(或者套用流行的術語稱為流式實時event處理系統)。對於這樣的乙個系統,我們設計支援的典型輸入輸出流程大致如下:

實時計算系統主要的設計要點在資料組織、協議以及增量計算模型上。

1.資料組織

萬物皆int,考慮到記憶體以及計算過程的效能需求,我們將所有非int的資料型別轉化為int。可以列舉的資料型別將其配置化對映為唯一int;不可列舉的資料型別則利用md5演算法近似得到唯一的int。例如頁面url屬於不可列舉的型別,則預處理通過md5演算法近似得到唯一的int;useragent裡的瀏覽器型別字串則屬於可列舉的資料,則預先配置化對映為int。這個方法節省了較多的記憶體,也提高了整個系統的計算效能。

2.協議

協議層面上,我們首先設計實現了一種可擴充套件的event結構,這種event結構支援半自動化的序列化/反序列化機制(參考自msgpack的設計),緊湊的二進位制編碼(基於zigzag編碼,參考protobuf的實現)。這種event結構在流式高效能io(網路傳輸,持久化)方面表現的相當良好。實時計算子系統被設計為可以擴充套件支援任意的event實現。

3.增量計算模型

所謂的增量計算模型,指的是基本計算過程被定義為三個部分:

n processor:負責具體業務邏輯的計算處理

n data holder:負責儲存增量結果資料,以及計算依賴的中間狀態資料

n emitter:負責定期輸出清空增量計算結果

具體到流程方面,則如下所示分三個步驟:

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

實時儲存

在ta系統中,實時儲存的資料都是需要通過web展示層讀取的統計資料。這類資料存在兩個典型特點:

同時根據業務邏輯,我們將統計資料劃分為兩類:

n 動態資料:主要是頻繁更新的結果統計資料,這一部分資料則需要不停地更新。比如qq網域名稱下的pv,uv統計結果;

考慮到上述的ta實時統計資料的特點,我們選擇nosql實現我們的儲存系統;同時,針對兩類不同的資料型別,分別選擇leveldb,redis儲存不同的型別資料。

1.雙寫複製

2.資料分片sharding

l 基於網域名稱

n 所有的資料以網域名稱為單位組織分片;

n 任何網域名稱可以調整到任意分片中;

n 單個網域名稱資料原則上儲存在乙個分片中;

l 動態調整

n 只調整分片策略,不移動資料;

n 基於資料量計算分片負載;

此外,針對分片集群資料的查詢,我們主要做了三項工作:

n 實現了乙個較為完整的redis協議棧作為上層應用的基礎,設計是直接用redis協議作為對外提供的查詢通用協議,這樣外部使用者可以直接通過目前各種redis client實現來查詢訪問資料;

n 乙個靈活的查詢引擎:能夠根據規則智慧型的在多個redis、leveldb資料來源中查詢,執行類join的操作;也簡單擴充套件支援其它的異構資料來源如mysql、hbase等

n 乙個實時查詢計算引擎:一些複雜的查詢,實時根據基礎查詢結果實時計算。引入此部分的主要目的在於減少redis資料空間占用。

Dubbo系統架構解析

dubbo 框架在設計時遵循了兩大設計原則 為了對 dubbo 整體架構敘述的方便,dubbo 抽象出了三大領域模型。dubbo 的架構設計劃分為了 10 層。圖中左邊淡藍色背景為服務 consumer 使用的介面,右邊淡綠色背景為服務 provider 使用的介面,位於中軸線的為雙方都要用到的介面...

分析Linux ALSA系統架構

alsa是 linux 音效卡驅動的架構,下面基於linux 2.6.32描述下alsa系統架構。alsa系統可以分為alsa lib alsa driver,而alsa driver又分為core層和底層硬體層。作為開發者,我們只需移植底層硬體層,根據自己硬體特性,實現底層的移植。而core層基本...

Tomcat系統架構分析

下面看一下 standardservice 中主要的幾個方法實現的 下面是 setcontainer 和 addconnector 方法的原始碼 standardservice.setcontainer public void setcontainer container container cat...