一种基于Storm的可扩展即时数据处理架构思考
问题引入
使用storm可以方便的构建一种集群式的数据框架,并通过定义topo来实现业务逻辑。
但使用topo存在一个缺点, topo的处理能力来自于其启动时设置的worker数目,在很多情况下,我们需要能够根据业务压力来调整集群的处理能力,这时候单一的topo就无法解决这个问题了。
为了能够更加灵活的定义处理能力,可以考虑将原有的topo根据业务域进行拆分,做到互不干扰,灵活控制,而且为了能够更加经济的利用处理资源,可以考虑引入worker资源池的概念,达到对资源的充分利用。
但使用这种多topo架构存在一个致命问题,storm中的topo是各自独立,无法直接通信的,因此在获取某些关键资源时,可能会出现资源争抢的情况的。面对此种场景,有两种处理思路:
其一:使用zookeeper等提供的分布式锁,来实现对关键资源的控制,缺点是可靠性及效率存在问题,使用与对处理效率要求不高的场景。
其二:由第三方对关键资源进行分配,规避由topo本身对资源的争抢,这种方案引入了新的构建,提高了系统的复杂度。
处理架构
集群的优点是处理能力可扩展,但会带来数据同步、开发维护复杂度以及数据一致性等问题。
我们现在虽然已经有了很多集群处理框架及相应组件用来简化相应的开发及维护工作量,但从项目开发的实际来看,我们还是需要处理一些没有被成熟组件包含但又非常棘手的问题。
storm定义的集群可以提供方便的可扩展处理能力,在整个集群中,topo都是等价的,在storm运行环境内部,topo之间也无法交流。
回到上面的问题,通过storm,我们获得了即时的集群处理能力;通过topo,我们可以自定义业务,并方便的在节点中分发;通过worker数目的变化,可以调整其处理能力。
如果辅以Hadoop等大数据存储平台及Redis缓存,加以使用zookeeper构成的分布式锁,已经基本可以构建一套即时的可扩展的大数据处理平台。
组件图
多top的初始化
下面是一个基于storm的多拓扑初始化的类视图:
关键点与思考
缓存策略
因为是即时的数据处理平台,其存在对效率的要求,而数据库存储的访问通常称为瓶颈,因此在此设计了缓存,选型Redis是引起使用已经较为广泛和稳定,业界也存在较为成熟的缓存构建策略。
分布式锁
分布式锁至关重要,尤其是如果storm集群中存在多个topo的情况下,非常可能存在对关键资源的争夺。
使用zookeeper构建分布式锁已经存在较为成为的应用,但使用zookeeper构建的分布式锁必定也存在健壮性不足和锁的效率问题,需要在设计时加以考虑。
Hadoop和Oracle的协作
从使用成本和使用场景上,这两个组件就存在很大不同。
在应用时,Hadoop可以用以存储非结构化的数据,例如原始结果。由于Oracle在存储结构化数、可靠性以及易用性上的巨大优势,可以选择将最终处理结果存放于Oracle之中,利于维护和展示。
一种基于Storm的可扩展即时数据处理架构思考的更多相关文章
- 论文解读丨基于局部特征保留的图卷积神经网络架构(LPD-GCN)
摘要:本文提出一种基于局部特征保留的图卷积网络架构,与最新的对比算法相比,该方法在多个数据集上的图分类性能得到大幅度提升,泛化性能也得到了改善. 本文分享自华为云社区<论文解读:基于局部特征保留 ...
- 杂项-IM:IM(即时通讯),一种基于互联网的即时交流消息的业务
ylbtech-杂项-IM:IM(即时通讯),一种基于互联网的即时交流消息的业务 即时通讯(Instant Messaging)是目前Internet上最为流行的通讯方式,各种各样的即时通讯软件也层出 ...
- [翻译] Trident-ML:基于storm的实时在线机器学习库
最近在看一些在线机器学习的东西,看到了trident-ml, 觉得比较有意思,就翻译了一下,方便有兴趣的读者学习. 本文为作者(掰棒子熊)翻译自https://github.com/pmerienne ...
- 26种基于PHP的开源博客系统
26种基于PHP的开源博客系统 来源:本站原创 PHP学习笔记 以下列举的PHP开源Blog系统中,除了我们熟知的WordPress之外,大多都没有使用过,其中一些已经被淘汰,或者有人还在使用.除了做 ...
- 三:基于Storm的实时处理大数据的平台架构设计
一:元数据管理器==>元数据管理器是系统平台的“大脑”,在任务调度中有着重要的作用[1]什么是元数据?--->中介数据,用于描述数据属性的数据.--->具体类型:描述数据结构,数据的 ...
- 一种基于C51单片机的非抢占式的操作系统架构
摘 要:从Keil C51的内存空间管理方式入手,着重讨论实时操作系统在任务调度时的重入问题,分析一些解决重入的基本方式与方法:分析实时操作系统任务调度的占先性,提出非占先的任务调度是能更适合于Kei ...
- 一种基于Qt的可伸缩的全异步C/S架构服务器实现(流浪小狗,六篇,附下载地址)
本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/S客户端-服务集群应用需求而搭建.连接监听.数据传输.数据处理均在独立的线程池中进行,根据特定任务不同,可安排负责监听.传输.处理的线程数 ...
- 一种基于Qt的可伸缩的全异步C/S架构server实现(一) 综述
本文向大家介绍一种基于Qt的伸缩TCP服务实现.该实现针对C/Sclient-服务集群应用需求而搭建. 连接监听.传输数据.数据处理均在独立的线程池中进行,依据特定任务不同,可安排负责监听.传输.处理 ...
- 基于easyui的webform扩展(续)
基于easyui的webform扩展(续) 回顾 <前端基于easyui的mvc扩展>.<前端基于easyui的mvc扩展(续)>.<基于easyui的webform扩展 ...
随机推荐
- 常用mysql命令大全
常用的MySQL命令大全 一.连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再 ...
- php语法检查方法——命令行模式和代码形式
1. 命令行形式 php -l /path/to/file.php 2. php代码形式 function php_syntax_check($file){ $code = file_get_cont ...
- C语言多线程编程
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUT ...
- Path of Equal Weight (DFS)
Path of Equal Weight (DFS) Given a non-empty tree with root R, and with weight Wi assigned to each ...
- Sambar,实现Linux和Windows共享
我下载的是tar的jar包,不是rpm,rpm就不多说了.目的是让Windows能够共享Linux系统的文件夹 1.进入到source文件夹: 2../configure->make->m ...
- iOS中touches事件,addtarget ...action和GestureRecognizer详解
刚学完uiview,uicontrol类,许多人知道 touchesBegain,touchesMoved,touchesEnd,GestureRecognizer的用途,但仔细考虑这些事件之间的关系 ...
- 【BZOJ3196】Tyvj 1730 二逼平衡树
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:1.查询k在区间内的排名2.查询区间内排名为k的值3.修改某一位值上的数值4.查询k在区间内的 ...
- HighCharts 根据spline-plot-bands图,定制自己的图(区间里显示多个数据)
公司项目里有这样一个需求,根据数据绘图,但是数据很多,不可能每个点每个点的去画,这样显示的数据太密集非常的难看(更显得技术不专业),如图: 所以我和项目经理商量如何显示这个图形,按照他的意思是,按照范 ...
- C#和Js 编码和解码方法
Server.UrlDecode(); Server.UrlEncode(); Server.HtmlDecode(); Server.HtmlEncode();
- Extjs4 treePanel异步加载菜单(后台从数据库读取)
运行环境:springMVC+mybatis 一.建表 说明:0表示此节点为非叶子节点,即此节点还包括了子节点:1表示此节点为叶子节点,即此节点没有子节点.:关于图标iconCls是从Extjs的文件 ...