1. 程式人生 > >Hadoop-模擬搭建使用者行為日誌採集系統分析

Hadoop-模擬搭建使用者行為日誌採集系統分析

一. kafka應用流程示意


1. 前端js埋點,就是呼叫後端提供的對應介面.介面請求示例如下:
http://pingserver.com?itemid=111&userid=110&action=show&...

為了保證輕量級,冰法度高,前端js埋點向後端非同步傳送的請求不需要關注返回狀態,只負責呼叫即可

2. flume監聽log日誌,將實時增加的log日誌通過flume管道注入kafka中,接下來可以有storm或spark streaming進行實時流處理;

3. 方向(1)中應用:storm,spark streaming更偏重於業務處理及資料探勘;
4. 方向(2)中應用:hbase,hive更偏重於行為日誌分析,比如統計pv,uv,vv,ctr,dau等.

二. 搭建日誌採集系統log server流程圖

上圖,就是一個Log Server實現的最簡單的流程圖.

1. Nginx分發器:上面提到了前端js埋點請求,要求速度要快,併發度要高,所以這裡使用了Nginx分發器作為web server,實現反向代理與LB(負載均衡);

2. Spawn-cgi: 上圖只是示例提供一個server服務的場景,同樣也可以不同節點上,提供相同的服務,用nginx實現負載均衡,以能提供更快更高可用的服務.

Spawn-cgi的功能: 就是提供了一個閘道器介面,它可以輕鬆快速的實現對外暴露server服務的功能,並能使底層的服務變成一個守護程序;

它的請求走的fcgi協議,這種協議更加適合外部請求,因為http請求很容易受到攻擊;

3. Thrift RPC: 在定義介面規範之後,能夠幫助我們快速的生成client和server程式碼,並能幫助我們實現服務之間的解耦:

  • client只負責欄位的解析等輕量級的工作;
  • server才是真正的引擎核心,我們可以在這裡實現自己的業務處理邏輯.

使用Thrift RPC生成的client和server之間的通訊,走的RPC協議,這種協議有如下好處:

  • 跨語言,支援多種語言去生成client和server程式碼,c++,Python,java等;
  • 保證資料的安全,相比http協議更不容易受到外部攻擊;
  • 速度快,效能好,比如用c++生成程式碼,實現效果效能更好,速度更快,更能應對高併發的處理請求;

RPC協議更加適合底層內部的請求,所以設計上後端一般都是使用RPC協議.

另外,RPC的兩端client和server只要遵循RPC協議和定義的scheme介面通訊規範,兩端可以使用不同的開發語言.

4. 上面的client server中server,並不只是一種簡單的服務,它可以由多個server通過RPC協議構成,比如下面搭建推薦系統,如下圖所示:

三. 模擬日誌收集系統的相關技術功能梳理

1. Thrift RPC:在定義介面通訊規範後,可以用Thrift命令快速生成server和client程式碼,完成最基本的C/S架構;這種生成程式碼的方式,可以幫助我們實現服務之間的解耦,client只負責欄位的解析等輕量級的工作,而server才是真正的處理引擎;

在server裡面,我們可以實現自己的業務處理邏輯.通過glogs可以將收集到使用者行為日誌快速高效的寫入log檔案中.

2. Spawn-CGI: 通過cgi提供的閘道器介面,可以將自己用thrift rpc的server服務提供給外部.

簡單的可以理解為提供了一種代理,可以在非應用程式所在的機器上操作應用程式.

3. Nginx分發器: 就是web server,用於分發使用者的請求,實現反向代理與負載均衡;通過它可以將使用者的js埋點請求分發給我們的server應用程式去處理;

4. ab壓測: 如果Thrift RPC 使用c++生成client和server,可以大大的提供效能,這種場景下,可以使用ab壓測工具,進行壓力測試;

--------------------上面的部分,基本就實現了模擬日誌收集系統的搭建---------------------

5. Flume + Hbase/Hive : 用於使用者行為日誌分析;

6. Flume+Kafka+Storm/Spark Streaming :用於實時流處理的資料探勘;