大并发量上报或者实时上报的实现方式
在客户端应用里面,会对很多用户的行为进行上报,例如哪个位置查看比较多,哪个tab点击人数,这些都是经常需要上报的对象。
如果需要详细的调查用户行为,有可能一个客户端一次上报的记录就几十条,这种情况下,假设有10000000的用户同时在线,那么上报的记录可能一小时就有几亿条,这个记录是非常巨大的。
所以,这个记录的性能不容忽视,必须要有强大的性能支撑,才能保证log记录准确,特别是一些广告的展示,必须做到尽量少的误差,否则影响的就是公司的收入了。
1. 使用nginx记录,不走任何cgi形式:
把每次上报的格式绘制成固定的url格式,在nginx配置成特定location,返回404,这样就可以拿到access log,而且只走nginx的效率相对来说是比较高的,至少比cgi要高很多倍。
如果为了不让识别,可以加密后,在分析的时候把param解密。
2. 分服务器:
如果上传数量很大,并发很高,一台nginx都支撑不了,那么就把上传的模块分离,分到多台nginx上去。
3. 分模块:
根据不同的模块,分成不同的文件夹,以及文件,这样子减少分析压力。
4. 合并上传:
假如1s内有很多地方的log要上传,那么可以一次性把这1s内log合并以后再上传,减少请求数量
5. 增大上传间隔:
间隔越大,负载越低,这是必然的。但是很多时候需要实时汇报,但是使用上面方式的话,估计1台强劲的ngin