事务不是越大越安全。持锁时间过长会降低吞吐并扩大死锁概率,而事务过小又可能暴露中间状态。边界应该覆盖必须同时成立的一组数据库变化。

不要在事务内等待远程调用

调用支付、库存或第三方接口的延迟不可控。把它放在数据库事务内,会长时间占用连接和行锁。更常见的做法是先提交本地状态和待发送事件,再由后台可靠地执行远程动作。

状态机表达过程

跨系统流程不可能依靠一个本地事务完成。用明确的状态和合法迁移描述业务进度,每次迁移通过条件更新防止并发覆盖。失败时执行重试或补偿,而不是假设所有步骤都能原子回滚。

事务设计的检查标准是:崩溃发生在任意两行代码之间,系统能否识别当前状态并继续前进。