前段时间做了一个订单单量监控的项目,已经投入使用了,现在总结一下
前期的想法参考这篇文章
整体使用了storm实时计算框架和redis数据库,还有kafka消息队列
先上效果图,我们可以后期将数据展示出来,明显发现某天00点有单量突变的情况,明显是促销活动导致单量增加了
而后面的报警也是证实了,单量的非正常变化,确实可以报警出来,最起码的效果是有了
先简单说下整体思路,后面再讲详细实现
1.在页面下单成功的地方跨域调用一次kafka的服务,每成功一单就调一次
2.kafka的服务接到这次调用,发送kafka消息
3.storm服务实时接收这个kafka消息,将消息作为数据源,开始下面的计算
4.引入时间窗口的概念,引入定时器的概念,每隔固定时间统计前一段时间内的单量
5.拿这段时间内的订单量和存在redis中的预测数据对比,是否报警
5.将这段时间的单量,结合预测算法,计算出下一段时间内的预测值,保存在redis中
6.最后echarts展示redis的数据,并定时刷新
详细实现:
1.有人会有疑问,为什么要在页面发送跨域请求?
因为订单也是分类型的,不同类型的订单,可能完全就是两个不同项目的两套代码;
我们最终要做的,其实就是在订单下单完成后,能够发送一个kafka消息;
如果每个项目都嵌入发送kafka的代码,就存在冗余;
本次项目,是将发送kafka的这个功能,单独抽出来作为一个项目,对外提供http接口;
其他所有下订单的项目,在下单成功后,都统一跨域调用这个http接口;
最终由这个kafka的服务统一发送kafka消息.
跨域请求相关知识点,可以参考我的这篇文章jsonp跨域
2.