Categories
程式開發

如何基于 DDD 构建微服务?


本文将讨论微服务与 DDD 涉及到的概念、策划和设计方法,并且尝试将一个单体应用拆分成多个基于 DDD 的微服务。

微服务的定义

微服务中的“微”虽然表示服务的规模,但它并不是使应用程序成为微服务的唯一标准。当团队转向基于微服务的架构时,他们的目标是提高敏捷性,即自主且频繁地部署功能。

因此,很难给微服务架构风格下一个简单的定义。我喜欢 Adrian Cockcroft 关于微服务的简短定义:“面向服务的架构由具有界限上下文、松散耦合的元素组成。”

尽管这定义了一种高级的设计启发式方法,但微服务架构具有的特性,使其有别于以往的面向服务架构。根据以往的文章,我们总结了微服务架构应具备的一些特征:

  1. 服务以业务上下文为中心定义了良好的边界,而不是以任意的技术抽象为中心;
  2. 隐藏实现细节,并通过意图接口暴露功能;
  3. 服务不会共享超出其边界的内部结构,例如不共享数据库;
  4. 服务具有故障快速恢复能力;
  5. 团队职能独立,能够自主发布变更;
  6. 团队拥护自动化文化,例如自动化测试、持续集成和持续交付。

简而言之,我们可以将这种架构风格总结如下:

松散耦合的面向服务的架构,其中每个服务都封装在定义良好的界限上下文中,支持应用程序快速、频繁且可靠的交付。