接前文,在进行应用的横向扩展时,至少有三类问题是比较难以解答的
如何保证拆分软件模块的正确性?
如何保证数据库的拆分不会降低性能?
如何对待分布式系统中的一致性等问题?
在实现中,这三个问题可以分别被具体化为:
怎样证明一些代码和另一些代码有很强的相关性,以至于它们应该总是在同一台机器上执行?
怎样保证一些数据和另一些数据不可能同时被同一查询读取(避免在查询计算中引入网络因素),也不可能被同一事务修改(避免2PC)?
怎样证明自己的横向扩展优化带来的副作用在业务逻辑允许的范围之内?
接下来,我们介绍DDD如何解决第一个问题:怎样证明一些代码和另一些代码有很强的相关性?
DDD(Domain Driven Design,领域驱动设计)是一种设计软件的方法论,目前已有十多年历史。作为一种比较完善的工程方法,DDD非常复杂。其核心思路大概是:
软件的目标是实现获得相关领域专家认可的领域模型。
在代码中使用领域模型中的术语描述代码行为。这些词语在其相应的上下文中没有歧义
上下文(Bounded Context)本身也需要在代码中有所表现
如果业务逻辑(Domain)可以划分为多个不相关的子域(Subdomain),那么在理想情况下,问题域与上下文之间有着一一对应的关系。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。