需求
我们需要设计一个系统,来记录用户使用某个功能的情况,也就是用户每使用一次这个功能,我们就要记录一下。
我们需要统计最近年,月,日,小时。用户使用这个功能的曲线图。
如果当数据发生很大的偏离,我们需要发送通知给ADMIN用户。
用户使用该功能的QPS 在 2K 每秒
服务
就一个叫MONITOR SERVICE
存储
存储我们可以用文件系统或者NOSQL来存。
用文件系统的话,KEY(文件名) 就是一个功能名字,VALUE(文件内容),就是一组时间撮,表示什么时间用了多少次。
NOSQL 同样。
我们在记录的时候,首先会望不同的WEB SERVER 去发一个个请求,由WEB SERVER在内存中做聚合。最后比如每隔10秒会把自己内存中的聚合好的数据再发给 MONITOR SERVER。
再由MONITOR SERVER 来做聚合。
这是一个写多读少的系统。所以要依靠内存来优化写次数,而且要持久化存储,没法用到CACHE。
数据量过大,怎么办?
我们可以对旧的数据做搜身,我们每天启动一个离线的脚本,对当前NOSQL,比如超过1天,超过一周,超过一个月,超过一年的数据,分别做整理。按照不同的粒度,重新对他们做聚合。然后就可以有效减少数据条目数。
比如昨天的数据以5分钟为单位。当天的按每10秒位单位。
一周前的按小时为单位
一月前的按天为单位。
一年前的按周为单位。
什么时候发送警告给ADMIN
比如一个功能的使用数,平均每小时都会使用200左右。 突然变成了100或者20.这个比例可以人为设置,然后就发送邮件。
当然我们可以基于每10秒来判断。比如一个服务器之前每10秒都有20000个请求,突然没了。说明服务器的这个功能有异常了。