基于Akka的分布式领域驱动设计

当咱们要使用Akka相关工具与技术时,可以使用DDD来帮助咱们设计Actor,设计组成整个系统的其它组件,将应用程序分隔为较小的系统的方式,了解子系统的边界以及它们如何交互。数据库

DDD介绍

DDD是一套软件架构的指导原则,DDD中最重要的概念是域模型(Domain Model)。“域”是构成尝试建模的业务或领域的一组要求,约束和概念。DDD中,咱们专一涉及的业务领域,并围绕它构建软件系统模型。架构

  • 构建DDD的过程须要该领域的专家参与进来,无需懂计算机,但能够经过咱们开发的新语言相互交流
  • DDD专一于构建能持续发展的模型,不是一个一直都不变的模型

DDD好处

DDD能够帮助咱们区分系统中的业务区域部分和基础架构部分,帮助咱们争取的在它们周围创造正确的抽象层,这样就不会触及边界。微服务

DDD的目标是将较大的领域业务分解成更小,更易于管理的业务块,而后分别对这些小的业务块进行构建,这样开发的系统不只对咱们更好理解,对领域专家来讲也更好理解。工具

DDD组件

  • 域实体(Entity):实体通常是能够变的,具备惟一可识别的标识,能够直接映射到Akka actor中。actor就是管理可变状态的,而且系统中的actor均可以使用路径对其进行惟一标识。
  • 域值对象:值对象通常没有惟一标识,二者的值相同即认为是相同的,值对象是不可变的。能够做为Akka的消息。
  • 聚合:应用程序内对象的集合,每一个聚合都会绑定到聚合根上,经过聚合根能够访问聚合中的一些元素。在Akka中就是父actor与子actor的关系。删除/中止父actor,子actor也会随之删除/中止
  • 仓储:仓储的目的是从基础架构中抽象出抽象层,建立一个将域和基础架构隔离开的系统,无需关系是使用SQL数据库,NoSQL数据库,数据文件或者其它结构。在Akka中有一组Person聚合,则可能有PersonRepository来管理这些聚合。PersonRepository应该也是一个actor。
  • 域服务:有些操做可能涉及到多个聚合根,这种状况下,咱们能够引入一种被称为Service的概念。服务也是一个域对象,可是用于处理不适合做为聚合的操做,该服务能够根据须要与聚合进行交互。

有界上下文

任何有必定规模的系统都将天然分解为更小的组件,这些组件能够有本身的域,有本身的边界。学习

在Akka中,能够在系统中建立一系列顶级的Actor,让每个actor专门用于一个特定的有界上下文,有界上下文标识彼此隔离的而服务。设计

这种有界上下文与现代微服务体系结构很是类似,这种状况下,每一个微服务一般表明一个有界上下文。使用Akka Clustering,集群Sharding和Akka Http这样的工具能够将一个大型系统拆分为单独的有界上下文。对象

部署Actor的方式只是一个实现细节,而不是应用程序的固有部分,这样能够实现独立的缩放系统的不一样部分开发

结论

了解Akka的actor模型,并知道如何与DDD结合觜火猴,你们便有了能够构建强大的、可扩展的、高度可维护的系统的必要组件,能够遵循这些已经创建好的模式保证系统的顺利构建。部署

学习Akka设计的学习笔记:it

参考《Akka 应用模式》

相关文章
相关标签/搜索