刚刚接到阿里的一个电话面试,提到这个问题,一时间没回答上来。
这里对此问题作下分析:
首先这应该是一个发散性问题,考察面试者的问题分析能力和处理能力。
前提条件:
1:淘宝平台,与支付宝平台必然是解耦的。也就是说在淘宝创建订单过程中不可能是同步调用支付宝创建订单接口(同步调步使用两系统耦合太紧,支付宝创建出错,将导致淘宝订购失败,这无法接受)。
2:虽然是异步调用,但实时性要求很高。(因为大量用户在淘宝订购之后会立即支付)
我的思路:
1:淘宝创建订单时,异步调用支付宝的创建订单接口。(或者使用消息中间件,如kafka)。支付宝收到订购消息,则创建订单(这期间会有一定的延迟)。
2:用户选择支付宝支付时,同步调用支付宝创建订单(应为订单有效性检查,这时就必须要求支付宝订单创建成功了,但此时并不会系统造成很大压力,因为已经有大部分订单已创建成功。这里支付宝只须判断,如果订单未创建成功,则创建订单。)。
这里有一个难题:如何保证支付宝异步创建订单的及时性(用户在淘宝下订,到支付宝订单创建成功的时间),我觉得这个延时最多不能超过2秒钟(此时间是考虑用户在淘宝的操作流程和操作时间间隔)。这里考虑kafka主要是因为其它牛B的性能和消息不易失(消费完还能找回,保存时间长)。
就这样。
================================================
补充:考虑到淘宝有货物库存的问题,如秒杀系统,必须严格要求先到的请求优先创建订单,后到请求如果库存不够,则不能创建订单。
由于不可能为秒杀系统单独建立一套订单流程。所以要求:必须保证订单的顺序一致性。
这一点kafka无法满足要求,刚查到的资料:淘宝开源的消息中间件:Metamorphosis (MetaQ) 则可以保证顺序性。
完!