异步交易系统及应用实践
——由火车票网上订票系统堵塞所给出的解决方案
编者按:本文为作者于2012年为铁路订票而构思的交易策略,曾发表于多个网站(现仅个人博文
保存),事过多年电子商务网站大都转为异步交易系统,甚感欣慰,特此收藏个人图书馆为纪念。
近几年的国庆、中秋节、春节的都是在堵塞中渡过的,先是火车票网上订票堵塞,然后是全国高速公路堵车,再之后就是各景点和景点售票处拥堵,不言而喻,堵塞已经成为中国特色。造成这一特色的根本原因就是:中国人多,各类活动相对过于集中,在无良好调度机制和管理策略的前提下,有限资源难以满足人们在特定空间和特定时间内的集中使用或消费。为此,针对火车票网上订票系统堵塞这一中国难题,我们给出了抗堵塞能力强、系统架构更为简捷坚固的解决方案:异步交易系统及算法、数据结构。
一、有限的网络和数据库资源不能适应中国式集中消费模式
中国式消费带有强烈的集中消费特点——这是中国几千年形成的文化特色,难以改变,只能适应并优化。但是网络和数据库资源是有限的,当铁道部唯一指定购票网站遭遇日点击量达十亿次的峰值时,12306网站结局是瘫痪。
有数据显示,在平常情况下:12306网站的日均PV(页面浏览量,或称点击量)为1694万,仅为京东商城3500万日均PV的1/2,为淘宝5.25亿日均PV的1/30。但在春节期间:12306网站的日访问峰值已超过10亿,增长接近1000%。这种陡然迅猛增长的用户使得12306网站其架构难以承压,更有甚者,在某些时段12306网站每秒都会有上千万的PV访问增长(这个特点与其他电商类网站有很大的不同),网络自然就会出现堵塞。
尽管铁道部已花巨资多次优化订票系统,但是效果不明显,“堵”还样的“堵”。 现以2012年春节客运数据来深入分析一下堵塞的原因,据铁道部称春运期间共发售车票8962万张,其中通过互联网售出997万张,占总售票量11.1%,通过电话订票售出1089万张,占总售票量12.2%。从理论上讲,这个发售量虽然很大,仍不足以使订票系统瘫痪,但是12306网站却瘫痪了。
造成这一严重问题的原因就是:同步交易系统要求客户与服务器之间保持严格的同步(主要是身份验证和验证成功后的“会话”保持),在交易量和网络系统接近峰值时,因交易的实时性变差,客户与服务器之间的同步协调能力变坏,交易系统失稳,交易迅速成功率下降,这又进一步导致客户情绪变得异常焦躁不安而频繁刷新网页(这是人性因素所导致的恶性正反馈),频繁刷新网页更致交易系统效率急剧下降,从而出现堵塞和瘫痪。
据铁道部称,高峰期日售票量可达700万张,完成一笔同步交易约需10-20次页面请求(异步交易仅需2-10次),那么每日共需7000万-1.4亿次页面请求(客户在浏览器中的数据提交和数据传输)。据统计,2012年春运期间通过互联网售出997万张,高峰日最多售出150万张,却导致峰值10亿次页面请求,这说明同步交易时因堵塞会产生80-90%的无效页面请求。按此推论,如果铁道部在现有架构上要完成700万张票的发售量,又不改变系统架构,还需增加6倍以上资金投入(增加硬件和带宽),以保证系统的同步性,防止堵塞。
这说明传统的同步交易系统已经不能适应大规模、集中度极高、突发性强的中国式集中消费模式,所以:类似12306网站业务的交易系统,需要变同步交易为异步交易才可能避免堵塞,从而提高交易业务的实时性和工作效率。
二、异步交易的优点是:实时性好、抗堵塞能力强,适合低延时、高数据突发等应用
(一)同步交易系统,虽然易于实现但是容易堵塞
1、两个定义
在讨论同步交易系统和异步交易系统优缺点前,我们先来说明两个定义:
同步交易系统,是指交易双方先建立时间同步(即双方的交易步调需同步协调),再相互验证身份,在会话建立之后才进行协商交易的交易系统。同步交易系统需要建立精确的同步机制和身份验证,一旦同步机制破坏、身份验证失败,系统即不能正常运行。
异步交易系统,是指交易双方不进行时间同步,每个交易数据内含交易双方验证信息、时间标记,交易双方随时准备好发送和接收交易数据的交易系统。
2、同步交易与异步交易的优缺点
同步交易系统的优点是:同步交易系统易于搭建,应用成熟,在硬件水平和交易容量允许的情况下,交易效率高、交易速度快。缺点是:系统成本高,需要较高的硬件水平和软件策略,如系统失控,交易效率极速下降,容易堵塞、瘫痪。适用于业务复杂、网络访问量较平均的电子商务网站。
异步交易系统的优点是:异步交易系统架构简单、易实现,硬件成本低,系统实时性好、抗堵塞能力强,适合低延时、高数据突发等应用。缺点是:较之同步交易系统,增加无效交易数据,系统效率较低。适用于业务单纯、低延时、高数据突发等应用的电子商务网站,异步交易的单笔业务金额应作限制、不宜过大。
(二)两个交易系统可以的比喻为:
同步交易:客户和服务器必须同时在场,客户和服务器需要即时沟通(为了校验信息,需要在线式一问一答),服务器只能在一单生意做完后,下一单生意才能开始(多个交易是需要通过并发连接实现,当然这就要求增加更多的服务器和网络设备投入)。
异步交易:多个客户和服务器先做热身运动和准备,当有客户提出交易时,客户就填上并提交单子(含:客户信息、交易信息、时间标记、验证标记),服务器只管收单,如单子无误、有效,交易就进行,多个客户、多个单子可按交易级别、时间先后等预设条件批量进行。这样做服务器负荷小,不需要一对一操作,不占用过多系统资源,因而综合效率优于同步交易系统。
这就好比(不一定很恰当的比喻),同步交易:零售店的营业员通常是既是导购员又是收银员,如店面来一个客户,就只能等到这个客户完成交易后,才能进行下一个客户的交易,整个交易过程中营业员和客户之间需要不间断的同步沟通;异步交易:大型超市则采取导购员、收银员分工,少量导购员指导大量客户先选商品,完毕后送收银员收费,整个交易过程处在流水线上,无需同步,按部就班、有序进行,只要少量导购员、收银员就可完成大量客户的购物需求。
(三)异步传输(ATM)优于同步传输是一个很好例子
事实上,通信领域中异步传输(ATM)优于同步传输是一个很好的例子。在通信领域,人们为提高传输的实时性和减小堵塞,常采用异步传输技术(ATM),目前大部分骨网络骨干线路都是采用异步传输技术(ATM)的。ATM的传输速度可从25兆比特每秒到155兆比特每秒,能够很好的适应网络信息传输。
三、传统同步交易网站大量使用“会话(Session)”,必然导致Web服务器压力过大、资源紧张
由于Session(即会话)是用于保持状态的基于Web服务器的有效方法,所以网站设计者通常在传统同步交易网站大量使用Session,将客户登录信息或客户浏览Web应用程序时需要的其它信息对象存储Web服务器的内存中。这个方法本身很有效的办法,但是随着越来越多客户登录,Session所需要的服务器内存量也会不断增加(当然还有其它资源,如“带宽”等)。
所以,当某些时段12306网站每秒达到上千万的PV访问增长时,就有导致大量客户同时在线,大量的客户信息和交易信息就会在整个交易过程中以Session形式在服务器上存放,如客户顺利完成交易,Session可以被释放,资源又可再次利用。
但是,极端条件下,随着交易量的增加,当客户无法即时完成交易,客户的在线时间就会进一下加大,那么Session保存的时间就会增长(若交易保持30分钟,Session就可能保存30分钟以上),为就进一步加剧了资源的消耗,12306网站服务器的内存和其它资源很快就被消耗完,系统必然堵塞、瘫痪。这就是同步交易系统在极端情况下综合效率低下和可靠性差的直接原因(当然网络故障也是可能的情况)。
解决之道:当然是采用异步交易模式,避免Session(即会话)长时间且大量在服务器上存放,从而大幅提高服务器的使用效率,进而提高交易的综合效率和可靠性。异步交易模式下,客户不必预先注册账号和验证登录,交易信息由客户下单时一并提供(交易单子含:客户信息、交易信息、时间标记、验证标记),每次提交交易数据都基本不使用Session,即使使用Session也是时间极短,且使用完毕可立即释放Session,即:一次数据提交,一次申请使用,用后即还(提交失败也即还回),时间极短。
四、异步交易的数据结构和算法
(一)数据结构
针对票务网站,建议采用以下数据结构。
1、提交表单。二维表,包含:客户信息、交易信息、时间标记、验证标记。提交后1小时内有效,否则重新申请。
大类
字段明细
字段说明
长度
客户信息
联系人姓名(必填)
取票人信息
性别
身份证号等(必填)
手机号(必填)
QQ号
实时性好,含邮箱号
电子邮箱号
这个备用
开户银行(必填)
客户预先提供
卡号(账号)(必填)
客户预先提供,无需密码(保密)。在交易中间,由客户直接网络或电话联系银行。
交易信息
车次(含起点、终点)
系统预设,客户选定
时间
系统预设,客户选定
姓名(多个)
列举
特殊标识
系统预设,客户选定,如儿童票等
数量
限5张
ID或订单号(号)
自动生成,提交前隐藏
时间标记
时间标记
自动生成,提交前隐藏
验证标记
验证标记
自动生成,也可由客户提供,从简,不得为空。客户认真记录,以备查询和交易。
2、查询表单
大类
字段明细
字段说明
长度
客户信息
联系人姓名
身份证号等
验证标记
验证标记
3、确认信息表单
大类
字段明细
说明
客户信息
联系人姓名
性别
身份证号等
手机号
QQ号
电子邮箱号
开户银行
卡号(账号)
交易信息
车次
时间
姓名(多个)
特殊标识
数量
ID或订单号(号)
客户务必认真记录
时间标记
时间标记
验证标记
验证标记
确认标记
确认标记
同意付费,取消订单
4、付费转存表单(向银行或电商批量交易)
大类
字段明细
说明
客户信息
联系人姓名
性别
身份证号等
手机号
QQ号
电子邮箱号
开户银行
卡号(账号)
ID或订单号(号)
时间标记
时间标记
验证标记
验证标记
确认标记
确认标记
同意付费,取消订单
付费标记
付费标记
同意付费,取消订单
5、付费确认表单(银行或电商与客户交易)
大类
字段明细
说明
客户信息
联系人姓名
性别
身份证号等
手机号
QQ号
电子邮箱号
开户银行
卡号(账号)
ID或订单号(号)
时间标记
时间标记
验证标记
验证标记
确认标记
确认标记
同意付费,取消订单
付费标记
付费标记
同意付费,取消订单
(二)算法和交易流程
详细流程如下(最少仅需2-5次页面请求和服务连接):
1、登录网站或使用客户端工具,打开交易网页。票务主页应从简,最好像百度和谷歌那样精简,才能提高传输效率和实时性。客户不需要预先注册。(注:第1次页面请求,如果交易网页已经以预先下载到本地,且车次和起点站、终点站、乘车时间等均已知晓,本步可省)
2、客户填写查询车次和时间。成功后信息可直接传递给下一步。(注:第2次页面请求,如果交易网页已经以预先下载到本地,本次不产生页面请求)
3、客户填写交易单子,并提交数据。交易数据包含:客户信息、交易信息、时间标记、验证标记。提交后1小时内有效(系统可预设优化),否则重新申请。(注:第3次页面请求)
4、web服务器汇集交易数据,并存放在数据库中。
5、客户查询交易情况,如交易数据无误,点击同意付费。(注:第4次页面请求)
6、应用服务器整理数据后(大部分过程都可以通过SQL数据库的数据集批量完成操作),向银行或中商电商传送付费表。
7、银行或中商电商与客户确认付费,成功后发送成功标识信息到客户计算机或手机等,并将结果传送回交易网站。(注:第5次页面请求)
8、客户按取票流程取票或凭有效证件直接登车。
(三)客户是否预先注册和验证登录是个关键性问题
同步交易网站往往要求客户预先注册和验证登录,这是同步交易的用户验证基础。不过,大量的用户验证和“会话保持”要消耗大量服务器资源,并且会话保持期间不得出现严重的网络连接超时,否则整个交易中止、又得从头开始,所以同步交易网站容易堵塞、瘫痪(除非硬件和软件水平超强)。
异步交易的客户验证是通过交易数据即时提供(每个发送的信息都加上了“同步”信息——客户信息字段和ID或订单号),同样能够保证安全性,且效率极高。为保证多次交易数据中可能出现冲突或冒名使用,因此使用系统自动自成的订单号、时间标记以及用客户提供的验证标记,能够帮助有效客户顺利购票。
异步交易过程中,交易是以“流”形式进行的(这一点好像是流媒体与常规视频媒体的区别),交易过程是在优化分解后分步实施的,客户机与服务器之间每次连接的时间较短,每条发送信息的数据块较小,网站基本不使用Session或都仅少量和快速使用Session,因此网站的内存、资源利用率高,很难堵塞,即便发生堵塞也不会影响到交易队列中具有较高优先权或申请在前的客户列表,也就是说,异步交易有很强的抗堵塞和修复堵塞的能力。
(四)异步交易过程应防止人为性攻击
异步交易系统主要应防止“机器人自动程序”和人工频繁提交交易申请和查询交易结果,因此这些人为性攻击既会产生大量无效页面请求和冗余数据,还容易占用有限的网络带宽,甚至有恶意人员还会窃取客户保密信息。针对这种攻击,系统应限制客户端在单位时间内的交易申请数量和申请间隔,并对客户的交易数量和交易金额作必要限制。
(五)应用
建议的异步交易模式火车订票系统架构。
1、客户类别
因异步交易系统的客户信息是随异步交易数据即时提交、即时验证,因此按照交易权限可分为:
(1)普通客户:一代身份证客户、二代身份证客户、护照、军人证、手机实名认证用户等,这类客户有法定证件,不需要预先注册可直接填写订票信息后购买车票,信息验证主要由后台联机验证(铁道、公安、银行等之间数据库自动验证)。
(2)无证客户:部分无证军人、儿童或未办证人员,这类人员需提前持有效证明或其它材料,预先注册为无证客户,无证客户信息存放在专用服务器上联机备查。特殊条件下,所有客户都可视为匿名客户,仅需提供手机号(或QQ号、电子邮箱号)和银行卡号,就可验证并交易。
(3)大客户:因特殊需要经批准具有特殊权限的客户,如学校、党政军等客户,这类也需要提前持有效证明或其它材料,预先注册为大客户,大客户信息也存放在专用服务器上联机备查。
(4)铁路系统内部客户:铁路售票系统中内部用户,如车站售票员等,这类用户拥有较高权限,由铁路系统自行指定和验证,验证信息也存放在专用服务器上联机备查。
2、业务需求分析
以日发售700万张火车票为例(铁道部提出单日发售量的极限值,其中2012年春运期间,大约40天中互联网共售出997万张,互联网单日发售量最高不超过200万张)。每笔异步交易需要平均10个页面请求(最低值为2-5个),每个页面30KB,每日传输数据量就为2,100,000MB(2.1TB=700万*10*0.03MB),考虑到无效页面请求和其它事项查询应用,日传输数据量可放大到3倍,即6.1TB。故,最小网络带宽=2,100,000MB/24/60/60*8=194Mbps光纤。这个计算办法已经包含冗余因素,但未包含突发访问量所需带宽,因此建议网络带宽为1G-10G光纤(应该已经小于目前12306网站的带宽了)。
3、服务器及网络设备
火车订票系统是开放式的互联网站,包括:WEB服务器机群、数据库服务器机群、磁盘阵列、核心路由器组、核心交换机组、防火墙(安全设备)及备份服务器、安全服务器、专门业务应用服务器、测试服务器等。其中WEB服务器机群还可细分为:异步交易服务器机群、12306网站综合业务服务器机群。
4、同步交易系统修改为异步交易系统是容易实现的
本质上,同步交易系统要比异步交易系统复杂,异步交易系统是对同步交易系统的简化,所以业务单纯的电子商务网站均可修改为异步交易系统。在相同硬件和通用软件(操作系统、数据库、WEB等)配制,异步交易系统可承受更多的交易量和抗堵塞。因此,12306网站有必要即时更改架构,避免新一轮客运高峰期的网络堵塞。
六、实践
由于同步交易系统极易堵塞,所以除火车订票系统外,突发访问量大的网站(如:人事考试网站、汽车购票网站、学生报名网站等)也容易受中国特色影响而堵塞、瘫痪。类似的事件太多了,如近几年来国家人事部(人社部)、各省人事考试网站在公务员报名时,就发生过大规模的堵塞事件。针对这些情况,我们建议的解决办法也是尽快改变架构采用异步交易系统。
笔者曾在某市人事考试部门工作(从事考务、网络设计和维护),为解决某市的人事考试报名问题也经历了从同步交易到异步交易的演进历程。
最先,某市人事考试网站也使用的是同步交易系统(服务器和网络配置极低,都不好意思说了),考生需预先注册才能报名。由于人事考试报名的第1天和最后1天是考生重点关注节点,因此大量考生登录网站,并建立长时间的连接,显然低配置的服务器和网络是无法负荷的,随着Session数量的不断增加,网络就越来越拥挤,越是拥挤用户就会出现掉线情况,用户愈加反复登录报名页面,网络随即堵塞、瘫痪。但是,网站越是堵塞,考生越会加剧紧张气氛,网站长时间无法工作。
为解决还个问题,我们把网站从同步交易模式修改到异步交易下,通过修改报名页面,尽量避免使用Session或减小Session工作时间。考生也不必再预先注册用户,而是直接提交用户信息、考试信息、时间标记、验证标记实现网络报名(其余大部分过程如前所述)。
通过人事考试网站从同步交易到异步交易的演进实践,我们得出结论:中国式集中消费特色只能用异步交易系统来解决,异步交易系统是成熟、高效、可靠、抗堵塞的电子商务交易系统。
七、展望未来
关于异步交易模式的研究和应用正在起步,许多网站已经在不知不觉中应用了异步交易模式。比如,大型网站的电子邮箱和微博系统往往使用cookie长时间保存用户的用户ID(对方服务器内存中不会长时间保存用户ID,仅在用户提交异步数据后才作是否存取的处理),当用户提交数据时,用户ID就随着异步交易数据到达服务器,待服务器接收和处理数据后又将服务器的处理结果反馈回本地网页中,这就是一个高效且不易堵塞的异步交易过程(当然电子商务活动是不建议使用cookie保存用户ID的,除非有更好的安全措施,否则所有个人信息都应当加密并即时使用、限时注销)。
将来:业务单纯、实时要求高、突发访问量大的电子商业网站应优先使用异步交易模式(如:火车订票系统、汽车购票网站、人事考试网站、学生报名网站、社保应用网站、民政救助网站等);部分大型电子商务网站将采取同步交易和异步交易相结合的交易模式,异步交易模式主要在热门商品、促销、抢购等突发访问量大、易堵塞的环境下使用,因为网站管理者和持有者没有必要因短时间的大量交易花费太多资金而升级同步交易网站的软硬件水平,来保证系统的同步性、稳定性、可靠性。