数据类事件:这类事件通常与业务数据相关,例如参考数据或成交信息。这些数据是下游服务关心的业务数据本身,通常需要被存储下来。在传统架构中,这些数据可能会通过消息队列(MQ)进行传递。 指令类事件:这类事件更像是一些不需要保存的过程性指令,它们与 RPC 框架中的方法调用类似,但区别在于它们是异步的,不追求返回结果。指令类事件主要关注执行过程,而不是数据的持久化。 查询类事件:这类事件与指令类事件不同,它们需要有返回结果。查询类事件的目的在于获取信息,如果没有返回结果,那么查询就失去了意义。所以说查询类事件在某种程度上与同步请求相似。
从流水恢复:这种方式类似于回放,它基于时间轴,通过查询历史数据来恢复状态。这种方式对于业务逻辑处理来说非常直观,因为查询的数据本质上就是订阅的数据,处理逻辑相同,易于实现。 从快照恢复:这种方式利用物化表,即在特定时间点对数据进行快照。从某个快照点开始恢复,可以显著提高恢复速度。这种方式适用于大多数场景,尤其是当服务在交易时段发生故障时,从快照恢复比从流水回放要快得多。
同步消费模式:这种模式下,热备服务与主服务同步消费总线上的消息,但热备服务不发布处理结果,类似于一个“哑巴”服务。在需要切换时,通过 Monitor 服务协调完成主备切换。这种方式的优点是主备服务互不干扰,但缺点是可能会限制业务逻辑处理的性能,并需要对代码进行较大改动。此外,验证主备服务的状态一致性也比较困难,通常需要在特定时间点进行对账。在主备切换时,还需要总线支持协调,这对总线提出了额外的要求。 内存状态同步模式:这种模式借鉴了数据库的主从同步思路,将主服务的内存状态变更同步到热备机器,并确保热备服务的消费进度与主服务保持一致。这种方式的优点是对业务逻辑的侵入性较小,不依赖于特定的总线。但缺点是需要额外的机制来支持内存状态的同步,可能会对主服务的性能产生一定影响,尽管可以通过事后同步和幂等操作来最小化这种影响。
关注「InfoQ数字化经纬」公众号,回复「案例」领取《行知数字中国数字化转型案例集锦》。 关注「InfoQ数字化经纬」公众号,回复「进群」加入数字化读者群交流。