记阿里电话面试的一个遗留问题:淘宝订单如何保证与支付宝订单的同步“?...
刚刚接到阿里的一个电话面试,提到这个问题,一时间没回答上来。
这里对此问题作下分析:
首先这应该是一个发散性问题,考察面试者的问题分析能力和处理能力。
前提条件:
1:淘宝平台,与支付宝平台必然是解耦的。也就是说在淘宝创建订单过程中不可能是同步调用支付宝创建订单接口(同步调步使用两系统耦合太紧,时延太长,支付宝创建出错还将导致淘宝订购失败,这无法接受)。
2:虽然是异步调用,但实时性要求很高。(因为大量用户在淘宝订购之后会立即支付)
我的思路:
1:淘宝创建订单时,异步调用支付宝的创建订单接口。(或者使用消息中间件,如kafka)。支付宝收到订购消息,则创建订单(这期间会有一定的延迟)。
2:用户选择支付宝支付时,同步调用支付宝创建订单(应为订单有效性检查,这时就必须要求支付宝订单创建成功了,但此时并不会系统造成很大压力,因为已经有大部分订单已创建成功。这里支付宝只须判断,如果订单未创建成功,则创建订单。)。
这里有一个难题:如何保证支付宝异步创建订单的及时性(用户在淘宝下订,到支付宝订单创建成功的时间),我觉得这个延时最多不能超过2秒钟(此时间是考虑用户在淘宝的操作流程和操作时间间隔)。这里考虑kafka主要是因为其它牛B的性能和消息不易失(消费完还能找回,保存时间长)。
就这样。
================================================
补充:考虑到淘宝有货物库存的问题,如秒杀系统,必须严格要求先到的请求优先创建订单,后到请求如果库存不够,则不能创建订单。
由于不可能为秒杀系统单独建立一套订单流程。所以要求:必须保证订单的顺序一致性。
这一点kafka无法满足要求,刚查到的资料:淘宝开源的消息中间件:Metamorphosis (MetaQ) 则可以保证顺序性。
完!
阅读更多
- 阿里电话面试问题----100万个URL如何找到出现频率最高的前100个?
- 如何通过一个问题,完成最成功的技术面试(转)
- 上海支付宝终面后等了两周,没能收到offer却来了杭州淘宝的电话面试
- 在 Java 的多线程中,如何去判断给定的一个类是否是线程安全的(另外:synchronized 同步是否就一定能保证该类是线程安全的。)
- 调用淘宝订单接口想到的一个问题
- 阿里电话面试问题----100万个URL怎样找到出现频率最高的前100个?
- java synchronized同步静态方法和同步非静态方法的异同(淘宝面试问过此问题)
- JQuery ajax 如何设置同步调用(同时只能触发一个函数) 解决与层显示信息时候的冲突问题
- 2015春天阿里面试问题电话采访和视频摘要
- 阿里电话面试问题整理
- 在 Java 的多线程中,如何去判断给定的一个类是否是线程安全的(另外:synchronized 同步是否就一定能保证该类是线程安全的。)
- 如何通过一个问题,完成最成功的技术面试
- 记人生中愉快的第一次面试——阿里支付宝电话面
- 2015年春季阿里招聘电话面试和视频面试问题总结
- Android面试常见问题:如何在不发一个新版本的情况下更新App布局?
- 面试问题(如何保证分布式数据最终一致性)
- 面试题之-淘宝上是如何保证库存和订单之间的数据准确性的?
- 记阿里面试的一道nodejs中http同步处理请求问题
- 如何实现多个线程同步 (2013-11-10 12:07:24)转载▼ 标签: it 在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题,Java实现线程同步的方法很多
- Android面试常见问题:如何在不发一个新版本的情况下更新App布局?