下午。
罗晟依然待在蓝星科技集团,本来今天下午他要去蔚蓝海岸实验室主持一个技术会议的,不过在得知国家铁路集团前来寻求技术支持帮助,他临时修改了一下自己的工作安排,选择优先接见刘副总。
主要是年关将近,全国各地的民众尤其是外出务工的农民工都急着赶回家过年,这个群体非常不容易,罗晟觉得自己能为他们做点什么就做点什么,别的不说帮助他们宕机、打不开的现象,已经遭来一片骂声。”
说着那名技术专机也是苦笑的摇了摇头。
刘副总也说道:“阿里免费给12306提供技术支持,但是技术还是不够硬,我们现在就把希望放在星云上了。”
罗晟不由得一笑,也是耿直的说道:“刘总,首先我可以肯定的给你一个回复,星云系统完全没问题,同时我可以保证在一周之内就能实现为12306量身打造一整套从软件到硬件的完整解决方案,但这个解决方案不会像阿里一样免费支持。”
刘总哑然,也是一笑,道:“愿闻其详。”
罗晟思量了片刻,迅速组织好语言便说道:“如果星云支持12306系统以后,把12306网站查询访问放到星云上。一般而言,查询是多数售票系统访问量最大的部分,刚刚也听你们的专家说了,90左右。在交易相关的过程中,都会多次提交查询请求,更不要说现在有大量刷票软件的出现所带来的额外增加的工作负载了,这一切都让余票查询系统成为整个系统的压力集中地。”
“我的解决方案是,星云介入后,把余票查询模块和12306现有系统做分离,具备独立部署的能力;在云端上独立部署一套余票查询系统,这样12306和云上都有了一套余票查询系统,调度会更为灵活,目前星云集群服务器规模已经达到了50000台以上。”
在场的几位铁路集团的技术专家一听也是暗暗咂嘴,难怪阿里的“飞天”系统这么不禁打,前者勉勉强强破千,而后者已经达到了5万规模之巨,难怪罗晟会这么有信心。
接下来,罗晟主要与铁路集团的几名技术专家讨论。
“今天上午我在得知消息顺带简单研究了一下‘12306’的服务端架构。”罗晟面向众人有条不紊的说道:“广大访问者都在喷,但是我知道12306服务一上线试运行,就承受着这个世界上任何秒杀系统都无法超越的qps,上百万的并发再正常不过了。”
在场的几名铁路集团的技术骨干人员内心稀里哗啦的感动,理解万岁啊。
不懂技术的领导最难沟通,觉得没有尽力。
罗晟的话还是很有分量的。
过了片刻,罗晟补充道:“高并发的系统架构要采用分布式集群部署,服务上层有着层层负载均衡,并提供各种容灾手段,所谓的容灾手段就是双火机房、节点容错、服务器灾备等。保证系统的高可用,流量也会根据不同的负载能力和配置策略均衡到不同的服务器上。”
“即便如此,集群中的单机所能承受的qps也是非常高的,那么如何将单机性能优化到极致呢?要解决这个问题要先弄明白一件事:通常订票系统要处理生成订单、减扣库存、用户支付这三个基本的阶段,系统要做的事情就是保证火车票订到不超卖、不少卖、每张售卖的车票都必须支付才有效,还要保证系统承受极高的并发。”
几名铁路集团的技术专家连连点头表示认同,技术痛点就在这里。
罗晟继续说道:“下单减库存。当用户并发请求到达服务端时,首先创建订单,然后扣除库存,等待用户支付。这种顺序是我们一般人首先会想到的解决方案,这种情况下也能保证订单不会超卖,但也会产生一些问题,第一就是在极限并发的情况下,任何一个内存操作的细节都至关影响性能,尤其是像创建订单这种逻辑,基本都需要存储到磁盘数据库的,对数据库的压力是可想而知的,12306应该是用的甲骨文数据库,别花这个冤枉钱了,放到我的星云上。”
“第二是如果用户存在恶意下单的情况,只下单不支付这样库存就会变少,会少卖很多订单,虽然服务端可以限制ip和用户的购买订单数量,但这也真心不算是一个好办法。”
“然后就是支付减库存了。如果等待用户支付了订单再减库存,第一感觉就是不会少卖。但这是并发架构的大忌,因为在极限并发的情况下,用户可能会创建很多订单,当库存减为零的时候很多用户会发现抢到的订单支付不了,这也就是所谓的‘超卖’,也不能避免并发操作数据库磁盘io。”
“最后是预扣库存。从上面两种方案的考虑,可以得出结论:只要创建订单,就要频繁操作数据库io。那么有没有一种不需要直接操作数据库io的解决方案呢?答案是有,就是预扣库存,先扣除了库存,保证不超卖,然后异步生成用户订单,这样响应给用户的速度会快很多。”
“那么怎么保证不少卖呢?用户拿到了订单,不支付怎么办?订单都应该有效期,比如说用户五分钟内不支付,订单就失效,就会加入新的库存。订单的生成是异步的,应该放到即时消费队列中处理……”
刘副总听的云里雾里的,但是他发现罗晟和他带来的几个技术专家交流的愈发火热,似乎也得出了一个信息。
找对人了!
这时,罗晟打开了房间里的墙面上的大屏幕,他也拿
喜欢科技之全球垄断请大家收藏:(m.bxwx.win),笔下文学网更新速度最快。