当DDD遇上微服务
DDD与微服务是可以相通的,其关键在于Bounded Context。
分布式系统的定义
在谈论这个之前,我们需要就什么是分布式系统达成一致。在我看来,判断一个系统是否是分布式的,其标准是看系统中是否存在跨进程通信。是进程决定了协作与通信的方式,从而引申出两种具有本质区别的编程模型:
- 进程内编程模型
- 跨进程编程模型
它们之间的区别在于组件之间的调用方式。进程内的组件调用是非常简单的,就Java而言,各个驻留于同一个JVM的对象与变量都放在堆内存或者栈内存中,对象的调用(包括方法的调用)就是一种内存的寻址。Java语言通过new关键字创建实例,从而获得该实例的指针,以便于对该实例的属性与方法进行调用。
跨进程组件之间的调用方式与进程内调用有着本质的。虽然跨进程通信机制存在各种不同的实现,但它们要考量的因素都是相同的,需要考虑:
- 进程间的通信协议
- 如