背景

团队目前在做一个用户数据看板(下面简称看板),基本覆盖用户的所有行为数据,并生成分析数据,用户行为数据来源于多个数据源(餐饮、生活日用、充值消费、交通出行、通讯物流、交通出行、医疗保健、住房物业、运动健康...),基于对大量数据的任意请求、排序和统计,没有办法对原生表(原生多表查询相对复杂)直接进行数据采用,所以我们在当日的凌晨获取前一天数据,并将数据做成Json对象保存在Mongo数据库中。

所以看板最初采用得是T+1的策略,这样就减少了实时数据计算的过程,另一方面能够保证数据的准确性。但是目前很多人反馈,希望能够实时的获取到看板最新的数据,而且每月月底辉有消费数据核对,消费数据按照看板统计得出并核对,如果等到第二天(也就是次月1号)再输出数据报表,这种体验就太差了。

优化方案

针对看板的原型需求和数据呈现形式,形成了类似 (数据(Mongo)服务 - 接口服务 - 前端展示页面)的架构模式,以T+1的策略提供数据,

来保障用户可以高效的浏览到自己的行为数据结构,并给出具体得数据分析和建议。

原有流程:通过设计开发控制台调度服务,并部署到中心服务器上,调度配置每天凌晨一点做服务启动,会根据用户新增和修改的日志做数据增量。

优化目标:改成每次用户行为数据的修改、删除和保存都采用消息队列形式实时的通知到服务去消费,服务消费之后立刻把Mongo的行为数据做好。

T+0 服务概要设计

核心功能实现设计

1、用户行为数据保存后实时发送MQ消息通知,解耦行为数据保存和看板数据生产的强关联。

2、开发独立服务消费MQ,同步聚合看板数据、输出用户行为数据报表,并推送通知消息给用户进行查看。

数据服务生成流程

时序图/流程图说明

1、原有是独立服务每天凌晨进行数据计算,改成每次用户行为完成修改之后发送MQ

2、服务端程序监听MQ,消费到数据,则调用调度服务进行处理

3、调度服务根据配置好的调度规则,进行控制台服务启动,并将对应的数据增量拉取到内存中,进行数据的筛选、排序、整合,合并成目标mongo文档,并保存到mongo集群中

4、调度服务数据处理完成之后,同步聚合看板数据、输出用户行为数据报表,并推送通知消息给用户进行查看。

数据聚合过程说明

所有的用户行为模块都遵循这个规则,最后实现数据T+0 实时聚合的目标

最新文章

  1. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q139-Q141)
  2. grep命令
  3. windows搭建openacs编译环境
  4. 多路复用的server模型
  5. ASP.NET MVC3快速入门——第四节、添加一个模型
  6. 移动前端之viewport
  7. Uva 1061 The Morning after Halloween
  8. File类与FileInfo类区别
  9. Java基础笔记14
  10. RocketMQ-事务消费
  11. Menu-多级菜单
  12. [TJOI 2010]中位数
  13. 模拟DbUtils实现接口回调机制
  14. C++ 通过ostringstream 实现任意类型转string
  15. 给你一个全自动的屏幕适配方案(基于SW方案)!—— 解放你和UI的双手
  16. 【转】mysql增量备份恢复实战企业案例
  17. js循环异常
  18. tomcat部署和启动
  19. MyTalkStuffHomeIcon-2
  20. Python2 字典 cmp() 函数

热门文章

  1. [LeetCode]67. 二进制求和(字符串)(数学)
  2. nginx的安装和启动
  3. 天猫精灵对接1:outh对接
  4. springboot:This application has no explicit mapping for /erro
  5. dpwwn-02靶机渗透
  6. Spring属性注入(set方式、构造函数方式、p名称空间、spel、复杂类型)
  7. VueX中state变化捕捉不到_getters监测不到state的变化
  8. 深入总结Javascript原型及原型链
  9. 和低效 IO 说再见,回头补一波 Java 7 的 NIO.2 特性
  10. python3 结束进程