一. kafka應(yīng)用流程示意
1. 前端js埋點(diǎn),就是調(diào)用后端提供的對應(yīng)接口.接口請求示例如下:
http://pingserver.com?itemid=111&userid=110&action=show&...
為了保證輕量級,并發(fā)度高,前端js埋點(diǎn)向后端異步發(fā)送的請求不需要關(guān)注返回狀態(tài),只負(fù)責(zé)調(diào)用即可;
2. flume監(jiān)聽log日志,將實時增加的log日志通過flume管道注入kafka中,接下來可以由storm或spark streaming進(jìn)行實時流處理;
3. 方向(1)中應(yīng)用:storm,spark streaming更偏重于業(yè)務(wù)處理及數(shù)據(jù)挖掘;
4. 方向(2)中應(yīng)用:是將非結(jié)構(gòu)化的用戶行為日志數(shù)據(jù)轉(zhuǎn)換成結(jié)構(gòu)化的數(shù)據(jù)存入hbase中,使用hive進(jìn)行行為日志的分析,比如統(tǒng)計pv,uv,vv,ctr,dau等.
二. 搭建日志采集系統(tǒng)log server流程圖
上圖,就是一個Log Server實現(xiàn)的最簡單流程圖.
Nginx分發(fā)器:上面提到了前端js埋點(diǎn)請求,要求速度要快,并發(fā)度要高,所以這里使用了Nginx分發(fā)器作為web server,實現(xiàn)反向代理與LB(負(fù)載均衡);
Spawn-cgi:上圖只是示例提供一個server服務(wù)的場景,同樣也可以在不同節(jié)點(diǎn)上,提供相同的服務(wù),用nginx實現(xiàn)負(fù)載均衡,以能提供更快更高可用的服務(wù);
Spawn-cgi的功能: 就是提供了一個網(wǎng)關(guān)接口,它可以快速的實現(xiàn)對外暴露server服務(wù)的功能,并能使底層的服務(wù)變成一個常駐的守護(hù)進(jìn)程;
它的請求走的fcgi協(xié)議,這種協(xié)議更加適合外部請求,因為http請求很容易受到攻擊;
- Thrift RPC:在定義接口規(guī)范之后,能夠幫助我們快速的生成client和server代碼,并能幫助我們實現(xiàn)服務(wù)之間的解耦:
- client只負(fù)責(zé)字段的解析等輕量級的工作;
- server才是真正的引擎核心,我們可以在這里實現(xiàn)自己的業(yè)務(wù)處理邏輯.
使用Thrift RPC生成的client和server之間的通信,走的是RPC協(xié)議,這種協(xié)議有如下好處:
- 跨語言,支持多種語言去生成client和server代碼,c++,Python,java等;
- 保證數(shù)據(jù)的安全,相比http協(xié)議更不容易受到外部攻擊;
- 速度快,性能好,比如用c++生成代碼,實現(xiàn)效果性能更好,速度更快,更能應(yīng)對高并發(fā)的處理請求;
RPC協(xié)議更加適合底層內(nèi)部的請求,所以設(shè)計上后端一般都是使用RPC協(xié)議.
另外,RPC的兩端client和server只要遵循RPC協(xié)議和定義的scheme接口通信規(guī)范,兩端可以使用不同的開發(fā)語言.
4. 上面的client server中server,并不只是一種簡單的服務(wù),它可以由多個server通過RPC協(xié)議構(gòu)成,比如下面搭建推薦系統(tǒng):
三. 模擬日志收集系統(tǒng)的相關(guān)技術(shù)功能梳理
- Thrift RPC:在定義接口通信規(guī)范后,可以用Thrift命令快速生成server和client代碼,完成最基本的C/S架構(gòu);這種生成代碼的方式,可以幫助我們實現(xiàn)服務(wù)之間的解耦,client只負(fù)責(zé)字段的解析等輕量級的工作,而server才是真正的處理引擎;
在server里面,我們可以實現(xiàn)自己的業(yè)務(wù)處理邏輯.通過glogs可以將收集到用戶行為日志快速高效的寫入log文件中.
- Spawn-CGI: 通過cgi提供的網(wǎng)關(guān)接口,可以將自己用thrift rpc生成的server服務(wù)提供給外部.
簡單的可以理解為提供了一種代理,可以在非應(yīng)用程序所在的機(jī)器上操作應(yīng)用程序.
Nginx分發(fā)器: 就是web server,用于分發(fā)用戶的請求,實現(xiàn)反向代理與負(fù)載均衡;通過它可以將用戶的js埋點(diǎn)請求分發(fā)給我們的server應(yīng)用程序去處理;
ab壓測: 如果Thrift RPC使用c++生成client和server,可以大大的提供性能,這種場景下,可以使用ab壓測工具,進(jìn)行壓力測試;
上面的技術(shù)部分,基本就實現(xiàn)了模擬日志收集系統(tǒng)的搭建,下面再擴(kuò)展做一下介紹.
Flume + Hbase/Hive : 用于用戶行為日志分析;
Flume+Kafka+Storm/Spark Streaming :用于實時流處理的數(shù)據(jù)挖掘;