07 | 计算过程的正确性:如何设计正确的数据处理架构?
基本概念
游戏举例
关键术语
- 深入了解
- 翻译
- 解释
- 总结
事件溯源(Event Sourcing)是一种重要的架构设计思路,本文深入介绍了事件溯源的核心概念和实现方法。通过数学公式的解释,阐述了事件、状态和自动机之间的关系,以及事件溯源设计的正确性原理。文章重点讨论了命令、事件和状态的处理顺序,以及存储格式和执行过程。此外,还介绍了事件溯源设计中的CQRS术语,即读写分离,以及实时查询和历史查询的实现方法。总之,本文为读者提供了深入了解事件溯源设计核心概念和实现方法的重要参考资料。
《分布式金融架构课》,新⼈⾸单¥59
全部留言(20)
- 最新
- 精选
- LiuHu置顶想了解事件溯源的同学推荐阅读: https://docs.microsoft.com/en-us/previous-versions/msp-n-p/jj591559%28v=pandp.10%29?redirectedfrom=MSDN2021-04-16
- Geek_2655db请问如何支持热点资源的事件溯源?比如金融账户的余额采用事件溯源的方式,当并发来的时候,如何在保证账户不透支的情况下,正确的记录事件并且给客户正确的响应?
作者回复: 这位同学你好。热点事件的处理取决于系统实现方式。如果是用数据库或者Redis,就会出现常见的高负载情况下的常见问题,比如加锁会影响速度,不加锁会影响正确性。 在最基本的事件溯源架构下,系统是单线程运行,因此没有多线程/多进程访问的问题。另外状态也都在内存中,状态和计算可以同时恢复,永远一致。你可以想象为事件溯源是将计算逻辑放在了Redis内部。因此事件溯源在高负载环境下有一定的架构优势。
2021-02-241 - 烟雨任平生如果运用领域驱动设计把业务划分出多个领域服务如账户、用户、交易等,那么为了实现整体业务事件溯源,通常是否需要运用事件溯源方法论来设计每个领域服务? 如果答案是否的话,那么选取事件溯源的设计逻辑是怎样的?
作者回复: 这位同学你好。很不幸的是,在现实情况下很难做到整体架构的事件溯源。 事件溯源有两个假设,一个是所有命令之间存在线性关系,另一个是不具有随机性。但是复杂系统一般存在回路,这样消息之间就不再是线性关系。同时复杂系统一般会用到时钟,一旦业务跟时钟有关,那么很有可能具有随机性,因为时钟是不准确的。 所以,复杂系统不太可能实现整体的事件溯源。 简单的系统一般是线性的,这时候有可能将几个事件溯源的组件拼装成一个更大的事件溯源组件。 是否采用事件溯源设计取决于你觉得组件的正确性有多重要。如果一个组件重要到你需要了解它过去一步一步都发生了什么,那么就可以考虑。
2021-01-161 - 燕羽阳转账的例子,单实例是否只能串行? 如果按userId分多实例,并且钱包有余额上线的限制。比如200元。 命令: A转账给B一元(A、B账户分别存储在节点1和节点2),在节点1执行,如何同时检测A和B的状态(余额),及执行事件 ,才能防止B账户余额超过200元?
作者回复: 燕羽阳你好。我会在后面第13节课详细讲解怎么在多个实例的情况下解决正确性的问题。
2021-01-19 - webmin1. 每一个事件和事件索引,通过Hash算法生成定长验证串,保存在每个事件Head信息中; 2. 先写事件数据文件,再写事件索引文件,这样查询不会因为索引到检索到,而不到读到事件数据的问题。
编辑回复: webmin同学,给你的学习热情点赞。07的思考题参考答案,你可以在答疑集锦(二)找到,希望对你有启发!
2021-01-17 - tt命令的结果是生成事件,那事件也会触发新的事件,特别是当多个事件满足一定条件才会产生新的事件,该怎么处理呢? 比说双时序数据库,事件虽然客观上发生了,比如通货膨胀率是客观的,但是发生的当下人们并不知道具体的数值,只能进行估计,那估计的结果必然有一个随机变量,这不就引入随机性了么?
作者回复: tt你好。事件不会触发事件,而是触发命令。命令会再生成新的事件。命令可以有随机性,但是事件的执行一定不能有随机性。
2021-01-08 - 趁早事务,先索引再事件
编辑回复: 给你的学习热情点赞。这节课思考题的答案,你可以在答疑集锦(二)找到,希望对你有启发!
2021-01-06 - tt1、如何检测文件的完整性? 可以借鉴MYSQL的做法,在文件结构上想办法,就是在完成对文件的刷盘时,在文件中写一个标记: 对于redolog来说,就是有commit标识; 对于statement 格式的 binlog,最后会有 COMMIT;row 格式的 binlog,最后会有一个 XID event。而且还引入了 binlog-checksum 参数,用来验证 binlog 内容的正确性。 2、存储事件和存储事件的索引的存储顺序是怎样的? 应该是存储事件吧,只有事件真正的持久化以后,它的位置才会确定,也就是此时才可以被索引指向。或者说存储事件的过程是为了写,索引是为了读取,他们本身就构成一个线性一致性,起码是因果上的一致性。2021-01-085
- 华仔感觉这个思路和会计记账的思路是一样的2021-01-224
- 之渊明白很多关于事件溯源,这就是银行用事件溯源解决分布式事务问题了2021-08-052