核心的实时架构和基于storm的实时架构的设计.
一、实时的框架简介
背景
数据流计算来自于一个信念:数据的价值随着时间的流逝而降低,所以事件出现后必须尽快地对它们进行处理,最好数据出现时便立刻对其进行处理,发生一个事件进行一次处理,而不是缓存起来成一批处理。
核心架构
互联网上海量数据(一般为日志流)的实时计算过程可以被划分为以下三个阶段:数据的产生与收集阶段、传输与分析处理阶段、存储对对外提供服务阶段。
数据采集(流数据输入)
主要是为实时框架提供输入实时的数据流,秒级别的数据并传入实时框架。目前,互联网企业的海量数据采集工具,有Facebook开源的Scribe、LinkedIn开源的Kafka、Cloudera开源的Flume,淘宝开源的TimeTunnel、Hadoop的Chukwa等,均可以满足每秒数百MB的日志数据采集和传输需求。
- Facebook Scribe
Scribe:https://github.com/facebook/scribe - Cloudera
Flume:https://github.com/cloudera/flume/ - LinkedIn
Kafka:http://sna-projects.com/kafka/ - 淘宝TimeTunne
http://code.taobao.org/p/TimeTunnel/ - Hadoop Chukwa
http://incubator.apache.org/chukwa/
典型实时流计算框架(流数据计算)
目前业界诞生了许多系统,它们仿照MapReduce约束编程模型的方式,为了获取更好的执行效率,这些系统包括,微软的DAG任务计算模型Dryad、Google的图批量同步处理系统Pregel和增量式计算框架Percolator,Yahoo!的数据流计算系统S4、NYU的共享内存处理系统Piccolo以及Berkeley的交互式实时处理系统Spark等等。
- Twitter Storm
- Yahoo S4
- Facebook Puma
- Puma、Storm和S4三种数据流计算系统对比
典型的三个数据流计算系统Puma、Storm和S4,它们分别适用于站点统计、社交网络和广告投放等应用:
上图从开发语言、高可用机制、支持精确恢复、主从架构、资源利用率、恢复时间、支持状态持久化及支持去重等几个方面对这三种系统进行了对比。可以看到,为了高效开发,两个系统使用Java,另一种系统使用函数式编程语言Clojure;高可用方案,有两个系统使用Passive Standby方式,系统恢复时间可控,但系统复杂度增加,资源使用率也较低,因为需要一些机器用来当备机;而Storm选择了更简单可行的上游回放方式,资源使用率高,就是恢复时间可能稍长些;Puma和S4都支持状态持久化,但S4目前不支持数据去重,未来可能会实现;三个系统都做不到精确恢复,即恢复后的执行结果和无故障发生时保持一致,因为即使是Passive Standby方式,也只是定期Checkpoint,并没有跟踪每条消息的执行。商用的StreamBase支持精确恢复,这主要应用于金融领域。
国内外一起企业的应用情况
- 淘宝的实时计算、流式处理
1. 银河流数据处理平台:通用的流数据实时计算系统,以实时数据产出的低延迟、高吞吐和复用性为初衷和目标,采用actor模型构建分布式流数据计算框架(底层基于akka),功能易扩展、部分容错、数据和状态可监控。 银河具有处理实时流数据(如TimeTunnel收集的实时数据)和静态数据(如本地文件、HDFS文件)的能力,能够提供灵活的实时数据输出,并提供自定义的数据输出接口以便扩展实时计算能力。 银河目前主要是为魔方提供实时的交易、浏览和搜索日志等数据的实时计算和分析。
2. 基于storm的流式处理,统计计算、持续计算、实时消息处理。
3. 利用HBase实现的online应用。
- 其它
Twitter的Rainbird:Rainbird 是一款分布式实时统计系统, Rainbird可以用于实时数据的统计:
(1)统计网站中每一个页面,域名的点击次数,(2)内部系统的运行监控(统计被监控服务器的运行状态),(3) 记录最大值和最小值
官方简介:http://www.slideshare.net/kevinweil/rainbird-realtime-analytics-at-twitter-strata-2011
中文介绍:http://www.cnblogs.com/gpcuster/archive/2011/02/06/1949466.html
StreamBase:http://www.streambase.com
StreamBase是IBM开发的一款商业流式计算系统,支持精确恢复,在金融行业和政府部门使用
HStreaming:http://www.hstreaming.com/
Esper
esper可以用在股票系统、风险监控系统等等要求实时性比较高的系统中
官方网站:http://esper.codehaus.org/
官网的英文简介:http://www.espertech.com/products/esper.php
中文简介:http://www.cnblogs.com/qlee/archive/2011/06/22/2086550.html
实时查询(流数据查询、展示结果)
全内存: 直接提供数据读取服务,定期dump到磁盘或数据库进行持久化。
半内存: 使用Redis、Memcache、MongoDB、BerkeleyDB等内存数据库提供数据实时查询服务,由这些系统进行持久化操作。
全磁盘: 使用HBase等以分布式文件系统(HDFS)为基础的NoSQL数据库,对于key-value引擎,关键是设计好key的分布*.*
二,基于storm的实时计算框架
基本架构
数据输入:采用zeromMQ进行传输,zeroMQ内部做负载均衡
数据处理:采用storm的spout读取zeroMQ传来的数据,bolt进行逻辑的处理
数据结果查询与展现: 最终所有的log都存储在HDFS上,逻辑运行的过程中,处理的时间和处理log的数据被保存到mysql中,
实时的log存储在redis中,供用户查询
参考资料
http://wiki.d.xiaonei.com/pages/viewpage.action?pageId=18154309
实时计算一些基本概念
http://www.cnblogs.com/panfeng412/archive/2011/10/28/2227195.html
Beyond MapReduce:谈2011年风靡的数据流计算系统
http://www.programmer.com.cn/9642/
对互联网海量数据实时计算的理解
http://www.cnblogs.com/panfeng412/archive/2011/10/28/realtime-computing-of-big-data.html
淘宝实时流计算
http://www.cnblogs.com/panfeng412/tag/%E5%AE%9E%E6%97%B6%E6%B5%81%E8%AE%A1%E7%AE%97/
Yahoo! s4和Twitter storm的粗略比较
http://www.blogjava.net/killme2008/archive/2011/11/08/363238.html
Cloudera Announces Game-Changing, Real-Time Query on Hadoop and Leads a New Era of Data Management
http://www.msnbc.msn.com/id/49533097/ns/business-press_releases/t/cloudera-announces-game-changing-real-time-query-hadoop-leads-new-era-data-management/