请问下, 在分布式系统中, 有订单模块, 库存模块, 积分模块等, 用户提交订单, 订单系统是以同步的方式调用库存等微服务吗?感觉这样效率会比较低
如果是以异步的方式, 通过mq与其他模块交互, 配合补偿机制来实现分布式事务, 那么前端不能同步得到订单是否创建成功的结果, 该以什么方式友好的展现给用户呢? 感觉可以通过websocket让后端通过事件来通知前端, 但是我在淘宝和京东的订单提交界面并没看到websocket相关的信息, 轮询什么的应该也不可取, 请问下淘宝是以什么样的方式处理这些事务,并让用户看起来觉得像是同步处理完成的呢
可以把订单提交操作进行划分成主流程和附属流程, 主流程同步, 附属流程异步。 比如主流程是校验参数,扣减库存, 然后将订单信息落库, 附属流程是:给用户添加积分,主流程执行完毕后就认为订单创建成功,并把结果返回给前端。 而附属流程可通过在订单创建成功后发送mq通知积分系统给用户添加积分, 保证最终一致性即可。
业务上需要定义,订单创建成功的时候,哪些资源需要扣减,创建订单的时候,预先扣减这些资源,例如库存,积分等,然后创建订单成功,则真正扣减这些资源,否则,需要通过轮询或者其他方式,释放这部分资源,达到最终一致。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。