在微服务中结合使用 DDD 与事件

  • Jan Stenberg
  • 邵思华

2015 年 7 月 7 日

话题:语言 & 开发架构

一年一度的DDD Exchange大会今年在伦敦如期举行,David Dawson为听众带来了一场精彩的演讲。他在演讲中表示:要真正体现出微服务的强大能力,必须结合使用领域驱动设计(DDD)。在 5-10 年前,DDD 曾经帮助我们解决了在软件设计中所犯下的诸多错误,而在微服务这一背景下,同样的错误又开始冒头了。

Dawson 是 Simplicity itself 公司的 CEO,他首先从哲学的角度对架构进行了重新定义:这是你处理某个问题,或对其进行推理的方式,也是你用于解决某个问题的指导原则。但它本身并不是一种解决方案,而是一种设计。你所做的并非形成某种架构,而是根据这些指导原则逐步形成某种设计。有许多组织虽然已经从技术角度实现了微服务,但并未从中受益。在 Dawson 看来,这是因为这些组织遵从了不正确的指导原则。

Dawson 曾经就微服务究竟是什么这一话题与许多人进行过交流,他发现每个人的观点都有所不同,但有一点是一致的:即通过某种网络边界实现隔离性。在他看来,这种隔离性是微服务价值的根本,也是痛苦的源头。你需要在这方面做出大量的权衡,才能够获得丰厚的回报,但其代价也同样不菲。

Dawson 相信,为了创建优秀的微服务,我们真正所需关注的内容与 DDD 中的概念是相吻合的,例如聚合根、网关、视图和事件。他认为事件改变了我们设计软件的方式,并将事件称为真正的统一语言。在与用户进行交流时,他们总是说有什么事发生了,这就是事件。如果从事件的角度进行设计,那么微服务中所存在的大量问题将烟消云散。对于他来说,整个系统中唯一有意义的事实就是一个事件流,而静止的数据,例如数据库中的数据是无用的。只有当这种数据活动起来时,你才能够从中获得价值。当你发起一次请求或查询、发送一个命令,或是对数据进行某种改变时,这些数据就开始活动起来了。

Dawson 认为,如今在开发微服务时,人们对于 HTTP 和 REST 的使用近乎痴迷,但这种技术是有局限性的。它只是一种集成风格,但只提供了请求与响应的功能,却不支持事件广播与流。而通过消息传递,你就能够得到对广播与流的支持,甚至更多的功能。他还相信,通过事件溯源所设计的微服务从根本上对你解决某个问题的方式产生了改变。

明年的 DDD Exchange大会预计于 2016 年 6 月 10 日举办,现在已开放注册。

查看英文原文DDD, Events and Microservices

语言 & 开发架构