打点系统优化HTTP请求
为更好的理解用户,互联网公司会将用户的行为收集上来进行分析,打点系统应运而生。但互联网公司的用户数都比较多,而且每个用户的行为也很多,这样服务器收到的打点请求就非常多,QPS非常高,对web服务器的要求也会非常之高。为提升整个打点系统的性能,可以采用以下几个方式。
常规的方案是将多个行为事件合并后上传,以减少单个客户端的上报次数,这会导致一个事件触发后,事件没有及时上传,从而影响上报率。该方法是在上报率和服务器资源之间的一种折中方案。根据需要,可以根据事件的优先级,分不同的打包策略和上传策略。优先级高的行为,尽量一发生就生成包上传。优先级低的行为,可以将多个行为合并后上传,然后服务端基于统计学的原理来分析数据
使用长连接通道可以减少客户端和服务端之间的HTTP握手次数,以此减少服务器的负载,该方法适合用户使用时间长的场景。
部分打点系统在qps高的时候丢失数据,为解决该问题,我们经常采用加服务器的方法。后面运维在nginx调整了一个参数,让nginx和下游web服务保持长连接,一下将web服务的CPU负载降了下来,提高了单台web服务的负载能力。
带宽、服务器数目等资源往往是由QPS的最高值决定的,而不是平均值决定的。为保证服务可用性,当打点的峰值在10万QPS时,系统就必须保证整个服务能撑起10万的QPS,否则服务的可用性就比较差。为了减少流量尖峰的影响,在设计系统的时候就要尽量避免。如果当时没避免,后面也可以通过观察打点服务的QPS曲线,找到QPS出现尖峰的时候,分析QPS高的原因,看是否可以想办法在业务逻辑上避免,或者在尖峰时刻给每个客户端打点加个随机的延迟,以将尖峰销平。
以上优化打点的方式是我们在工作采用的常规方案,灵活应用的话,可节约一大笔服务器费用。