西西河

主题:【原创】好吧,给一个铁道部订票系统的正确答案 -- 布老虎

共:💬185 🌺732 🌵9 新:
全看分页树展 · 主题 跟帖
家园 这用户体验可就很差了

下订单:请求被负载均衡到任意一台前端服务器,前端服务器知道这哥们要下订单了,二话不说把订单扔到一个message queue(叫做fund checking queue吧, 瞧,我连变量名字都替铁道部起好了),然后返回一个响应给用户,订单已经提交,请查email或短信。全部响应时间应该在毫秒级。

后端服务器先检查这哥们的钱够不够。因为这钱已经存进铁道部的系统, 这就直接在铁道部的数据库里(就叫存款数据库吧)查询就行了,用不着到工农中建的服务器上去做啥web service。钱够了,直接扣就行。简单的按身份证号sharding数据库table就行了,200个MySql serve, 每个32G内存,够全国人民用的吧?全部响应在毫秒级。

如果这哥们钱不够,把请求扔到一个message queueu(就叫insufficient funds queue吧), 然后email 短信啥的就不多说了。

如果这哥们钱够了,先扣钱,然后把请求扔到一个message queue(就叫 seat checking queue 吧),这个queue主要就是占座位了。如果座位被占了,那么就回到存款数据库里把钱退回去。如果座位还有,那么就占座,然后发送两个message, 一个message到另外一个message queue (就叫做cache update queue吧),这个queue的任务是更新第一步里面的cache(看,叔叔没有骗你吧?)。另一个message当然就是发短信确认订座了。 这一步的响应也应该在毫秒级。

您说的这个系统肯定是能实现的。但用户体验也是将是很差的。

买票作为一个流程,对乘客来说在网上买票其实和到车站售票处买票都是买票。对于乘客来说,最重要的是我交了钱就要拿到票。

到车站售票处买票,售票处不能跟顾客说,你先把钱交了,然后我短信通知你有没有票,拿不拿得到票。都是一手交钱一手交票。

同样的,网上售票也不能用这种先交钱,过一阵再出票的形式。这么搞的话,只要有一两次人家交了钱却订不到票或者要重新订票,人家就不会再信任这个系统了。

网上售票和网上售货一样,卖的归根到底也是一种货物。大型的网上售货网站在顾客下订单收钱之前就要查库存。如果库存不足就要立刻通知顾客没货了。

所以流程应当是乘客查询订票-》系统查询库存-》锁定库存-》受理客户支付-》确定客户有钱-》出票。

全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河