铁路订票系统12306网站的业务和技术优化概述

一、排队

相对靠谱的

1、云风:铁路订票系统的简单设计 http://blog.codingnow.com/2012/01/ticket_queue.html

文中提出:取得ticket id进行排队,排到后获得session id去完成购票过程。排队过程中还可以定时获得排队人数等。只要排到了,购票过程就会很顺利。

点评:需考虑黄牛取得一票ticket id进行排队的情形,毕竟这个排队跟网游魔兽世界登录排队、zol下载排队并不太一致。当然,可以借鉴网游中反外挂的处理,对同一个IP发出的排队请求,每隔一定时间就弹出要求输入验证码,目的是提高黄牛DDOS的成本。

不靠谱的

1、批判下最近关于12306架构方案的“排队思路” http://www.iteye.com/topic/1119803

文中提出:(1)事先选择车次票次,等排到了,票没了,再重新开始排,用户不认可;(2)排到后再选择车次票次,用户不熟练等操作时间过长,排队等待时间长。

点评:完全可以让用户事先选择可接受的车票车次,再排队,等排到后,网站列出用户事先选择的车票车次,并显示是否有票,用户一个单击操作即可购买,这样会大大减少用户购票操作时间。

二、预约

相对靠谱的

不靠谱的

1、我认为现阶段最可行的春运售票模式:公平买票,可解决买票难、买票苦,并且可彻底断绝黄牛后路 http://blog.sina.com.cn/s/blog_6a64bd150100zp23.html

文中提出:提前预约,系统分组,根据沪深指数确定哪一组获得购票权

点评:使得暗箱操作变得容易,不应考虑此种方式。

三、订票与支付分离

相对靠谱的

不靠谱的

1、火车票网售又是无反应和扣款没买到票 http://blog.csdn.net/sz_haitao/article/details/7174037

文中提出:用户先在银行支付,并指定车次、车票,银行后台再跟12306交互,有票出票并扣款,无票退款。

点评:试想一下,如果用户先在支付宝充值,并告诉支付宝买什么,然后支付宝后台完成交易过程。这样的过程是与用户体验相悖的。这不是炒股。这种做法是把简单业务复杂化,也是银行等不愿意做的。

四、缓存

相对靠谱的

1、曹政:铁路订票网站个人的设计浅见 http://hi.baidu.com/caoz/blog/item/f4f1d7caee09b558f21fe780.html

文中提出:车次、车票等信息查询都可静态缓存。车票可以简化为有票、无票两种状态。只有状态变化的时候才更新静态缓存。使用Redis等key-value数据库。

点评:其实12306目前每隔10分钟更新数据,也是完全可以的。只要采用key-value数据库进行缓存,而不是去查sql,查询速度就会快很多很多。

五、综合

相对靠谱的

1、邓侃:建设一个靠谱的火车票网上订购系统 http://blog.sina.com.cn/s/blog_46d0a3930100yc6x.html

邓侃:建设一个靠谱的火车票网上订购系统 (续) http://blog.sina.com.cn/s/blog_46d0a3930100yiap.html

文中提出:根据业务横向切割,根据流程纵向切割。与用户交互的前端使用云计算,靠堆机器来实现蓄水池的功能。

点评:跟云风、曹政提出的不谋而合。

2、陈皓:由12306.cn谈谈网站性能技术 http://coolshell.cn/articles/6470.html

文中对系统涉及到的业务细节和技术细节进行了分析,提出抢票的业务设计的变态以致不能很好解决,各地建分站等措施。

点评:本文中除了几个技术细节方面有待商榷,比如队列一致性等,具有一定的参考意义。

3、林仕鼎:简单讨论火车票系统后面的架构设计 http://qing.weibo.com/2244218960/85c41050330009xm.html

林仕鼎:再谈谈火车票系统 http://qing.weibo.com/2244218960/85c4105033000a3v.html

林仕鼎:三谈火车票系统 http://qing.weibo.com/2244218960/85c4105033000ab2.html

林仕鼎是百度的架构师,在为海量用户提供在线服务方面拥有大量的经验,具有很强的权威性。在这三篇文档中,林仕鼎提出了在解决类似业务场景是需要遵循的原则(系统稳定,不雪崩),在技术架构上需要采取的措施(业务与锁解耦,请求调度,多线程同步模式改为事件驱动的异步模式等等)。具有极高的参考价值。

六、12306现状

1、铁路客票系统建设“复杂”?业内吐槽排队功能 http://www.nbd.com.cn/articles/2012-09-21/683750.html

文中写到:“客票系统采取了集中与分布相结合的方案,即设立一个中央数据库和若干个地区数据库,在地区数据库中存储本地区始发列车的座席数据。 ”

七、总结

12306这样的业务场景,在技术实现方面,特别是跟用户直接交互的前端在瞬间流量负载方面特别符合云计算的设计场景。目前腾讯、阿里巴巴、百度、新浪等都在建设自己的云计算中心,其实完全可以使用他们的服务,每年国庆节、春节前的售票高峰期,分别从每个互联网公司借用几百台机器做“蓄水池”负载,可以在页面上明确的提示给用户他们正在使用某某公司提供的服务器资源,既减少了为应对每年十几天的高负载而做资源投入的浪费,又给这些公司提供了为全社会做公益的机会,同时给他们做了商业上的广告,还在全世界范围内做出了云计算应用的示范和榜样。铁道部应该敞开胸怀才好。

参考文献:

[1]云风:铁路订票系统的简单设计 http://blog.codingnow.com/2012/01/ticket_queue.html

[2](不靠谱)批判下最近关于12306架构方案的“排队思路” http://www.iteye.com/topic/1119803

[3](不靠谱)我认为现阶段最可行的春运售票模式:公平买票,可解决买票难、买票苦,并且可彻底断绝黄牛后路 http://blog.sina.com.cn/s/blog_6a64bd150100zp23.html

[4](不靠谱)火车票网售又是无反应和扣款没买到票 http://blog.csdn.net/sz_haitao/article/details/7174037

[5]曹政:铁路订票网站个人的设计浅见 http://hi.baidu.com/caoz/blog/item/f4f1d7caee09b558f21fe780.html

[6]邓侃:建设一个靠谱的火车票网上订购系统 http://blog.sina.com.cn/s/blog_46d0a3930100yc6x.html

[7]邓侃:建设一个靠谱的火车票网上订购系统 (续) http://blog.sina.com.cn/s/blog_46d0a3930100yiap.html

[8]陈皓:由12306.cn谈谈网站性能技术 http://coolshell.cn/articles/6470.html

[9]林仕鼎:简单讨论火车票系统后面的架构设计 http://qing.weibo.com/2244218960/85c41050330009xm.html

[10]林仕鼎:再谈谈火车票系统 http://qing.weibo.com/2244218960/85c4105033000a3v.html

[11]林仕鼎:三谈火车票系统 http://qing.weibo.com/2244218960/85c4105033000ab2.html

[12]铁路客票系统建设“复杂”?业内吐槽排队功能 http://www.nbd.com.cn/articles/2012-09-21/683750.html

- by 一个农夫 -

转载于:https://www.cnblogs.com/afarmer/archive/2012/09/21/2697494.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值