`
sslaowan
  • 浏览: 380506 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[纯技术讨论]从12306谈海量事务高速处理系统

 
阅读更多

     JE上好多讨论这个主题的帖子,但是水(v)的人远远多于技术讨论的。最近一直在跟同事和网友讨论如何构建一个这样的电子商务网站。
     首先有几个问题先说一下:
     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,这样验证是否此人已经订过该票一步搞定,然后异步统计余票。某台机器的票没有了,这台机器就被移除(类似于负载均衡原理,票没了就相当于机器挂了,目前常用的技术是心跳,还是异步统计)

 

 

    还需考虑的问题是:一个座位分段卖出问题。各个铁路局分布式提供车票的问题。

分享到:
评论

相关推荐

    12306技术讨论 (附PPT下载)

    12306是中国铁路官方的在线购票平台,其背后的技术涉及到分布式系统、高并发处理、大数据分析等多个方面。在这样的讨论中,我们可能涉及以下几个关键知识点: 1. **分布式系统**:12306作为全国性的大型在线服务...

    My12306购票系统

    在My12306系统中,Servlet可能被用来处理用户登录验证、查询车票、购票等操作,与JSP协同工作,实现前后端的交互。 HTML5是现代网页的标准,其强大的新特性如离线存储、多媒体支持和表单控件改进,为My12306系统...

    《今天你买到票了吗?——从铁道部12306.cn网站漫谈电子商务网站的“海量事务高速处理”系统》

    整篇文章论述的就是“海量事务高速处理”的经验和误区。第一部分论述“海量事务高速处理”现阶段没有通用解决方案,尝试通用解决方案就是误区。第二部分讲解算法问题、安全问题经验,以及一些误区。第三部分讲解电

    12306_火车票订票系统项目

    总之,12306火车票订票系统项目是一个复杂而全面的工程,涉及的技术层面广泛,从系统架构设计到具体的技术实现,再到后期的运维和优化,每一个环节都体现了IT行业的专业性和严谨性。对于开发者来说,理解和学习这个...

    12306火车票系统

    12306系统在高峰期需要处理大量用户的并发请求,因此可能采用多线程或多进程技术,或者利用异步IO模型来提高处理效率。此外,队列和锁机制的合理使用,可以避免数据竞争,保证数据的一致性。 【模型图】标签可能指...

    模拟12306铁路购票系统

    《构建模拟12306铁路购票系统的Java技术解析》 在信息技术日益发达的今天,模拟12306铁路购票系统是一项具有挑战性的实践项目,它涉及到多种核心技术的运用,如用户登录注册、购票流程、信息安全管理以及支付功能等...

    12306自动订票系统

    总的来说,12306自动订票系统结合了网络编程、数据处理、自动化控制等多种技术,旨在为用户提供便捷高效的购票服务。不过,由于铁路部门对自动购票的限制和反制措施,这类系统可能需要持续更新以适应变化。同时,...

    12306余票查询系统C#

    在深入探讨系统的技术细节之前,让我们先了解一下12306网站及其接口的重要性。12306是中国铁路官方售票平台,为旅客提供购票、退票、改签等服务。由于其庞大的用户基数和实时性需求,12306的余票查询系统需要具备...

    12306用户管理系统

    本文将深入探讨12306用户管理系统的架构设计、主要功能模块、核心技术以及Java在其中发挥的作用。 1. **系统架构设计** - 分层架构:12306用户管理系统通常采用三层架构,包括表现层(UI)、业务逻辑层(BLL)和...

    12306模拟订票系统-升级版

    《12306模拟订票系统-升级版》是一个专为模拟12306中国铁路官方购票流程而设计的软件系统。该系统旨在提供一个便捷、高效的平台,让用户能够在不访问12306官网的情况下进行火车票查询、预订和购买操作,尤其在高峰期...

    12306互联网售票系统的架构优化及演进.ppt

    12306互联网售票系统的第一代架构采用了双机热备模式,具有缓存服务、用户管理、车票查询、订单及电子客票处理等多个相对独立的业务分区,以及三级网络安全域,分别是外网、内网和客票网。数据库的维度包括用户管理...

    12306余票查询系统

    【12306余票查询系统】是一个基于C#编程语言开发的应用程序,主要用于查询中国铁路12306官网的火车票剩余情况。这个系统对于那些需要频繁查询火车票信息或者想要深入学习C#编程和网络数据抓取技术的人来说,是一个...

    12306自动火车订票系统

    《12306自动火车订票系统:深入解析与应用》 12306自动火车订票系统,作为一款高效便捷的购票工具,深受广大旅客的喜爱。它旨在帮助用户自动化地完成火车票的查询、预定和购买过程,极大地减轻了在节假日等高峰期...

    12306的数据库设计.pdf

    综上所述,12306系统的数据库设计需要综合考虑高并发数据处理、并发控制、路径规划和大数据分析等多方面的需求,不仅对数据库系统的性能提出了挑战,也对IT团队在高并发场景下设计和优化数据库的能力提出了考验。...

    仿12306汽车售票系统

    仿12306汽车售票系统是一个模仿中国铁路12306官方购票平台的项目,旨在实现汽车票的在线预订、查询、支付等功能。这个系统可能包括前端用户界面、后端服务器处理逻辑以及配套的数据库设计。由于描述中提到"一些小的...

    12306数据库系统设计报告.docx

    12306数据库系统设计报告主要探讨了中国铁路客户服务中心12306网上车票订票系统的构建,旨在提供便捷、快速且完善的在线订票服务。该系统设计涉及了用户需求分析、功能模块划分、数据库设计以及关键流程制定。 在...

    c++命令模式实现12306购票系统

    在实际的12306系统中,可能还会涉及到多线程、并发控制、事务处理、异常处理等复杂问题,但命令模式为解决这些问题提供了一个良好的基础架构。通过阅读博客《C++命令模式实现12306购票系统》...

Global site tag (gtag.js) - Google Analytics