
原子性不是说操作“像原子一样小”,而是把若干步骤当成一个不可分割的承诺单位:从系统认可的结果看,它们要么全部完成,要么失败后不留下部分结果。
银行转账最容易看见这点。把100元从甲账户转到乙账户,至少包含扣款和入账。如果扣款成功后系统中断,只有甲少了钱而乙没有增加,单步都合法,整体却错误。具有原子性的处理会在全部步骤可提交前保留中间变化;任何一步失败,就撤销这一组未完成的改变。
原子性不等于瞬间完成:内部可经历许多步骤,只是外部不应把半成品当成结果。它也不同于幂等性,后者关心重复请求是否继续改变状态;原子性关心一次组合操作会不会只做一半。可逆性一般询问后果能否撤回,原子性则预先规定承诺边界。复杂系统不能保证每步成功,却能规定哪些变化必须共同成立或共同退出。
了解 Geoffrey Chen 的更多信息
订阅后即可通过电子邮件收到最新文章。