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應用程式去處理;
--------------------上面的部分,基本就實現了模擬日誌收集系統的搭建---------------------
5. Flume + Hbase/Hive : 用於使用者行為日誌分析;
6. Flume+Kafka+Storm/Spark Streaming :用於實時流處理的資料探勘;