大并发量上报或者实时上报的实现方式

来源:互联网 发布:淘宝分享有赏在哪里 编辑:程序博客网 时间:2024/04/27 22:58

大并发量上报或者实时上报的实现方式

在客户端应用里面,会对很多用户的行为进行上报,例如哪个位置查看比较多,哪个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台强劲的nginx就可以处理这上亿/小时的请求了


6.禁用http的keepalive

如果开启了keepalive,每个连接不马上中断,高并发上报,会导致连接数很高,然后nginx都会出现500错误。


7.定时压缩日志

高并发下,日志必然很多,为了减少存储空间,每天跑定时压缩日志。