作者回复: 微服务架构中,要么同步调用,要么异步调用,具体要看业务或者技术场景。 同步调用一般用RPC或者REST框架,异步调用一般通过MQ。
作者回复: P分区容忍性是即成事实,意思是说在微服务场景下,或者说在数据库被拆分的场景下,系统一定是分区的(Partitioned),也就不再是只有一个独立的不分区的数据库。
作者回复: saga可以认为是一种更通用的服务编排/协调模式,偏向解决长流程性事务。而rocket mq的事务消息是实现事务性可靠消息的一种技术。saga模式也可以基于rocket mq的可靠消息来实现。 saga模式一般要求底层消息的可靠交付,但是它的编排逻辑(例如状态机)可以设计为能够自动处理底层消息交付不可靠的情况(通过重试或者回滚等机制)。
作者回复: 回答你的一些问题: 1. 在启动下单扣库存事务之前,可以先校验一下是否有库存,如果没有直接返回没有,如果有再启动分布式事务。 2. 有同步异步两种主要做法,国内大多用同步事务方案,也就是说事务协调器的主流程是同步的,比方说可以基于阿里seata框架的AT模式(或者TCC)模式来实现。国外有不少采用异步方案的,比方说基于uber cadence来实现,虽然是异步实现,但是调用方客户端也是可以封装成同步的,具体可以参考uber cadence的java客户端实现(底层应该使用polling轮询机制实现)。关于seata和cadence,本课程后面都有介绍。
作者回复: saga模式长短事务都支持,长事务更适合。 分布式事务的做法,都是把原来人工做的变成让机器自动做,就像以前银行没有计算机,都靠手工补偿。