大数据高并发场景下存量/增量指标实时计算方法

2 篇文章 0 订阅
1 篇文章 0 订阅

业务场景:

设备每10分钟上报一次A指标数据,需要对设备的A指标数据进行日增量/存量打标。即对于A指标,标记设备是存量设备还是增量设备。
日存量/增量判断标准:将当日设备上报A指标数据的总次数,与该设备前30天内上报的A指标数据的总次数进行对比。假如前30天内总次数超过n次且当日上报A指标数据的总次数超过n次则为该设备打存量标记。假如前30天内总次数小于n次且当日上报A指标数据的总次数超过n次则为该设备打增量标记。

设备数量上百万,且都按每10分钟一次进行指标数据上报。如何在大数据量且高并发的场景下快速的对设备进行存量/增量标记。

解决方式一:

在设备每次上报时进行打标。
使用redis缓存,一个key对应一个设备近30天每天的A指标数据出现次数,可以是一个json数组:

[{'day':'yyyyMMdd-1',‘aCount’:n-1},{'day':'yyyyMMdd-2',‘aCount’:n-2}...,{'day':'yyyyMMdd-30',‘aCount’:n-30},{'day':'yyyyMMdd-n',‘aCount’:n-current}]

每次上报都到redis中查询对应key,对json数组进行维护,删除前30天之外jsonobject,同时对30天内的指标总数进行累加。查询当日的jsonobject中A指标数据总数,进行对比并做存量增量判断。最后将当日A指标总数进行更新,对于当日第一次A指标上报进行json数组的追加操作,第二次以上进行json数组的替换操作。整个key设置31天过期。

解决方式二:

在多线程和高并发场景下,如果因为前置组件发生消息堆积,导致一批数据中存在多个同一设备多条A指标数据报文。而有多个线程同时对某个设备多条A指标数据报文进行处理,使用方式一会存在A指标数据计数总量不准确的情况。考虑在A的整个逻辑之外增加一个基于redis的有过期时间的分布式锁。当某个线程对指定设备的A指标进行计数和判断时,加分布式锁,其他线程遇锁等待,直到锁释放或者过期,再执行增量/存量判断。

解决方式三:

使用定时任务离线异步的进行处理。持久化每日所有设备的A指标数据发生次数,某个时间点对当日所有设备进行判断,分别比对其前30天的指标总次数,进行打标。

该方法有如下不足:
1.需要开辟更多磁盘空间。
2.定时任务执行时间有限制,需慎重选择。
3.假如有后置任务需要依赖存量/增量标识,会存在定时任务执行超时或者执行异常导致后置任务受影响的可能。

如有更简单高效方法欢迎留言~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值