首先有几个问题先说一下:
1 今年春节期间铁路客流量据说有31亿
2 目前12306 pv是14亿,而高峰期就在8点到10点,那么也就是有可能在这两个小时里有5亿访问量,而每秒的并发量估计在最高峰时能达到几千万
3 目前Ngix能处理在线1万,但是实际值一般是8000左右
4 一台IBM大型机要几千万美元,估计加上DB2,交易中间件,得小1亿了
5 腾讯,淘宝等拥有总在线人数4亿规模或者事务处理达到亿级别的规模耗时七八年,总投资估计上百亿 (腾讯资料:1亿在线背后的技术挑战)
6 绝对不能两个人订到同一张票,而看到有票,而点击了下订单又说没票了这种失误是可以容忍的。
假设一个车次能坐1000人,有10万个人想订这车次的这个时间的票,那么意味着这10万人要被分别负载到10台机器上,这10台机器要共同去维护这1000张票的余量。简单的分库分表大家都会,但是可能是有成千上万台机器来处理这些用户,而且这些用户还可以订全国的火车票。
我想到了一些机制来处理,或者说先简化再处理问题:
总原则:不需要所有的人
1 职责分离,将登录,订票(查询,填表,下定单),支付,查订单,查车票等都分成不同的服务,采用不同的集群去处理。
2 登录系统,只要有足够的服务器,大家都可以登录进来,这个十分简单
3 订票,总原则是 让能够进入订票流程的人,快速无障碍的进入系统,设定15分钟为一个阀值,15分钟内成功下订单,则将其踢出订票系统,用户可以拿着订单号通过电话或者登录支付系统进行支付(Apple的网上商店即这样),超过15分钟没搞定的也被踢出,提示操作超时。点击订票之后,进入前置分析机,分析机负责计算背后的机器能负载多少用户下订单。比如目前有1百万人同时点击了订票,而背后只能负载10万人,那么出现一个随机摇号程序,摇出10万人,其他人返回 “系统繁忙,稍后重试”的提示。这10万人被负载在10台机器上,可以进行查询,当点击指定车票(标记为ClickSelectedTicket)后,根据车票被分散到不同的机器上(其实是MapReduce的思想)。比如有1万人被定位到要订票T1,系统扔出900张T1票,留100张容错(随着系统逐步稳定,可减少容错票数),然后大家抢锁,采用乐观离线锁。在最终提交订单时检测
4 可以采用地铁高峰限流的方式(其实Apple购买iphone时也类似),就是增加到达ClickSelectedTicket之后的页面的路径,可以多绕几圈,最终减少并发可能性。
5 采用token机制保障页面必须从第一步点击订票开始进入,不可以绕过中间步骤。以免刷票机器人对系统造成冲击(当然还要做IP限定)
6 将票分到几台服务器上,将购买到该车次该时间车票则将身份证+车次+座位+时间作为key,这样验证是否此人已经订过该票一步搞定,然后异步统计余票。某台机器的票没有了,这台机器就被移除(类似于负载均衡原理,票没了就相当于机器挂了,目前常用的技术是心跳,还是异步统计)
还需考虑的问题是:一个座位分段卖出问题。各个铁路局分布式提供车票的问题。
http://www.linuxso.com/architecture/17006.html
分享到:
相关推荐
整篇文章论述的就是“海量事务高速处理”的经验和误区。第一部分论述“海量事务高速处理”现阶段没有通用解决方案,尝试通用解决方案就是误区。第二部分讲解算法问题、安全问题经验,以及一些误区。第三部分讲解电
在My12306系统中,Servlet可能被用来处理用户登录验证、查询车票、购票等操作,与JSP协同工作,实现前后端的交互。 HTML5是现代网页的标准,其强大的新特性如离线存储、多媒体支持和表单控件改进,为My12306系统...
首先,从软件工程的角度看,12306火车票系统是一个大型的Web应用项目,其开发过程中需要遵循严谨的软件生命周期管理。这包括需求分析、系统设计、编码、测试和维护等阶段。在需求分析阶段,开发团队会明确系统功能,...
12306系统需要处理海量的并发请求,因此性能优化至关重要。这包括但不限于:代码优化、数据库查询优化、缓存策略、CDN内容分发网络等手段,以降低响应时间,提升用户体验。 九、测试与运维 系统上线前需进行全面的...
仿12306铁路售票管理系统是一个典型的在线票务系统,旨在模拟中国铁路客户服务中心12306网站的功能,为用户提供查询、预订、购买、退票和改签等服务。此类系统通常涵盖多个关键模块,包括用户管理、车次管理、座位...
6. **异常处理**:在与12306接口交互时,可能会遇到网络错误、数据解析错误等情况,因此系统需要包含充分的异常处理机制,确保在出现问题时能够优雅地处理,而不是崩溃。 在压缩包中的"name.csv"文件可能是用于存储...
《构建模拟12306铁路购票系统的Java技术解析》 在信息技术日益发达的今天,模拟12306铁路购票系统是一项具有挑战性的实践项目,它涉及到多种核心技术的运用,如用户登录注册、购票流程、信息安全管理以及支付功能等...
12306互联网售票系统的第一代架构采用了双机热备模式,具有缓存服务、用户管理、车票查询、订单及电子客票处理等多个相对独立的业务分区,以及三级网络安全域,分别是外网、内网和客票网。数据库的维度包括用户管理...
6. **异常处理与重试机制**:考虑到网络波动或12306服务器的负载,系统需要具备良好的异常处理机制,遇到失败的情况能自动重试,确保购票流程的稳定性。 7. **用户输入交互**:系统需要接收用户的购票参数,如出发...
《12306用户管理系统:深度解析与实践》 12306用户管理系统,作为铁路旅客服务的重要组成部分,其设计与实现涉及到许多IT领域的关键知识点。本系统基于Java编程语言,充分体现了Java在企业级应用开发中的优势。本文...
《12306模拟订票系统-升级版》是一个专为模拟12306中国铁路官方购票流程而设计的软件系统。该系统旨在提供一个便捷、高效的平台,让用户能够在不访问12306官网的情况下进行火车票查询、预订和购买操作,尤其在高峰期...
【12306余票查询系统】是一个基于C#编程语言开发的应用程序,主要用于查询中国铁路12306官网的火车票剩余情况。这个系统对于那些需要频繁查询火车票信息或者想要深入学习C#编程和网络数据抓取技术的人来说,是一个...
《12306自动火车订票系统:深入解析与应用》 12306自动火车订票系统,作为一款高效便捷的购票工具,深受广大旅客的喜爱。它旨在帮助用户自动化地完成火车票的查询、预定和购买过程,极大地减轻了在节假日等高峰期...
在实际的12306系统中,可能还会涉及到多线程、并发控制、事务处理、异常处理等复杂问题,但命令模式为解决这些问题提供了一个良好的基础架构。通过阅读博客《C++命令模式实现12306购票系统》...
12306数据库系统设计报告主要探讨了中国铁路客户服务中心12306网上车票订票系统的构建,旨在提供便捷、快速且完善的在线订票服务。该系统设计涉及了用户需求分析、功能模块划分、数据库设计以及关键流程制定。 在...
仿12306汽车售票系统是一个模仿中国铁路12306官方购票平台的项目,旨在实现汽车票的在线预订、查询、支付等功能。这个系统可能包括前端用户界面、后端服务器处理逻辑以及配套的数据库设计。由于描述中提到"一些小的...