2013-03-04 20:00 "@brighthas
"的内容
采用内存缓存进行Domain内部使用,可保证Domain的运行一致。 ...

内存缓存遇到集群部署,Domain就没那么容易一致了,面对这种情况,大家是怎么处理的呢?就是:
DDD + event sourcing + in memory + CQRS + 集群(负载均衡的方式部署,每台机器有自己独立的缓存)

当然,如果集群的时候你缓存也是共享的(如用redis来实现分布式缓存),那和单台机器一样了,这个就不讨论了。但是这样做有一个很大的风险就是:要是缓存的那台机器挂了,那整个集群的机器就都无法工作了,当然你可能会说缓存的那台服务器是有主备切换的,呵呵,办法总是有的。

但是,我现在的前提是每台机器有自己独立的缓存(这种设计有一个很大的好处就是各台应用服务器完全独立,他们面向的数据都是自己缓存里的domain,这样的设计更健壮)。

但是这种情况下大家怎么保证以下三点呢?
1)在各台机器在同时处理同一个聚合根的时候,数据一致性不会被破坏;
2)如何做服务器之间不同内存缓存之间的数据同步问题;
3)如何确保domain产生的event的持久化顺序与查询端接收到event的顺序一致。为什么要一致,因为如果这两个顺序不一致,会导致查询端的数据与“通过事件溯源重建得到的聚合根的状态"可能不同。
[该贴被tangxuehua于2013-03-08 18:28修改过]