- 浏览: 1598188 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
jsrgzhangzhiyong:
关于null值的转换还是感觉不太友好,就像 mapstruct ...
我也造了个轮子:BeanMapping(属性拷贝) -
he037:
a417930422 写道引用使用EPHEMERAL会引出一个 ...
基于zookeeper的分布式lock实现 -
seancheer:
qianshangding 写道首先节点启动后,尝试读取本地的 ...
zookeeper学习记录三(session,watcher,persit机制) -
雪夜归人:
您好,我想咨询一下,开源的canal都能支持mysql的哪些版 ...
Canal BinlogChange(mysql5.6) -
zhoudengyun:
copy 一份做记录,后续学习,请知悉
阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费
背景
最近花了点时间研究了下分布式计算这一块的内容。领导给的第一个任务,就是学习下S4和GridGain。花了几天的时间把s4的源码看了下,把自己的理解和学习的内容做一个记录。 下一篇会是GridGain的分享
学习
- s4的论文: S4: Distributed Stream Computing Platform
- s4的官网: http://s4.io/
s4是什么?
1. s4的全称 : Simple Scalable Streaming System (简单的描述:分布式流计算系统)
2. 特点:
- distributed(分布式)
- scalable(扩展性)
- partially fault-toleran(部分容错性)
- pluggable (可插拔)
3. 产生的原因:
- Yahoo发起,主要用于解决"cost-per-click“广告,通过实时计算预测用户对广告的可能的点击行为。
- 不用hadoop的原因: hadoop主要解决batch处理,基于mapReduce对可控的数据的进行处理。而流计算是针对不可控的点击事件,对实时性有严格要求。
4. 适用的场景:
- 业务允许部分容错性。 (s4没有严格的failover机制,运行节点突然crash时,会导致当前节点中的数据丢失。后续的请求会failover到其他的节点上)
S4的设计:
容器概念(http://docs.s4.io/manual/overview.html)
-
PE : Processing Elements (处理节点)
* emit one or more events which may be consumed by other PEs,
* publish results, possibly to an external data store or consumer. -
Events : message (消息)
* arbitrary Java Objects
* passed between PEs. (send and receive) - PEC : processing element container (处理节点容器)
* invokes the appropriate PEs in the appropriate order - node : a Processing Endpoint (机器节点)
* a jvm instance
* contains a PEC - cluster: a group nodes (节点集群)
说明:
- 一个cluster包含多个node
- 每个node包含一个PE Container
- 每个PE Container 包含多个PE
- 每个PE消费Events,生成新的Events并传递给下一个PE
总体结构图:
PE内部概念:(4个部分组成)
- its functionality as defined by a PE class and associated configuration,
- the named stream that it consumes,
- the keyed attribute in those events, and
- the value of the keyed attribute in events which it consumers
PE类关系图:
说明:
- Persister : 每个PE对应一个Persister,s4中每个PE对应于一个key的value结果。每个value结构都将作为PE的一个instance
- FrequenceType : 每个PE会定期进行flush output输出,可选择的策略(定时,数量阀值)
- Clock : 每个PE的时间控制单元,有几种时间。(WallClock:基于系统时间处理 , EventClock:基于event事件时间控制)
重点理解一下: Keyless PE概念和PE Prototype
- PE在底层实现了会以多实例存在。存储的key即为其keyed对应的value值,内部有个lookupTable概念。
- 针对Keyless PE,其对应的存储key即为"*",所以每次通过lookupTable.get(value)返回的即为同一个节点,单例化
- 针对prototype,其对应的存储就为其value,所以每次会根据当前keyed attribute确定返回的PE节点,基于这点可以实现PE节点数据的Join处理
EventListener/EventEmitter:
说明:
- 每个PE Container是一个EventProducer,使用CommLayerListener做为其事件处理器,处理EventWrapper反序列化。
- 每个PE包含一个Dispatcher,Dispatcher里包含了一个EventEmitter处理对应的EventWrapper对象的发送
- 底层实际通讯的类: SenderProcess/ListenerProcess
Dispatcher类关系图:
说明:
- Partitioner, 每个dispatcher针对发送的目标cluster,会根据对应的key进行分区处理,路由到其中的node节点。(node节点的信息可以通过zookeeper进行动态管理)
考虑集群node节点的管理(node的新增 or 修改)
说明:
- ProcessMonitor 监控当前运行node节点的状态,有static/dymaic两种维护状态
- TaskManager 创建node节点,主要是设置lock文件,有static/dymaic两种维护状态
运行(PE状态变化)
S4缺点:
S4产品还是一个半成品,整体代码结构组织和风格上还是比较乱的,选择使用时需谨慎。存在的一些问题:
- failover (运行node节点出现crash,当前node上的PE数据将无法实施failover)
- persist (目前支持方式过于简单,需要考虑网络持久化,类似于nfs,分布式文件系统等,配合failover机制)
- communication (只支持udp协议,数据传输可靠性上)
- load balancer (根据系统负载进行智能LB,目前暂时未看到相关实现。系统运行分为两种模式static or dymaic模式, static不存在智能调节LB处理)
- deploy (手工方式介入deploy,无法支持apps的zero deploy模式。系统分为cluster/node两概念,node对应于一计算节点实例,cluster为一组处理相同业务的计算节点)
评论
6 楼
AliKevin2011
2011-10-14
我目前看到s4的整体内部处理是下面的过程,不知道是否正确?
1.client发送数据到adapter的clientSub.
2.adapter.clientSub对数据进行Wrapper和injectEvent
3.adapter.EventDispatcher分配事件到s4-CommLayerListener-ListenerProcess-GenericListener
4.s4-CommLayerListener-ListenerProcess.listen()-messageQueue
5.s4-CommLayerListener.Dequeuer.takeMessage()
6.s4-CommLayerListener.handler.processEvent-PEContainer.queueWork.workQueue
7.s4-CommLayerListenerhandle.PEContainer.CheckpointingOrRecovery
8.PE do business.
9.finish
望指点。我有些模糊。
1.client发送数据到adapter的clientSub.
2.adapter.clientSub对数据进行Wrapper和injectEvent
3.adapter.EventDispatcher分配事件到s4-CommLayerListener-ListenerProcess-GenericListener
4.s4-CommLayerListener-ListenerProcess.listen()-messageQueue
5.s4-CommLayerListener.Dequeuer.takeMessage()
6.s4-CommLayerListener.handler.processEvent-PEContainer.queueWork.workQueue
7.s4-CommLayerListenerhandle.PEContainer.CheckpointingOrRecovery
8.PE do business.
9.finish
望指点。我有些模糊。
5 楼
lianlupengUestc
2011-10-03
厉害,最近准备研究一把呢,嘿嘿,麻烦把您的邮箱给我吧,以后有问题找你啊
4 楼
agapple
2011-06-22
lance_123 写道
agapple 写道
lance_123 写道
failover是非常致命的地方。
之前本来打算拿来项目用,看了一阵子后,发现非常致命,特别是在有些业务下。
不过框架思想很值得学习。
之前本来打算拿来项目用,看了一阵子后,发现非常致命,特别是在有些业务下。
不过框架思想很值得学习。
看来是taobao的同学。 s4从它产生的项目来看,主要就是解决实时计算的需求,允许请求丢失。但在一些商业项目中,是不会允许出现数据丢失。
s4针对PE节点数据,有个Persist概念,想做failover也靠谱,借助于类似共享存储,性能上估计会有比较大的损失。
做persist的话,性能和架构变得复杂。我现在自已在写一些这方面的demo。
期待你下次的GridGain分享。
客气了,看了下你在csdn上的blog,在分布式方面,hadoop的分析上还是蛮有料的。
最近在忙着做BeanMapping开源工具功能完善的事,分布式的学习计划只能在工作内容的30%,进度上已经拉下一截。
3 楼
lance_123
2011-06-22
agapple 写道
lance_123 写道
failover是非常致命的地方。
之前本来打算拿来项目用,看了一阵子后,发现非常致命,特别是在有些业务下。
不过框架思想很值得学习。
之前本来打算拿来项目用,看了一阵子后,发现非常致命,特别是在有些业务下。
不过框架思想很值得学习。
看来是taobao的同学。 s4从它产生的项目来看,主要就是解决实时计算的需求,允许请求丢失。但在一些商业项目中,是不会允许出现数据丢失。
s4针对PE节点数据,有个Persist概念,想做failover也靠谱,借助于类似共享存储,性能上估计会有比较大的损失。
做persist的话,性能和架构变得复杂。我现在自已在写一些这方面的demo。
期待你下次的GridGain分享。
2 楼
agapple
2011-06-22
lance_123 写道
failover是非常致命的地方。
之前本来打算拿来项目用,看了一阵子后,发现非常致命,特别是在有些业务下。
不过框架思想很值得学习。
之前本来打算拿来项目用,看了一阵子后,发现非常致命,特别是在有些业务下。
不过框架思想很值得学习。
看来是taobao的同学。 s4从它产生的项目来看,主要就是解决实时计算的需求,允许请求丢失。但在一些商业项目中,是不会允许出现数据丢失。
s4针对PE节点数据,有个Persist概念,想做failover也靠谱,借助于类似共享存储,性能上估计会有比较大的损失。
1 楼
lance_123
2011-06-21
failover是非常致命的地方。
之前本来打算拿来项目用,看了一阵子后,发现非常致命,特别是在有些业务下。
不过框架思想很值得学习。
之前本来打算拿来项目用,看了一阵子后,发现非常致命,特别是在有些业务下。
不过框架思想很值得学习。
发表评论
-
yugong QuickStart
2016-03-05 01:52 0几点说明 a. 数据迁移的方案可参见设计文档,oracl ... -
阿里巴巴开源项目: 阿里巴巴去Oracle数据迁移同步工具
2016-03-05 18:29 6551背景 08年左右,阿里巴巴开始尝试MySQL的相关 ... -
愚公performance
2016-03-02 17:29 0性能测试 全量测试 场景1 (单主键, ... -
yugong AdminGuide
2016-03-02 16:40 0环境要求 操作系统 数据库 迁移方案 部署 ... -
Tddl_hint
2014-01-27 13:52 0背景 工作原理 Hint格式 direct模 ... -
tddl5分库规则
2014-01-26 14:41 0背景 工作原理 构建语法树 元数据 基于 ... -
tddl5优化器
2014-01-22 15:12 0背景 工作原理 构建语法树 元数据 抽象语 ... -
映射规则配置
2013-09-26 11:25 0背景 因为alibaba的特殊业务,比如: 同 ... -
网友文档贡献
2013-09-18 15:50 01. Otter源代码解析系列 链接:http://e ... -
Manager配置介绍
2013-09-16 13:00 0通道配置说明 多种同步方式配置 a. 单向同步 ... -
canal&otter FAQ
2013-09-05 17:30 0常见问题 1. canal和 ... -
阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房)
2013-08-22 16:48 40479项目背景 阿里巴巴B2B公司,因为业务的特性 ... -
Otter AdminGuide
2013-08-19 11:06 0几点说明 otter系统自带了manager,所以简化了一 ... -
Otter高可用性
2013-08-17 23:41 0基本需求 网络不可靠,异地机房尤为明显. man ... -
Otter数据一致性
2013-08-17 23:39 0技术选型分析 需要处理一致性的业务场景: 多地修改 ( ... -
Otter扩展性
2013-08-17 22:20 0扩展性定义 按照实现不同,可分为两类: 数据处理自定 ... -
Otter双向回环控制
2013-08-17 21:37 0基本需求 支持mysql/oracle的异构数据库的双 ... -
Otter调度模型
2013-08-17 20:13 0背景 在介绍调度模型之前,首先了解一下otter系统要解 ... -
Otter Manager介绍
2013-08-16 11:16 0背景 otter4.0发布至 ... -
Otter QuickStart
2013-08-14 14:56 0几点说明 otter依赖于canal提供数据库 ...
相关推荐
### S4:分布式流计算平台的关键知识点 #### 一、S4概述与设计目标 S4(Simple Scalable Streaming System)是由雅虎实验室开发的一款通用的分布式流计算平台,其核心设计目标是提供一个可扩展、部分容错、可插拔...
分布式流处理技术是一种针对流式数据的实时计算技术,它具有分布式、高吞吐、高可用、低延迟和自身容错的特性。流式数据指那些以连续流的方式源源不断产生的数据,这类数据的处理要求系统具备快速响应和实时分析的...
总之,分布式流式计算平台,尤其是S4这样的系统,在处理连续的无界限数据流方面具有重要价值,为包括搜索广告在内的多种业务场景提供了新的技术可能性。随着技术的发展,我们将看到更多创新的流式计算平台出现,为...
分布式流数据实时计算平台iprocess是一个专注于处理实时数据流的计算平台,它的核心优势在于能够对大量的、快速变化的数据进行即时处理和分析。在当今的大数据时代,这种能力变得至关重要,尤其在需要实时决策支持的...
搜索引擎是分布式架构中的重要组成部分,主要负责快速检索和索引大量数据。典型的应用案例有: - **Lucene**: 强大的文本搜索引擎库,提供了高度定制化的搜索能力。 - **Solr**: 基于Lucene 构建的高性能搜索平台,...
例如,Apache Spark Streaming作为一个流式计算引擎,通过将实时数据切割成小块进行并行处理,同时使用“微批量”处理技术实现高效的实时分析。Spark Streaming不仅具有较高的处理性能,而且与图算法和机器学习算法...
4. Yahoo S4:一个分布式流计算平台,用于处理大量连续数据流。它允许以高可扩展性和容错性的方式进行事件处理。 最后,本文档还讨论了如何利用Apache Storm进行大数据分析,包括分析的材料、方法和结果。在讨论中...
流处理用于实时处理持续到达的数据,如Twitter的Storm、Yahoo的S4和LinkedIn的Kafka,它们处理速度快、规模大,但数据不被永久存储,难以获取全局视图。而批处理则以MapReduce为代表,通过分布式计算框架,将大问题...
此外,还有用于实时数据处理的Streaming Data和流计算引擎,如Apache Spark,以及针对非结构化数据处理的Hive数据仓库、Pig数据流处理工具和HBase实时分布式数据库。为了确保数据的安全和隐私,还需要采用数据加密、...
流处理系统如Twitter的Storm、Yahoo的S4和LinkedIn的Kafka,它们用于处理实时到达的大量数据,速度要求高,但数据不易被全面掌握。而批处理则以MapReduce为代表,通过将任务分解为小部分并行处理,降低计算复杂性,...
Apache Spark则是一个用于大规模数据处理的快速、通用的计算引擎,支持多种数据处理模型,包括批处理、交互式查询和流处理。 12. Pregel和图算法:Pregel是Google开发的一种大规模图处理框架,用于处理大规模的图...
- **Pregel**:用于处理图数据的分布式计算系统,能够高效处理大规模图数据。 #### 五、高级数据分析方法 - **BrightHouse**:一种面向即席查询的分析型数据仓库,通过自动调优提高查询效率。 - **基于列的自...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...
Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就流数据模型。这是一个可靠、容错的服务。 彩信发送开发包 apimms apimms 提供了各种语言用来发送彩信...