五千年(敝帚自珍)

主题:谈谈大型网站架构的一些关键技术 -- 季侯

共:💬43 🌺225
分页树展主题 · 全看首页 上页
/ 3
下页 末页
              • 家园 长事务用异步

                最初帖想说的sharding可解决问题,但不是直截了当的做法。帖子没说清楚。

                如果付款处理时间长,则用异步处理。 把定位,付款分开。 定位是real-time。付款做batch。付款如失败再用另一batch update把位子变回available.

      • 家园 我也来提一个建议

        邓兄好久不见,进来可好?

        邓兄的思路当然很技术,很专业。作为一个伪IT人士,我也来提一个伪技术的解决思路。

        我的解决思路是要结合支付宝或类似的第三方支付平台来做。我是这样考虑的。

        一、需求分析

        1、对于着急买票回家的人,最关心的是能否卖到某日某趟车的车票(或某天的某个时段的车票),对于余票什么的是因为不得已才需要查询,如果能不查询就卖到,谁会关心什么余票。

        2、对于铁路买票尤其是春运,提前数天,甚至数十天的计划出行是主流。

        基于以上两点考虑,我设计一个“全额预付价款、时间优先的预订单处理系统”

        二、设计方案

        1、允许用户在发售日之前的相当长一段时间(比如20日)内,在网站查询车次,并填写一个完整的订单(包括了身份证号、预定座位类型,铺位类型、以及铺位优选顺序如先选下铺,再选中铺,几人连号等)。然后用户对这个完整的订单按照最多可能价额,全额预付票价。

        2、完成了全额预付费用的订单,进入一个FIFO队列,在车票发售的时候,由后台系统直接处理这个队列就可以了,有剩余的车票再进入传统的销售渠道。

        3、用户可以在发票前的任何时候取消订单,票款退回。

        4、订单的数量以全车的座位数为限,超出后无法预订,避免超额预订。这个预定较为宽松,因为:

        a:可以参考航空座位预售,允许少量超售

        b:很多人的需求是允许调整的,比如,没有下铺可以接受上铺,没有9点的车次,可以接受10点的车次,因此是一个较为宽泛的范围。不需要在订单处理的时候,做严格的锁定控制。

        c:为了避免预订失败的情况,可以考虑设定比例,比如80%的车票被预订以后,就不再接受新的订单。

        因此也避免了数据库的瓶颈。

        三、小结

        一句话总结:要买票,你把详细订单说明和现金都准备好,一个个排好队,到发票时间点我铁老大按订单的先后顺序依次处理,不提前排队的只能自己碰运气了。

        这个方案的核心是,所有的车次查询、订单填写、支付等工作,都是分散在发售日之前的数天甚至数十天之内,在时间轴上进行了平滑。另外,所有的预订都是和数据库弱相关的,不需要锁定数据库(因为预订的时候并不实际处理订单,只是保证订单总座位数不超过车次座位数,实际上如果允许多车次预订,那么实际上限制是一个很宽松的数字)。并且也不存在短时间大量队列处理的问题,预订可以在发售前的任何时间进行。

        实际的订单处理可以是一个后台程序,在发售时间以时间优先方式处理完所有的全额预付订单以后再按照传统流程把剩余的票额上网发售。相信这个后台程序不会有什么难度和瓶颈,实际上做成单线程的都可以。

        这个方式我认为符合大部分中国人的出行需求,并且对黄牛也很有杀伤力。因为黄牛不可能有大量的资金在20日之前全额票款预定车票,但是自己买票出行的就可以。黄牛也不可能长时间的DDOS阻塞网站,因为阻塞其实也是没有意义的,只有全额预付的订单才会进入(可能的)处理队列。

        关键词(Tags): #火车票 预定方案
        • 家园 提一个个人的设想

          12306可以像游戏机厅一样有自己的资金账户系统,用户必须先充值,再用账户里的钱买票。用不完的随时退回卡或者支付宝里。这样系统不用等外部的支付系统,支付流程很快就能完成。用户不需要手忙脚乱的抢着45分钟内给钱,也不会出现付了钱不出票。而且这个设计也能防黄牛,起码黄牛要给出大量的资金,还要建立许多账户,不然某个账户有大量资金必然会引起怀疑。

          从目前的情况来看,12306做的很仓促,设想也太单纯了。最起码的给支付流程准备专用服务器和带宽都没有。而且它那个放票设计,纯粹鼓励人去疯狂刷票的。很多简单地设计就能避免问题。比如分目的地地区错时放票。

        • 家园 花一个,但不可行

          1.黄牛是有大量资金的,因为他把票转手出去后就能回收,占用资金只有短短不到一个月而已。实名制倒确实为一个很好的预防方式。

          2.按你的思路,是可以方便那些较早时间即可提前确定自己行程的人,但对于那些行程确定较晚的人,就直接排除掉了,而由于中国的国情,不可能太早确定行程的人要占绝大多数。你的办法相当于是“只为少数人服务”,估计从政治上不好交差。

          3.即使第2条的内容不计。那你总要留一些票用于“预留预订”后的售票,这时,更多的人来抢剩下的这些票,同样未能解决问题(未预订的后来者不知你还有多少票没卖出)。

          4.关于支付的问题,你提的预存金额这个办法,我觉得还是有意义,但这就要搞个类似于支付宝的玩意出来。并在买票前,系统先行估算金额后,要求客户超量预存,未用完部分可以在指定地点退现金。但是,搞不好这样一样,麻烦有可能更大。

        • 家园 退票无风险的话, 第一挤满的都是黄牛。

          黄牛借钱的通道肯定比普通定票人多。假设黄牛预期50%的利润,那他提前20天用一月一成利来借钱。黄牛只要负担10%的利息风险。只要能卖出手上的五分之一的票,剩下的就是无风险纯利。有黄牛用这个投资分析找你借钱, 你会放弃一个月10%的收益?

      • 家园 邓兄,好久不见,欢迎。
    • 家园 送花,坐等~~~
    • 家园 你要小心了

      小心罗教主取尔首级于千里之外!

      敢说罗教主的坏话

      罗教主那是什么人?

      民科!!!

      • 家园 如果可能的话,顺便分析一下前段时间HP贱卖小本本时

        具体细节我记不清楚了。大致是HP突然终结基于 WebOS 的TOUCHPAD,以超低价$99一个清仓,网上抢购,导致好几个网店网站崩溃,印象中HP自己的网站也崩溃了。在此次抢购中,唯一几个幸存的,大概就是 Amazon 一家了。

        类似的例子,是前些时候,在 target 网站(类似walmart的大型零售商)上推出 Sofia Vergara 的品牌时,也遭到抢购,也导致网站崩溃。

        Target 崩溃还好理解,人家毕竟主业是搞零售的。HP的崩溃就比较难以理解,因为它号称是想做另外一个IBM,提供服务的。而且以它当时的情形,被抢购的就那么几个东西,远不如铁路售票来得复杂。

分页树展主题 · 全看首页 上页
/ 3
下页 末页


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

Copyright © cchere 西西河