S4实现机理介绍

转载 2012年03月27日 22:12:26

S4实现机理介绍

2011-03-24 12:53 450人阅读 评论(2) 收藏 举报

         S4是yahoo开源的一套流式数据处理系统,什么是流式处理系统,顾名思义,我们把实时处理模块作为一个黑盒(这个黑盒的具体实现我们在下文中讨论),这个黑盒有很多接入管道,待处理数据可以从这些管道实时接入,并实时从出口产生分析后的结果数据。构建的整套系统可以称为流式数据处理系统。

         该系统主要的应用场景可以在:系统状态实时监控,用户行为实时监控,营销&广告效果实时统计。

         在这里先举个例子:用户行为实时监控:

         用户浏览页面行为的log被实时接入到流式数据处理系统,经过实时分析后,系统可以实时输出到每天到当前时间为止,访问网站各个页面的浏览量和用户数(用户数需要针对用户进行去重)。而当我们遇到的计算任务和分析数据都非常庞大时,分布式解决方案便顺理成章的成为救命稻草。

         接下来我们介绍S4系统的实现:

         S4的主要特点:1.decentralize设计,2.同质化设计

         Decentralize:系统并没有任何master机器,可以近似认为没有任何主控角色,这样的设计使得系统扩展性有非常好的表现,系统可以非常方便的按照处理的数据量压力进行横向扩容。

         同质化设计:系统中所有模块执行的程序都一样,在系统设计时也是一视同仁,并没有任何不同,简单的设计原则,便于实现和验证,而且并不失系统功能性。

 

我们先看一下系统设计架构,非常简单,系统只分为两层网络层和业务逻辑层

 

 

 

接下来我们看系统是如果运作的,其实设计理念非常简单,用户逻辑部分主要是Event和EventProcess以及dispatcher的封装。

不同的数据接入进来被抽象成不同的Event,而每个Event会有对应的EventProcess进行处理,EventProcess处理Event的过程中也会产生很多中间结果的Event类型,而这些Event又被PUSH的网络层,网络层通过配置的dispatcher进行转发。

为了便于理解我们再举一个稍微复杂的一个统计需求的具体例子:

假如我们有银行用户实时取款记录如下:

类型1:用户|地区|取款金额|其他冗余信息

类型2:用户|地区|存款金额|其他冗余信息

银行需要监控资金流动性,需要统计每个自然月到当天为止,每个地区的存款金额总数和每个地区的取款总数。

 

于是乎:数据接入的类型就有两种SaveEvent  和 TakeEvent

 

1.SaveEvent处理

SaveEvent被网络层接收到后,调用用户配置的dispatcher接口的dispatch方法,将该Event发送到某台机器,这台机器反序列化数据后得到该Event为SaveEvent便调用SaveEventProcess进行处理,去除冗余信息生成SaveTakeEvent并调用该Event对用的dispatcher接口,将该Event发送到某台机器。

2. TakeEvent处理

TakeEvent被网络层接收到后,调用用户配置的dispatcher接口的dispatch方法,将该Event发送到某台机器,这台机器反序列化数据后得到该Event为TakeEvent便调用TakeEventProcess进行处理,去除冗余信息也生成SaveTakeEvent并调用该Event对用的dispatcher接口,将该Event发送到某台机器。

3. SaveTakeEvent处理

同一地区的SaveTakeEvent被发送到一起,系统对Event反序列化知道该Event为SaveTakeEvent类型,便调用TakeAndSaveEventProcess进行处理,将Save操作和Take操作的钱数进行对应的累加。

 

这里面有几个关键点:

1.       dispatcher接口,这个接口起到的重要职责有两个:1.负载均衡。2:将关联数据发布到同一台机器。

2.       不同类型的Event有对应的EvenProcess进行处理。

 

如上例,distpatcher接口完全可以按照地区进行散列,既保证同一地区的数据落在一起,又保证不同地区数据分散均匀。

 

上例可以用一个如下一个有向无环图进行表示:

 

接下来我们就看S4的流程控制如何实现,其实很简单,上述过程基本上也已经描述清楚,S4充分利用了java的反射机制结合通过数据序列化和凡序列化实现了上述框架。一个Event类型的数据被disaptch不同机器上,成功反序列化出来以后,可以通过反射机制得到Event类型,然后再通过反射机制生成处理这个Event的EventProcess,然后缓存EventProcess实例,用以不断接受此类Event进行处理,产生的中间结果Event也会通过网络层传送出去,并再次经历上述过程,直到DAG任务的结束。

通过Event和EventProcess的对应可以非常方便的构建出一个DAG

 

还有一个关键就是刚才的dispatcher,这个不再详细赘述了,至于系统通过zookeeper进行名字映射等细节问题,这里也不做过多介绍了。

 

这样的设计可以看到所有的机器上的程序都一样,任何一台机器都需要承载Event和EventProcess,而且毫无二致,dispatcher也通过反射机制得到Event的某些关键属性值,并通过这个属性值进行dispatch。

 

上述只是S4的大致实现思路,详细细节分析以后补充。

 

 

官方安装文档解读SAP S4 HANA架构

今天在SAP官网下到SAP S/4 的安装手册:1、Installation Guide for SAP S/4 HANA 1610 2、Installation of SAP Systems B...
  • ot512csdn
  • ot512csdn
  • 2017年07月02日 21:23
  • 2038

SAP S/4HANA表结构之变

一、统一日记账的表 1)一个行项目表,存储所有应用的全部明细–迅速获得洞察力和扩展能力; 2)次级成本要素也变成了总账科目,统一入口维护和管理; 3)数据只需存储一次在一...
  • zhongguomao
  • zhongguomao
  • 2017年01月10日 09:06
  • 4793

SAP发布S4/HANA 意义超过R3

不管你曾经是多么的依赖它——风靡并且领军全球ERP管理软件市场长达23年的SAP电子商务套件R/3,今天也到了不得不说再见的时候了。技术催生、用户需求、业务简化……新一代的电子商务套件S/4HANA,...
  • zhongguomao
  • zhongguomao
  • 2017年01月10日 09:19
  • 2856

深入了解R语言-S4

R语言中的S4相比S3的具有层次结构,它有着明确的类定义、参数定义以及参数检查、继承关系、接口函数等,其编程特点都是基于泛型函数的面向对象编程。趁着假期整理一下近期对S4的学习整理。什么时候使用S4当...
  • qq_27755195
  • qq_27755195
  • 2017年02月02日 16:48
  • 873

模型驱动的数学原理

感觉不错,转过来备查。 原链接: http://www.blogjava.net/canonical/archive/2011/02/07/343919.html     一种技术思想如果...
  • debug_fan
  • debug_fan
  • 2015年01月08日 18:06
  • 527

R语言基于S4的面向对象编程

R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大。 R语言作为统计学一门语言,一直在小众领域闪耀着光芒。直到大数据的爆发,R语言变成了一门...
  • u014032673
  • u014032673
  • 2017年03月16日 20:34
  • 306

android应用自启分析与S4启动列表

揭秘:手机软件自启原理 大家都会想知道,这些软件不是我主动运行的,到底是如何自己运行起来的呢?接下来我们将简单讲讲软件自启的方式和原理。 以下内容有些偏技术,读起来可能有些晦涩,还请耐心拜读。 不...
  • wauit
  • wauit
  • 2015年05月05日 10:46
  • 1690

电源选项中S1,S2,S3,S4,S5的含义

电源选项中S1,S2,S3,S4,S5的含义     以 ACPI 的规格来说吧!ACPI(Advanced Configuration and Power Interface),即高级配置与电...
  • wh_19910525
  • wh_19910525
  • 2016年04月16日 15:49
  • 6342

SEAndroid实现机理

SEAndroid是Google在Android 4.4上正式推出的一套以SELinux为基础于核心的系统安全机制。而SELinux则是由美国NSA(国安局)和一些公司(RedHat、Tresys)设...
  • makeyourprogress
  • makeyourprogress
  • 2017年07月04日 15:36
  • 83

Windows应用程序运行机制(笔记)

Windows应用程序:以windows作为平台运行的应用程序。 API函数 API函数:windows提供了大量可以在应用程序中调用的,用C语言编写的函数。 Windows A...
  • u010642004
  • u010642004
  • 2015年03月31日 21:22
  • 833
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:S4实现机理介绍
举报原因:
原因补充:

(最多只允许输入30个字)