关于vmware:系列文章|云原生时代下微服务架构进阶之路-Event-Storming

53次阅读

共计 3771 个字符,预计需要花费 10 分钟才能阅读完成。

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

  • 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 云原生

正文完
 0