在线人数架构
类关系图
说明
- StatisticsProperties 在线人数统计配置
- onlineMember 在线人数统计保留数量,单位 小时,默认48。每小时任务,所以一共生成48条数据。
- currentOnlineUpdate 当前在线人数统计时间间隔,单位秒,默认600秒,即10分钟。即每次请求当前用户数量,都是从缓存中拿来响应,如果超出间隔,则重新统计当前在线人数。
- OnlineMemberVO 历史在线人数统计, date为时间,num为当时的数量。
- TimedTaskJobHandler xxljob 分布式任务调度中心,负责每小时任务调度,进行昨日流量汇总
- EveryHourExecute 每小时任务接口,在线人数统计属于每小时任务
- OnlineMemberStatistics 在线会员统计,统计在线人数会员,生成记录,存入缓存。
- PlatformViewViewDataServiceImpl 在线流量统计接口,在此接口中,有一个当前在线会员的统计,所以调用到了当前在线人数架构,根据时间间隔确定当前人数是否从缓存中提取。
架构思路
上文描述的都是在线人数用于什么样的场景,接下来描述在线人数统计这块在系统中的原理及使用建议
统计数据的由来是获取redis缓存中 Accesstoken 的数量来确认当前在线人数。
token有效时间默认为30分钟,即一个人登录之后,如果没有后续连续的访问那么系统会认为这个用户在系统中访问了30分钟。
在线人数配置(StatisticsProperties类)中,配置参数可以在yml文件中配置。
onlineMember用于配置历史在线人数,使用过程中可以配置为72 等等其他数字,代表过去3天的流量分析,但不建议太大,否则流量统计图会比较多,密密麻麻。
currentOnlineUpdate用于配置运营端在获取当前在线人数时多刷新频率,默认的10分钟是较为合适的一种方式,不管多少次访问,10分钟只统计一次redis,性能得以保障。
在架构中,获取有效 Accesstoken属于取巧操作,如果后续有其他更好的实现,可以替换掉这块逻辑。这么设计的好处就是用最少的资源,最简单的方式,评估到一个系统较为准确的在线人数方案。