用 户模块:user+mail,涉 及user,role,mail,mail_text,balance表 - 产品
模 块:product,涉 及product,category表 新 闻模块:news,涉 及news表
订单
邮件
email,order,user,web
Try: 尝试执行业务
预留必须业务资源(
Confirm
释放Try阶段预留
Cancel
一个幂等的操作典型如:
一个非幂等的操作典型如:
try: 账户
扣减
- cancel时如
果 订单状 态不是 paying,则不增加 账户余 额 - confirm时如
果 订单状 态不是 paying,则不增加 收 款方余 额 - try时如
果 订单状 态不是 unpaid,则不扣减账户余 额
以try阶段为例:
- 请求1读取订单
状 态 - 请求2读取订单
状 态 - 请求1
判断 订单状 态为unpaid,将 订单状 态设置 为paying,并进行 账户余 额扣减 - 请求2
判断 订单状 态为unpaid,执行同上 操作
此时
Try:
try:
- 读取订单
状 态 - 如果订单
状 态为unpaid,则将订单状 态设置 为paying,执行账户余 额扣减(可能 会 抛 出 异常此时会 执行cancel)
confirm:
- 读取订单
状 态 - 如果订单
是 paying,则将订单状 态设置 为paid,执行收 款方余 额表的 增加
cancel:
- 读取订单
状 态 - 如果订单
状 态是paying,则将订单状 态设置 为pay_failure,执行账户余 额的回 增