码迷,mamicode.com
首页 > 其他好文 > 详细

业务领域建模Domain Modeling

时间:2019-11-22 20:55:09      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:分析   上下文   str   设计   cti   windows   scheduler   time   end   

一、收集应用领域信息

  我做的题目是海量用户行为实时分析系统的设计与实现。需要设计并实现一个基于流计算的实时计算引擎。目前常用的实时流计算引擎有Flink、Storm等。其主要实现方法是基于事件流,根据用户给定的条件进行实时处理,最后输出用户需要的结果。

二、头脑风暴

  根据需求,我们讨论并整理出了技术架构图。如图1所示。
 
技术图片
  图1 技术架构图
 
  下面对主要的功能模块进行简单的说明: 
  1. InputJunction进行数据的输入。
 
    2.ReceiverJunction将数据转换为内部格式。
 
  3.Context目前改为QueryContext,针对每个Query生成一个处理流程中全局共享的上下文对象。
 
  4.FilterProccessor对输入数据进行过滤,无需存在状态,故放在window前进行处理。
 
  5.WindowProcessor是Window功能的实现主体,具体实现类有TimeWindow、TimeBatchWindow、LengthWindow、LengthBatchWindow。
 
  6.WindowState是存在QueryContext中的Window状态,主要存储过期事件队列(Window数据)。
   
  7.Scheduler实现对过期事件队列的定时调度输出,将过期事件队列发送给后面的处理单元。
 
  8.GroupByOperation和AggregationProcessor的功能是以Event的某一或多个字段为key,根据聚合函数对指定字段进行聚合统计操作。目前的实现的聚合函数为CountExecutor,可根据TimeWindow,按不同key值分别统计在时间窗口内指定字段值的总数,并打印指定的输出字段(包括重命名)。
 
  9.HavingExecutor是对分组后的数据按条件进行过滤
 
  10.OutputJunction实现数据输出和展示
 

三、UML类图

  经过讨论,我们设计出了主要的接口。我们的系统是基于事件流的,所以每个事件需要经过单元进行处理,然后交给下一个单元,直到最后。在这里,我们为所有的单元定义了一个统一的接口Unit。处理单元又可以划分为处理单元(ProcessUnit)和连接单元(JunctionUnit)。处理单元负责对事件进行处理。连接单元只负责将事件传送给其他的单元。此外,在事件的执行过程中,可能需要用到聚合或者时间窗口,这就要求处理引擎能够记录并保存事件的状态,因此我们抽象出了一个State接口,用来保存事件的状态。为了将事件实际的执行者与单元解耦,我们定义了接口Executor,由它来负责事件的具体处理。各个单元只需要根据需要调用Executor即可。

  技术图片


图2 主要的接口

  根据业务的需要,对以上设计的接口进行具体的实现,并定义具体的方法。

 

   Unit:

    getNext()和setNext(),连接各个单元。

  JunctionUnit:

    send()发送事件。

  ProcessUnit:

    process(StreamEvent),接收事件,交给Executor进行处理。

  Executor:

    executor(StreamEvent):事件的实际处理者

 

  

技术图片

图3 具体实现

 

 

 

   

业务领域建模Domain Modeling

标签:分析   上下文   str   设计   cti   windows   scheduler   time   end   

原文地址:https://www.cnblogs.com/lm273/p/11913985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!