基於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 應用模式》

相關文章
相關標籤/搜索