一种基于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扩展 ...
随机推荐
- 学习W3SCHOOL 表单验证
//表单学习笔记 //建立一张表单的验证 <!DOCTYPE html> <html> <head> <meta http-equiv="Conte ...
- MySql 服务端与客户端下载地址
mysql官网的注册,要上传户口,才能下载. 在网上搜了个下载地址. mysql-5.6.8-rc http://mysql.stu.edu.tw/Downloads/MySQL-5.6/mysql- ...
- PhantomJS实现最简单的模拟登录方案
以前写爬虫,遇到需要登录的页面,一般都是通过chrome的检查元素,查看登录需要的参数和加密方法,如果网站的加密非常复杂,例如登录qq的,就会很蛋疼 在后面,有了Pyv8,就可以把加密的js文件扔给它 ...
- c语言指针说解
一. 指针定义 1指针的意义 2指针的赋值 指针变量同普通变量一样,使用之前不仅要定义说明, 而且必须赋予具体的值.未经赋值的指针变量不能使用, 否则将造成系统混乱. #include <std ...
- img test
- The Black Hole of Numbers (strtoint+inttostr+sort)
For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in ...
- 通过MyEclipse生成Hibernate类文件和hbm.xml文件,或者annotation文件
1. 前言 很多人都在使用myEclipse,很多公司也都使用hibernate框架,老版本的hibernate中,由于没有annotation,我们需要写两个文件来维护表与对象的关系,写一个类, ...
- 转:深入学习Oracle分区表及分区索引
转自:http://database.ctocio.com.cn/tips/286/8104286.shtml 关于分区表和分区索引(About Partitioned Tables and Inde ...
- 【BZOJ 1951】 [Sdoi2010]古代猪文
Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...
- DB天气app冲刺二阶段第一天
原来找人也是个力气活...好费劲呀..今天的进度有点慢,,确切的说是没有什么进度 因为不会弄了..加上今天一个劲的找同学帮忙写评论.心思没定下来 根本没思路了..明天按照今天的计划继续冲刺..