最近做了一個打點統計系統,統計系統肯定各個公司都有做過,至于怎麼做就不好說了。我見過最多的就是使用php開發一個打點接口,然後在打點接口中做資料點選,這種方法最差的就是每次打點都往資料庫中操作,另外一種就是往一個檔案中增加資料。對于後一種,我就很奇怪了,你既然php是等于要往日志檔案中增加一條記錄,那幹啥不用web伺服器的自身的日志呢?是以我這次就果斷使用分析nginx日志的方法來做打點(這個方法也是大多公司統計系統采用的方法吧)。
至于storm,hadoop啥的,太高大上了。沒用
nginx日志打點第一個使用什麼打點接口,當然可以自己放一個檔案在伺服器,然後通路這個檔案。但是實際上nginx有個empty_gif的子產品,它把圖檔存放在nginx的記憶體中,是以它的通路速度比靜态檔案的通路速度還快,是以果斷選擇這個。是以我的配置檔案如下:
這裡我把access_log寫兩份,目的是希望我一份做存留,一份做分析。
我設計的通路接口是http://ares.test.com/ares.gif?p=a&i=b
這裡的p和i是統計的項目和統計項。
然後日志寫完了之後,就需要進行日志切割了,日志切割怎麼搞都行,我就搬起了php最快上搞,就是這裡要注意下切割完日志以後要給nginx發送一個信号,讓它修改下日志的fd。
然後這個腳本我設定每1分鐘跑一次,将目前的日志用分鐘來重命名
下面就是分析日志的過程。
分析日志一定會是多個程序的環境。為什麼,因為,一個程序,太慢。那多程序的環境,就需要有多個程序同時讀取一個檔案的情況,分析日志的時候就需要注意下使用檔案鎖。
然後這個腳本我會讓它循環跑10分鐘,每2分鐘啟動一個腳本,這樣就有5個腳本在跑。
至于資料庫設計,就和背景需求有關了。
我這裡第一版最簡單的就是記錄下每個小時的點選數。
是以隻需要最簡單的項目表,統計項表,統計資料表就好。
這樣子還有個好處就是可分布式擴充,如果一個統計前端機扛不住了,那麼我就單純加機器就好了,反正這些資料都是往同一個資料庫中插入的。
至于背景界面開發,最近瘋狂喜歡上ace這套背景模闆,然後畫圖使用highchart來弄。
背景統計項目如何加功能後面後面再說~
至此初步的統計就搞起來了。我在一台機器上測試過前端壓力,8核的機器,大概能有1w左右的qps。至少能扛過一陣了。