实时交互平台流程与技术分析

  最近几个月一直在做基于storm的流式处理,索性整理下所有的知识点与技术知识。

一、数据准备

  1、首先,我们需要用户的所有数据,使用MapReduce进行数据处理,生成业务宽表导入hbase与Redis,用于后续实时处理直接从Redis中获取相应数据,减少读写磁盘IO的消耗。

 二、消息的接入

  1、传入的数据是经过二进制处理的,所以使用jetty轻量级服务对传入的报文进行接入解析,同时部署多个服务,使用nginx进行负载均衡。

  2、每个服务同时启动多个线程进行消息的接入,通过blockingQueue进行存储,随后进行报文解析,序列化后发送对应主题的kafka.

三、storm处理

  1、使用集成的kafkaspout进行消息的接入代替storm的spout,降低工程复杂度,可直接编写bolt进行业务逻辑处理,随后进行数据的一次性过滤bolt,验证消息的正确性并并封装入对象中。

  2、通过消息中的相应主键,从Redis中加载该用户的全量数据,以便后续业务处理(存入hbase是以防redis出现问题进而再查询hbase,同时hbase中的rowkey做了散列,数据均匀分布在每个region中)。

  3、加载配置活动规则,这些规则通过前台web系统配置保存,存储于redis中。对多个规则进行遍历匹配,封装成一个大的对象,传入下游推送拓扑。

  4、推送拓扑在接收到消息后,从对象中获取封装的消息对象的渠道对象,对其进行遍历发送至不同的渠道。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏高性能分布式系统设计

【GO语言】合理配置GOMAXPROCS提升一倍以上的性能

GOMAXPROCS 用默认的,就是CPU的硬件线程数目, 对于大部分File IO密集的应用是不合适的。 至少应该配置到硬件线程数目的5倍以上, 最大1024...

3569
来自专栏崔庆才的专栏

RESTful API 设计最佳实践

原文出处:RESTful API Design. Best Practices in a Nutshell. 原文:RESTful A...

3506
来自专栏Golang语言社区

channel误用导致的一个BUG

在协议处理时,在正规处理流程之外想利用channel来做一个类似listener的机制,就是发现如果有listener就把协议数据发给它;而listener可以...

2985
来自专栏java一日一条

Java Socket 编程原理及教程

对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket。服务端和客户端之间通过Socket建立连接,之后它们就可以进...

381
来自专栏大闲人柴毛毛

JDK8中文文档——ServerSocket

类名 ServerSocket 所属包 java.net.ServerSocket 所有被实现的接口 Cloneable,AutoCloeable 直接父类 ...

3489
来自专栏源哥的专栏

客户端数据集/服务端数据集的原理和设计

最近在开发一个比较大型的项目,主要采用Activex控件做底层操作,采用Javascript做逻辑控制和处理,采用Ajax实现服务端与客户端之间的交互,而在实际...

744
来自专栏州的先生

在Django 2.0中定义Web服务API接口

812
来自专栏Java技术分享

Jedis 与 ShardedJedis 设计

Jedis作为推荐的java语言redis客户端,其抽象封装为三部分:

2115
来自专栏JetpropelledSnake

Python Web学习笔记之socket套接字

套接字是为特定网络协议(例如TCP/IP,ICMP/IP,UDP/IP等)套件对上的网络应用程序提供者提供当前可移植标准的对象。它们允许程序接受并进行连接,如发...

3328
来自专栏Golang语言社区

channel误用导致的一个BUG

在协议处理时,在正规处理流程之外想利用channel来做一个类似listener的机制,就是发现如果有listener就把协议数据发给它;而listener可以...

2805

扫描关注云+社区