通过本篇文章您能够理解到以下内容:

  • Event Storming的由来
  • Event Storming具体实施流程
  • Event Storming的一个简略示例
  • 总结

Event Storming的由来

当咱们在谈到Event Storming(事件风暴)时,通常会须要谈起两个概念:DDD(Domain-Driven Design,畛域驱动设计)以及微服务。

那么这三者到底有什么关联呢?

无论是Event Storming 还是DDD或者微服务,三者都是为了解决同一个问题,那就是软件系统设计遇到的艰难。

微服务作为一种架构设计,通过将巨石利用拆分成若干个微服务,从而把原来外部的耦合性、复杂性进行最大水平的升高,变成可管制化,进而更好的应答业务的疾速变动。

DDD是一种软件系统设计和开发的方法论,是一种指导思想,它从实践层面通知咱们如何进行架构的设计。

到这里咱们有了指标,微服务架构;咱们也有了指导思想,就是DDD ;可是咱们具体落地的计划是什么呢? 亦或者说咱们实现微服务拆分具体可施行的门路是什么呢?

此时Event Storming退场了,并且给出了完满的答案。

它是将DDD落地到了具体的实际层面,通过workshop模式,将对应的技术人员以及领域专家集中在一起,通过可视化便签纸的形式,以及高互动的交换从而一步一步的开掘和梳理出业务流程,并造成业务边界和初步的微服务划分,最终造成对立的业务语言。

此外对于Event Storming,咱们不得不提到一位巨匠,他就是Alberto Brandolini,Event Storming就是他发明创造的。

对于Event Storming的定义如下图所示:


(https://www.eventstorming.com)

Event Storming是一种灵便的研讨会模式,用于简单业务畛域的合作摸索。

它能够依照不同的模式进行开展,实用于以下多种场景。

  • 评估现有业务运行的情况,并发现最无效的晋升业务状况的措施
  • 摸索新业务模式的可行性
  • 构想新的服务,最大限度地为各个参与方带来踊跃正向的成绩
  • 帮忙设计整洁并且可保护的事件驱动软件,以便于撑持疾速倒退的业务

Event Storming 具体实施流程

在正式开始进行Event Storming之前,咱们须要进行一些筹备,这里我把它归结为三大类,如下图所示:

须要筹备的物理条件大体分为四大类,如下图所示:

  • 会议室(较大的凋谢空间),用于技术人员、领域专家等成员之间的充沛探讨。
  • 便签纸(各种色彩,用于代表不同意义,例如Domain Event、Command等)。
  • 笔 (最好每个人一支),用于在便签纸上书写。
  • 白板 用于贴便签纸。

在物理条件具备当前,接下来就是须要邀请相干人员进行参加,整体能够分为三类人员:

  • 组织者,相熟整个Event storming的流程,保障整个过程大家顺利完成。
  • 领域专家,对业务流程精通的人,在整个Event storming过程中负责廓清业务上的某些概念,并且查看是否有脱漏的事件。
  • 我的项目成员,该项目标成员,角色包含开发人员、架构师,通过Event storming疾速让整个团队相熟理解整个我的项目的业务流程。

在物理条件筹备以及人员邀请实现后,咱们还须要对参加此次我的项目的人员进行对于Event Storming的概念和组织形式的介绍。因为在整个Event Storming过程中会应用到不同色彩的便签纸,不同色彩代表的内容含意不同。因为参加整个workshop的成员不肯定很相熟具体含意,此时能够由组织者进行具体的介绍和解释,每种不同色彩的便签纸怎么去应用,如下图所示:

DOMAIN EVENT
个别状况应用橘色便签纸示意,代表业务流程中曾经产生的事件,此处须要留神的是须要用过来式示意。例如用户已注册(User Registered)。

COMMAND
个别状况应用蓝色便签纸示意,代表产生某一事件的动作。即在之前产生的畛域事件中退出Command的概念。其中Command代表的是用意、动作。

VIEW
个别状况应用绿色便签纸示意,代表用户与之交互以在零碎中执行工作的视图。

POLICY
个别状况应用紫色便签纸示意,代表某种规定。例如在领取过程中,须要输出明码,而屡次输出谬误,就会触发账户解冻操作。屡次输出谬误,就是咱们的Policy,而账户解冻就是被Policy触发的新的畛域事件。

ACTOR
个别状况应用黄色便签纸示意,代表一类特定的用户。

AGGREGATE
个别状况应用尺寸比拟大的黄色便签纸示意,代表概念雷同的command和domain event聚合在一起。能够认为Aggregate就是微服务的雏形。

EXTERNAL SYSTEM
**个别状况应用粉色便签纸示意,这个绝对好了解,代表的是第三方内部零碎。

TROUBLE SPOTS
个别状况应用红色便签纸示意,遇到的麻烦,或者问题。

至此后期筹备都曾经实现,接下来让咱们看下整个流程是怎么的。

首先是畛域事件的收集。
这些事件是要以过来式的形式进行表白,是因为从艰深语言的角度来了解,事件实质上就是已产生的事实。

这里须要留神的一点是事件是有绝对程序的,咱们能够把有绝对程序关系的事件放在同一行并贴在之前筹备好的白板上。此外因为每一个人都能够进行事件的书写,此处不用放心彼此书写反复,后续能够进行合并,缺失能够由领域专家进行斧正,补充。

另外一点,因为参加人员有时并不一定非常相熟整个流程,能够由组织者书写第一个事件。

在收集完所有畛域事件之后,咱们能够在此基础上进一步摸索,并退出Command以及Actor角色。即某个Actor执行了某个Command产生了对应的Domain event。

此时在融入Domain event、Command、Actor后,可能会产生更多思考,例如某些command是否在特定的条件下所触发,而这种逻辑就是Policy。

接下来咱们将雷同Command以及Domain event进行归类,代表的就是Aggregate,此时咱们用尺寸比拟大的黄色便签纸进行示意。

最初通过Aggregate咱们就能够绝对容易的划分子域和限界上下文了。


Event Storming的一个简略示例

通过上一章节的介绍,置信大家对Event Storming中的概念,以及施行流程有了较为清晰的了解。可能有些概念较为艰涩形象,同时Event Storming自身是以workshop入手实际为主的模式,所以为了更好的加深咱们对整个流程的了解和认知,接下来会联合一个例子,再次来回顾下整个流程。

咱们以一个一般用户注册的业务进行阐明:

第一步:定义Event
咱们须要寻找Domain event,在下面形容的场景中,用户注册就是一个典型的Event,须要留神的是咱们须要应用过来式的形式,所以对应的这个Event就是“用户已注册”。

第二步:寻找Event对应的Command
Command是代表某一个事件对应的动作,在上一步骤中形容的Event“用户已注册”,咱们能够确定绝对应的 Command是“注册用户”。

第三步:定义Actor
Command是由谁发动执行的呢? 如果咱们承受任何普通用户进行注册申请,那么在这个Event Storming的流程里,普通用户就是Actor。即一个普通用户通过注册用户的这种动作,产生了一个与之对应的用户已注册的事件。

第四步,定义Policy
在第一到第三步的过程中,可能会遇到某些逻辑下才触发的Command,比方用户注册胜利当前,零碎推送短信或者邮件揭示。这种逻辑称之为后面介绍过的Policy。

以上的第一步到第四步咱们能够进行反复进行,直至整个业务流程都梳理结束。而后将command和domain event归类聚合在一起,就造成了如下的Aggregate,微服务的雏形就初步造成了。

这是一个非常简单的示例以介绍Event、Command、Actor等的概念和大抵Event Storming的流程,然而在理论工作过程中,往往业务场景会非常复杂,企业级利用波及到的事件会很多,咱们须要针对每个事件进行相关联的剖析和梳理以撑持后续的微服务设计的进一步细化。


总结

要实现微服务架构设计,咱们能够应用DDD作为思维领导,并应用Event Storming进行具体实际落地。在本篇文章中顺次向大家介绍了Event Storming的由来、定义、后期筹备要求,以及整个Event Storming实际流程。

Event Storming之后,咱们就须要联合Event Storming的产出,即微服务的雏形,进行下一步操作— Boris。什么是Boris,整个施行的流程又是怎么的? 我在下期的文章中会持续和大家进行交换分享,敬请期待!

参考链接:
1.https://www.eventstorming.com
2.https://tanzu.vmware.com/deve...


作者简介

李刚,VMware 大中华区利用现代化部门高级零碎架构师,资深企业级软件开发和软件系统架构师。Spring Cloud开源社区我的项目贡献者、Netflix开源社区贡献者。近几年,参加并主导了许多大型企业客户的利用现代化数字转型我的项目,波及物流、制作、金融等诸多畛域。特地对微服务实现办法、现代化利用架构设计、云原生施行落地、开源软件技术等方面有着丰盛教训。

起源|公众号:VMwareTanzu云原生