SDP(0):Streaming-Data-Processor – Data Processing with Akka-Stream

下的表 2 中Flight类操作的照。

 
按一般的scala和akka的编程方式编写多线程分布式数据库管理软件时一样凡一旦遵循akka代码模式,使用scala编程语言的片比充分的语法;二凡是需要涉及异步Async调用,集群Cluster节点任务布置及Streaming对外集成actor运算模式之底细,用户用具备一定的scala,akka使用更。再接下来就待按业务流程把各级工作环节分解变成不借助顺序的功能模块,然后把这些分拆出来的成效分派给集众多被不同之节点上运算处理。而于SDP用户来说,具备最中心的scala知识,无需了解akka、actor、threads、cluster,只要遵循SDP自定义之工作处理流模式就得编制多线程分布式数据处理程序了。下面我哪怕因故一些亲笔及伪代码来叙述一下SDP的结构和力量:

逾基础

  type UserFunc = R => R 

一个双向关联用半单类间的实线表示。在线的任一端,你放一个角色名及多重值。图
6
显示Flight与一个一定的Plane相关联,而且Flight类知道这个涉及。因为角色名以Plane类表示,所以Plane承担关联中之“assignedPlane”角色。紧接于Plane类后面的多重值描述0…1意味着,当一个Flight实体存在时时,可以发一个或没有Plane与的干(也便是,Plane可能还并未叫分配)。图
6
也展示Plane知道它们跟Flight类的关联。在这个涉及中,Flight承担“assignedFlights”角色;图
6
的希冀告诉我们,Plane实体可以无与flight关联(例如,它是一律劫持全新的飞行器)或和没有上限的flight(例如,一架已服役5年之机)关联。

Sink的重中之重作用实际上是保完全消耗程序中出的有着因素,这是reactive类型程序的必须要求。

图片 1

 

*

哼了,不知不觉还有几只小时就上2017倒计时了。赶快凑合着以跨入2018事先将立即首发布出来,刚好是今年之最终一篇博文。祝各位在新的一致年遭受工作生活顺利!

于类图上展示有默认值的特定属性,有时是行之(例如,在银行账户应用程序中,一个新的银行账户会以散也初始值)。UML
规范允许在属于性列表节中,通过利用如下的号作为默认值的标识:

整体来说SDP是由于同样或多个Stream组成的;每个Stream就表示一致段先后。一段完整的次第Stream是由于流元素源Source、处理节点Process-Node(Flow)及数据输出终点Sink三单环节组成,下面是一个一流的次框架:

0个或1个

 
 再起个别上便进去2018了,想想还是如备一下明底干活主旋律。回想当年始于学函数式编程时的第一目的是想设计同样仿照标准API給那些习惯了OOP方式开商业利用软件之程序员们,使他们能够因此同种类似传统数据库软件编程的办法来落实多线程,并行运算,分布式的数据处理应用程序,前提是这种编程方式不需要针对函数式编程语言、多线程软件编程以及集群环境下的分布式软件编程方式发出死高之更要求。前面试着发布了一个根据scalaz-stream-fs2的数额处理工具开源项目。该项目为主落实了大半线程的数据库数据并行处理,能充分利用域内服务器的多核CPU环境因为streaming,non-blocking方式加强多少处理效率。最近刚落成了针对性全akka套装(suite)的刺探,感觉akka是同样模仿精美之分布式编程工具:一凡actor模式提供了多种多线程编程方式,再不怕akka-cluster能轻松地贯彻集群式的分布式编程,而集群环境转变只有待调整安排文件,无需改代码。akka-stream是平等学功能越来越完整与强劲的streaming工具库,那么只要为akka-stream为根基,设计同样拟能以集群环境里开展分布式多线程并行数据处理的开源编程工具应该好是2018的首要任务。同样,用户或能够以他们深谙的数据库应用编程方式轻松实现分布式多线程并行数据处理程序的支出。

0只或多独

于者的演示中我们好看看有定义的函数都出PRG[R,M]色结果。其中R类型就是stream的素,它流动贯穿了程序的有环节。就比如下水道网络运行规律同:污水由源头Source流入终点Sink,在旅途可能由此差不多个污水处理节点Node。每一个节点代表对管道被流淌污水处理的办法,包括分引流、并叉合流、添加化学物质、最后通过极端把拍卖了的趟向他输出。在PRG中流淌的R类型可能是数据如果数据库表的平履,又或是千篇一律长长的Sring类型的query如plain-sql,可以用JDBC来运作。cassandra的CQL也是String类型的。Slick,Quill,ScalikeJDBC和有些别ORM的Query都好生plain-sql。

0..1

  def load(qry: Query): PRG[R,M] = ???
  def process1: PRG[R,M] = ???
  def process2: PRG[R,M] = ???
  def recursiveProcess(prg: PRG[R,M]): PRG[R,M] = ???
  def results: PRG = ???

  load(qryOrders).process1.process2.recursiveProcess(subprogram).results.run

0..5

 

图片 2

而外fire-and-run类型的演算函数,SDP还相应提供对多线程或分布式程序的map-reduce式运算函数。初步想法是:无论返回结果为,分派任务都是由于persistence-actor来实施之,这样能管非见面落任何任务。如果整任务需要以有着分派任务返回运算结果后再度统一开展深运算时akka的actor消息使得模式是无限符合不了之了。具体情况可以参照我眼前关于cluster-sharding的博文。

属性名称 属性类型
flightNumber Integer
departureTime Date
flightDuration Minutes

 
 我将一般中小企业的IT系统分成两杀组成部分:一是实时的数码搜集(输入)部分,二凡是批量数据抽取、分析、处理局部。为了吃传统被小型企业IT软件编程人员能开服务器集群环境达到多少平台(如云端数据平台)运行的软件系统,我打算经这DSP(Streaming-Data-Processor)项目来促成地方提到的第二局部。第一片好据此CQRS(Command-Query-Responsibility-Separation)即读写分离架构和事件记录(event-sourcing)模式来贯彻均等栽高效便捷响应、安全稳定运转的数搜集系统。这有些我会在成就SDP项目后为akka-persistence为着力,通过akka-http,AMQP如RabitMQ等技术来贯彻。

可能的多重值描述

Process-Node是SDP最根本的一个有的,因为多数用户定义之各种事情职能是以此运算的。用户可以挑选对作业职能拓展拆分然后分担给不同的线程或不同的集群节点开展多线程并行或分布式的运算。SDP应该为用户程序提供多线程,并行式、分布式的演算函数。首先,运算用户程序后答应发R类型结果而,作为一如既往种reactive软件,必须确保完全消耗上一阶段产生的保有R类型元素。下面是一个用户函数的样式:

图 4: 继承通过对超类的一律长闭合的,单箭头的实线表示。

Source是平段子先后的初步有。一般的话Source是经过运算Query产生同样差数据行或者人工构建而成。Source也可以彼此运算Query产生,然后合并成一长长的无序的数据源,如下伪代码的种类:

图片 3

  def load_par(qrys: Query*): PRG[R,M] = ???

图片 4

 

图片 5

 

说明 2:从图 2 照的Flight类的操作

 

双重多之涉嫌 
每当上面,我谈谈了双向关联和单为关系。现在,我拿会介绍剩下的老三种植档次的干。

是因为对那些以关乎尾部或出现的多重值描述感到困惑,下面的表3列有了一部分大抵重值及它含义的事例。

一个近似和一个接口不同:一个近乎可生出她相的实事求是实例,然而一个接口必须至少有一个类似来促成它。在
UML 2
中,一个接口被当是近似建筑模元素的特殊化。因此,接口就象类那样绘制,但是长方形的顶部区域为发出文件“interface”,如图
10
所显示。 5

以祈求被存在个别种办法表示软件包。并没规则要求采用啊种标志,除了用而个人的判断:哪种更有益阅读你描的类图。两栽办法都是由于一个较小的长方形(用于固定)嵌套在一个生之长方形中开的,如图
8 所展示。但是建模者必须决定包的分子争表示,如下:

基础

假使先所涉嫌的,类图的目的是显得建模系统的种类。在大多数底 UML
模型中这些类别包括:

图片 6

图片 7

祈求 7: 单向关系一个实例:OverdrawnAccountsReport 类 BankAccount 类,而
BankAccount 类则针对涉嫌一无所知。

问询基础要

0..*

表示

关联 
当你系统建模时,特定的目标中将会晤彼此关系,而且这些涉及本身需要为清晰地建模。有五种涉。在当时同一片段被,我拿会晤讨论其中之简单单
— 双向的干和单的涉嫌,而且自用会见于Beyond the
basics
片讨论剩下的老三种植涉类型。请小心,关于何时该采取每种型涉及的事无巨细谈论,不属本文的限量。相反的,我用会见将主要集中在各种关系的用,并证实如何在类图上打有涉嫌。

图片 8

软件包 
不可避免,如果你在为一个死之网或很之业务领域建模,在公的模型中将会出广大不同之分类器。管理有的类将是一样项让人生畏的任务;所以,UML
提供一个曰 软件包的团伙元素。软件包要建模者能够组织模型分类器到名字空间被,这出些象文件系统中之文书夹。把一个体系分为多独软件包要系统成为容易了解,尤其是在每个软件包都表现网的一个一定部分经常。 3

至于何时、以及哪快速地以系统结构图被应用数据类型和接口的完全讨论,不在本文的座谈范围里边。既然这样,我为什么要当这里提及数据类型和接口也?你也许想以结构图上模仿这些分类器类型,在此时,使用对的号子来表示,或者至少知道这些分类器类型是任重而道远之。不正确地绘制这些分类器,很有或用设您的构造图读者觉得混乱,以后的体系将未能够适应需求。

继往开来我们的Flight类的例证,我们得以动用性质类型信息来叙述类的习性,如表 1
所示。

0到5个

回页首

图 10:Professor类和Student类实现Person接口的类图实例

name : attribute type = default value

只能3个

到这个结束,我早已介绍了类图的根基,但是要继续往下念!在脚的片段中,我将会晤指引您及您晤面使的类图的重新关键之点。这些连UML
2 业内被的接口,其它的老三种涉类型,可见性和其它补给。

比方来说:

5..15

比喻来说,我们得以设想, 是一个一体化实体,而 车轮 轮胎是整治辆车的相同片段。轮胎可以交待及车时的前面几单礼拜为制作,并放置于仓库着。在是实例中,Wheel类实例清楚地独自地Car类实例而留存。然而,有些情况下, 部分 类的生命周期并  独立于 整体 类的生命周期

就名叫合成聚合。举例来说,考虑公司跟机关的涉及。 柜暨机构 都建模成类,在企业是前,部门非克存在。这里Department类的实例依赖让Company类的实例而在。

给我们再次进一步追究基本凑和做聚合。

骨干凑 
发出成团关系之涉及指出,某个类是另外有类的平等片。在一个凑关系遇,子类实例可以较父类存在更丰富之时光。为了见一个聚众关系,你描一长长的由父类到一些近乎的实线,并当父类的涉及末端画一个未填充棱形。图
12 显示车和轮胎里面的集关系的例证。

图片 9

图 12: 一个会师关联的例子

整合聚合 
组合聚合关系是集聚关系的其余一样栽样式,但是子类实例的生命周期依赖让父类实例的生命周期。在觊觎13受,显示了Company类和Department类之间的成关系,注意组合关系而聚合关系一致绘制,不过这次菱形是吃填的。

图片 10

图 13: 一个重组关系之事例

当图 13
中之关联建模中,一个Company类实例至少总起一个Department类实例。因为涉及是做关系,当Company实例被移除/销毁时,Department实例也用机关地叫移除/销毁。组合聚合的旁一个首要作用是有类似只能与父类的实例相关(举例来说,我们例子中之Company类)。

映关联 
现行我们曾讨论了有着的涉类型。就使你可能注意到的,我们的具备例子已经显得了有限独无同类间的关联。然而,类为得以用反射关联和它们本身相关联。起先,这可能没意思,但是切记,类是架空的。图
14 显示一个Employee类如何通过manager /
manages角色与它们自己有关。当一个类涉到她自身时,这并无代表类的实例与它们自己有关,而是类似的一个实例与类似的其他一个实例相关。

图片 11

图 14:一个照关联关系的实例

图 14
描绘的关系说明一个Employee实例可能是另外一个Employee实例的经纪。然而,因为“manages”的干角色来
0..*的多重性描述;一个雇员或不被外其它雇员管理。

可见性 
于面向对象的筹划着,存在属性与操作可见性的标志。UML
识别四栽档次的可见性:public,protected,private及package。

UML
规范并无要求性能和操作可见性必须出示在类图上,但是它们要求吗每个属性和操作定义可见性。为了当类图上之显得可见性,放置可见性标志被属性或操作的讳前。虽然
UML 指定四种植可见性类型,但是其实的编程语言或多额外的可见性,或非支持
UML 定义的可见性。表4显示了 UML 支持之可见性类型的不等标志。

申 4:UML 支持之可见性类型的表明

标志 可见性类型
+ Public
# Protected
Private
~ Package

而今,让我们看一个近似,以验证性与操作的可见性类型。在图 15
中,所有的特性和操作都是public,除了 updateBalance 操作。updateBalance
操作是protected。

图片 12

图 15:一个 BankAccount 类说明她的性质和操作的可见性


回页首

UML
2 补充

既然如此我们曾覆盖了基础及高等主题,我们用覆盖有出于UML 1.
x增的类图的新标志。

实例 
当一个系统结构建模时,显示例子类实例有时候是行之有效之。为了这种布局建模,UML
2
资 实例规范 元素,它显示在系面临采取例子(或具体)实例的值得注意的音信。

实例的标记和接近一样,但是代表顶端区域中只部分类名,它的名字是由此拼接的:

Instance Name : Class Name

举例来说:

Donald : Person

因展示实例的目的是展示值得注意的还是相关的信息,没必要当您的模型中包含全体实体性与操作。相反地,仅仅显示感兴趣的性质和其值是一心适用的。如图16所讲述。

图片 13

图 16:Plane类的一个实例例子(只显示感兴趣的属于性值)

但,仅仅呈现有些实例而并未她的干非顶实用;因此,UML 2
吗同意以实体层的涉及/关联建模。绘制关联和一般的近乎涉之平整平等,除了在建模关联时有一个外加的要求。附加的限是,关联关系必须与类图的干相互平等,而且事关的角色名呢必须和类图相平等。它的一个例显示为图
17 中。在此事例中,实例是祈求 6 中类图的事例实例。

图片 14

图 17:图 6 中之所以实例代替类的例证

图 17
有Flight类的老二个实例,因为类图指出了在Plane类和Flight类之间的关系是 0或多。因此,我们的例子让起了少于个同NX0337
Plane实例相关的Flight实例。

角色 
修建模类的实例有时比要之更加详细。有时,你也许只想如果在一个比多之形似层次做类关系之模子。在这种状况下,你当运用 角色 记号。角色记号类似于实例记号。为了建类似的角色模型,你作画一个方格,并于里放置类的角色名及类名,作为实体记号,但是当就情景而莫能够加下划线。图
18 显示一个由于图 14 中图描述的雇员类扮演的角色实例。在图 18
中,我们得以看,即使雇员类以及她本身有关,关系实在是关于雇员之间扮演经理和团队成员的角色。

图片 15

图 18:一个类图显示图14饱受扮演不同角色的切近

在意,你免可知以纯类图中做类角色的建模,即使图
18显示你得这么做。为了用角色记号,你拿会用采用下讨论的内部结构记号。

里头的布局 
UML 2
结构图的重复实用之功能有是新的内部结构记号。它同意而来得一个近乎或另外的一个分类器如何以里面整合。这当
UML 1. x
中是无容许的,因为记号限制而不得不显示一个好像所享有的集聚关系。现在,在 UML
2 中,内部的布局记号让您再明亮地显示类的依次组成部分如何保障关系。

受咱看一个实例。在图 18
中我们来一个类图以表现一个Plane类如何由四个引擎和少数单控制软件对象成。从这个图中省略的东西是展示关于飞机部件如何让配的一部分信息。从图
18
的图,你无法说明,是每个控制软件对象说了算两只引擎,还是一个控制软件对象说了算三独引擎,而另一个控制一个引擎。

图片 16

图 19: 只显示对象期间涉及的类图

打制类的内在结构将会见改善这种状态。开始经常,你通过用二独区域画一个方格。最上方的区域包含类名字,而比逊色的区域包含类的内部结构,显示在其父类中担负不同角色的有些类,角色中之每个有类为涉及任何类。图
19 来得了Plane类的内部结构;注意内部结构如何澄清混乱性。

图片 17

贪图 20:Plane类的内部结构例子。

每当图 20 中Plane有星星点点独
ControlSoftware 对象,而且每个控制次个引擎。在图左上的
ControlSoftware(control1)控制引擎 1 和 2 。在觊觎右边的
ControlSoftware(control2)控制引擎 3 和 4 。 

祈求 5: 一个行使树形记号的后续实例

贪图3形,delayFlight 操作有一个Minutes类型的输入参数 —
numberOfMinutes。然而,delayFlight
操作没有返回值。 1 当一个操作发生参数时,参数为放在操作的括号内;每个参数还使这样的格式:“参数叫:参数类型”。

balance : Dollars = 0

类的属于性节(中部区域)在分隔线上排有各一个看似的特性。属性节是可选取的,要是均等就此它们,就隐含类的列表显示的每个属性。该线用而下格式:

只有为关系 
于一个只是为关系中,两只类似是系的,但是单纯出一个看似知道这种沟通的留存。图 7
显示只为关系的透支财务报告的一个实例。

每当图 10
中显示的图中,Professor和Student类都实现了Person的接口,但并无由它们延续。我们掌握就一点是出于下两只原因:1)
Person对象作为接口被定义 —
它当目标的名区域中起“interface”文本,而且我们看出由Professor和Student对象根据画类对象的平整(在她的讳区域中从不额外的分类器文本)标示,所以它们是 靶。
2) 我们掌握继承在这里没让出示,因为跟带箭头的线是点线而不是实线。如图
10
所展示,一长达带有闭合的就为箭头的 线意味着实现(或履);正如我们于图
4 中所观看的,一漫漫带有闭合单向箭头的丝意味着继续。

在业务类图中,属性类型一般与单位可,这对于图的恐怕读者是发生意义之(例如,分钟,美元,等等)。然而,用于转移代码的类图,要求近乎的性类型必须界定在由程序语言提供的类型中,或含于当网被落实的、模型的项目中。

name : attribute type
flightNumber : Integer

表 1:具有涉类型的Flight类的性能名字

聚合 
汇聚是平等种植专门类型的关联,用于描述“总体到有的”的关系。在中心的聚众关系蒙, 部分类 的生命周期独立为 整体类 的生命周期。

图 11:增加关联类 MileageCredit

图片 18

类名

祈求 8:在软件包之长方形内展示软件包成员的软件包元素例子

图 3:Flight类操作参数,包括可选的“in”标识。

1..*

接近操作记录在类图长方形的老三单(最低的)区域受到,它吧是只是摘的。和性一样,类的操作以列表格式显示,每个操作以它和谐线达。操作以下列记号表现:

    name(parameter list) : type of value returned

贪图 9:一个经连接线表现软件包成员的软件包例子

  • 接口

  • 数据类型

  • 组件

1

希冀 2:显示默认为0美元的balance属性值的银行账户类图。

以图 11 中形的类图中,在Flight类和 FrequentFlyer
类之间的干,产生了名为
MileageCredit的涉嫌类。这表示当Flight类的一个实例关联到 FrequentFlyer
类的一个实例时,将会见产生 MileageCredit 类的一个实例。

类属性列表

5到15个

http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/

1个或自己单

接口 
于本文的前,我提议乃为接近来考虑分类器。事实上,分类器是一个尤为相似的概念,它包括数据类型和接口。

当文档化操作参数时,你或许采取一个不过选的指示器,以展示参数到操作的输入参数、或输出参数。这个可卜的指示器以“in”或“out”出现,如图3着之操作区域所示。一般的话,除非将动用同一栽早期的顺序编程语言,如Fortran
,这些指示器可能会见有所帮助,否则其是休必要之。然而,在
C++和Java中,所有的参数是“in”参数,而且以UML规范,既然“in”是参数的默认类型,大多数口将会晤遗留漏输入/输出指示器。

关联类 
当事关建模中,存在有状态下,你得包括外类,因为它含有了关于关联的发生价之信息。对于这种状况,你晤面使 关联类 来绑定你的中坚关系。关联类和一般类一样表示。不同的凡,主类和关联类之间因此同长达相交的点线连接。图
11 显示一个航空工业实例的干类。

0只或多独

图片 19

每当面向对象的设计着一个不胜关键之定义,继承,指的是一个好像(子类)继承除此以外的一个接近(超类)的一律功能,并加它和谐之新职能(一个非技术性的比方,想象我累了自己妈妈的貌似的音乐力量,但是当自身之贤内助,我是绝无仅有一个玩电吉他的人数)的力。为了在一个类图上建模继承,从子类(要累行为的类)拉发一致长条闭合的,单键头(或三角形)的实线指向超类。考虑银行账户的类别:图
4 显示 CheckingAccount 和 SavingsAccount 类如何由 BankAccount
类继承而来。

类操作列表

只能1个

UML
为这些类别从了一个专门之名:“分类器”。通常地,你可把分类器当做类,但在技术上,分类器是更进一步宽广的术语,它还是引用上面的其余三栽档次也好。

表 3: 多重值和它的表示

于图 4 中,继承关系由每个超类的单身的线画来,这是于IBM Rational
Rose和IBM Rational
XDE中使用的方法。然而,有相同种名叫 树标记的备方式好画出继承关系。当有个别个或再次多子类时,如图
4 中所显示,除了延续线象树枝一样混在合他,你可利用树形记号。图 5
是重绘的跟图 4 一样的继续,但是这次使用了树形记号。

一个单的干,表示为同一长长的带有指向已经知类的盛开箭头(不关的箭头或三角形,用于标志继承)的实线。如同标准提到,单为关系包括一个角色叫以及一个基本上重值描述,但是跟专业的双向关联不同的常常,单为关系只含有已知类的角色叫及多重值描述。在图
7 中之例证中,OverdrawnAccountsReport 知道 BankAccount 类,而且知道
BankAccount
类扮演“overdrawnAccounts”的角色。然而,和专业提到不同,BankAccount
类并不知道它与 OverdrawnAccountsReport
相关联。 2

操作名称 返回参数 值类型
delayFlight
Name Type
numberOfMinutes Minutes
N/A
getArrivalTime N/A Date

图 1: Flight类的类图

好像的 UML 表示是一个增长方形,垂直地分成三独区,如图 1
所示。顶部区域显示类的讳。中间的区域列出类的属性。底部的区域列出类的操作。当当一个类图上写一个类元素时,你要使来上的区域,下面的第二只区域是不过摘的(当图描述仅仅用于展示分类器间事关之高层细节时,下面的鲜单区域是匪必要的)。图
1 亮一个航线班机如何当 UML
类建模。正而我们所能够收看的,名字是 Flight,我们得以当中区域来看Flight类的3独属性:flightNumber,departureTime

flightDuration。在底层区域受到我们可见到Flight类有少数只操作:delayFlight
和 getArrivalTime。

继承

3

泛泛类及操作 
仔细之读者见面注意到,在图 4 和 图5
中之图中,类名BankAccount和withdrawal操作下斜体。这象征,BankAccount
类是一个抽象类,而withdrawal方法是虚幻的操作。换句话说,BankAccount
类使用withdrawal规定抽象操作,并且CheckingAccount 和 SavingsAccount
两个子类都分别地实行其分别版本的操作。

希冀 6:在一个Flight类和Plane类之间的双向关联的实例

于 UML 2
中,了解类图的底蕴更为重要。这是以类图为所有的别组织图供基本的构建块。如组件或对象图(仅仅是推了些例子)。

  • 一经建模者决定在大长方形中显软件包的分子,则兼具的那些成员 4 消让放于长方形里面。另外,所有软件包之讳需要放在软件包之可比小长方形之内(如图
    8 的显得)。

  • 假定建模者决定于很的长方形之外显示软件包成员,则兼具以见面在图上显示的成员都需让撂长方形之外。为了展示属于软件包的分类器属于,从每个分类器画一修线至内部有加号的团,这些圆周粘附在软件包之上(图9)。

双向(标准)的关联 
事关是少只类间的交接。关联总是给如是双向的;这意味,两个像样彼此理解它们之中的关联,除非你限定一些另门类的关联。回顾一下Flight
的例证,图 6 显示了当Flight类和Plane类之间的一个标准项目的干。

唯独,超类(父类)不肯定要是是抽象类。标准类作为超类是常规的。

图片 20

含义

展示属性默认值是只是选取的;图 2
显示一个银行账户类具有一个称作也 balance的品种,它的默认值为0。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图