Dojo
最新
最佳
搜索
订阅
解道Jdon
架构设计
领域驱动
DDD介绍
DDD专辑
战略建模
领域语言UL
领域事件
商业分析
工作流BPM
规则引擎
架构师观点
数据工程
产品经理
系统思维
微服务
微服务介绍
微服务专辑
模块化设计
SOA
API设计
clean架构
SpringBoot
分布式事务
分布式架构
Kubernetes
DevOps
编程设计
GoF设计模式
模式专辑
面向对象
函数式编程
编程语言比较
编程工具比较
形式逻辑
前端编程
Reactive编程
Jdon框架
Rust语言
人工智能
Web3
模因梗
幽默梗
程序员吐槽
面试技巧
Java入门
数字化转型
认知偏差
道德经
更多话题
关于jdon框架 in-memery 模式的状态和线程问题
17-04-03
yxh1122
最近研究了jdon框架的 ES 和
CQRS
模式,采用disruptor模式的
领域事件
使用单线程执行。经过测试jdonframework 源码包中的Match实例项目,在领域事件的1:1消费关系中,component中的onEvent方法执行的业务是单线程执行的(1:N应该一样,没有测试),对于一个领域模型内部的多个事件来说,可能会存在同时有多个事件的消费者执行,也就是一个内存模型会同时有多个线程在执行,会同时修改模型状态,这样对领域模型的共享状态是否会存在干扰,导致冲突?
另外,如果内存中存在几万、几十万乃至上百万的模型对象,按系统并发达到单机每秒1000算,可能会同时需要上万的线程执行,如果使用线程池,想知道jdon框架如何对模型分配线程的?
希望banq大神能够解答下!
[该贴被yxh1122于2017-04-03 17:41修改过]
banq
2017-04-04 19:16
不是很明白你的意思,jdon框架的设计思路如下:
前端--->-command ----1:1--->in-memory领域模型聚合根 -----事件-1:N-->事件消费者
command修改聚合根实体状态时是单线程,确保并发时不会扰乱状态。状态改变后发出的事件是1:N,这个事件如果需要更新
分布式系统
的其他机器上的状态,那么保证事件顺序很重要(通过Kafka),否则更新其他机器上状态会出错。前面command更新的是本地内存中状态。
kof99
2017-04-10 09:14
in-memory如何集群? 有状态的领域对象,单服务器还能控制线程修改,集群下咋整
[该贴被kof99于2017-04-10 09:25修改过]
banq
2017-04-11 09:31
2017-04-10 09:14 "@
kof99
"的内容
有状态的领域对象 ...
in-memory集群有开源Hazelcast(Java),Redis(非Java),和ORacle的coherence。
kof99
2017-04-11 17:29
不是很明白,如果把领域对象放入缓存,它还能执行方法吗?
banq
2017-04-12 12:25
当执行A a =new A()时,a就在内存in-memory中,只不过不是每次都new A,而是第一次new A以后,将a这个实例着床到缓存实例或容器壁上,以后需要使用a时,从in-memory缓存或容器壁上获取就可以了。
kof99
2017-04-13 16:18
2017-04-12 12:25 "@
banq
"的内容
以后需要使用a时,从in-memory缓存或容器壁上获取就可以了。 ...
如果集群,多台服务器从redis取得a,并发修改状态咋办? 用redis的分布式锁,还是
架构
上读写分离,读集群,只允许单点写?
banq
2017-04-13 19:48
redis不是Java,只能当数据库使用
yxh1122
2017-05-16 15:03
2017-04-11 17:29 "@
kof99
"的内容
不是很明白,如果把领域对象放入缓存,它还能执行方法吗? ...
领域对象放入缓存只是暂存,将内存当成临时存储的地方,等下次使用时直接从缓存中拿出,免除了对数据库的开销。从缓存拿出后还是原来的内存对象,方法和数据都没有变化
yxh1122
2017-05-16 15:10
2017-04-04 19:16 "@
banq
"的内容
不是很明白你的意思,jdon框架的设计思路如下: ...
首先感谢大家的参与
一个聚合根实体会有多个command来修改状态,单个command是单线程的,多个command那不就是多线程了吗?
比如一个聚合根A,内部有一个属性a,A会有多个commad命令会影响a属性的值,虽然单个command避免了对a的同时修改,但多个command会否出现问题呢?
banq
2017-05-19 21:27
2017-05-16 15:10 "@
yxh1122
"的内容
虽然单个command避免了对a的同时修改,但多个command会否出现问题呢? ...
Jdon框架在command处使用ringbuffer保证某个时刻只能一个command访问。
JdonFramework