blog mail me! feed

实时的管道日志处理

众所周知, 某b是懒人, 当然这个前提与本文无关.
某b搭建的nba视频站虽然和NBA官方的版权声明冲突不小, 不过每天的PV还是能有大概17k,
不过这个统计的方法很可怕, php里先建立一个数组, 把每条访问数据push进去,
序列化, 扔到memcached里. 再一个访问来了, 反序列化, 再push, 再序列化…

后来干脆就准备写个实时的日志记录和处理的python程序, 不然序列化都会吃掉大量的脚本运行时间.
先很白痴的准备用FastCGI来做, 做一个webservice, php请求一次, 我就完成一次日志.
后来还是打webserver的主意, 不过FastCGI行不通, 就转而研究管道了.

mkfifo创建named pipeline后, 让nginx把日志输出到管道, 就可以通过python阻塞读取日志了,
不过这里python脚本要先阻塞读取, 再kill -HUP掉nginx, 让配置重新生效.

此后的处理就可以按照需要的配置来进行了,
处理后的日志数据存放在sqlite3数据库里, 方便进行查询和索引.
每条进来的日志先写在内存的数据库里, 达到一定数目时再用事务写到硬盘的实体表里.

昨天晚上大概写了个DEMO出来, 在本地调试管道,
发现一切都正常, 唯有打开事务后插入要出错,
后来Google了下, 发现也有人提到这个.
按照方法修正了, 就ok了.

继续完善了准备拿到209生产环境实践下, 然后扔到svn repoistory上去.