APP下载

支持高并发处理的新型票务应用系统设计与实现

2015-02-28克,罗喧,李凌,李

电信科学 2015年10期
关键词:令牌票务线程

林 克,罗 喧,李 凌,李 豫

(1.中国电信股份有限公司广州研究院 广州510630;2.中国电信股份有限公司广东分公司 广州510180)

1 引言

随着移动互联网的发展,登录网络线上买票线下消费的O2O(online to offline,线上到线下)型电子商务已逐渐成为新的移动互联网应用热点。此类移动电子票务应用向用户提供票务相关信息查询、提前选座订票、远程在线支付和便捷取票验票等功能,同时实现运营管理的信息化、确保用户信息及票据的安全性。其覆盖面广,从旅游景点门票、影戏门票、音乐演出票、体育赛票、展览会票、博物馆票等各种入场券票,到汽车票、火车票、飞机票、船票等各类电子客票,均可衍生出相应的定制化应用服务和商务模式。比如,对于汽车票的票务应用服务,用户可通过应用的网站或手机客户端浏览查询某个车站到某地的车次信息、票价信息,根据系统提示挑选车厢中的座位形成订单,再使用银联等支付方式完成网络在线或移动支付;系统确认支付成功后,将以短信、彩信或电子订单的形式将各种形态的电子票发送给用户;用户可持电子票,以相应的验证形式在自助取票终端打印纸质车票,或直接验票乘车。

基于移动互联网的票务应用服务主要具有以下特征。

·服务渠道多样化,支持手机客户端、Web/WAP网站、语音服务和自助订票终端等服务渠道。

·提供透明的票务信息和丰富的资讯,用户可随时随需查询信息,提前选定时间排期及座位。

·可扩展地接入银联、支付宝等第三方支付能力,使用户便捷灵活地完成在线订单支付。

·支持新型电子票(短信、彩信或系统订单)的自助取票与现场验票,伪识别安全性高。

·提供强大可靠的运营管理后台,实现高效运营管理,具有管理一体化、核算严密等特点。

2 票务应用系统架构

票务应用系统,或称为票务代理系统,是基于移动互联网的票务应用服务中的核心平台,通过与票务公司的原生专业票务系统相连来完成相关的票务功能。该代理系统侧重售票代理应用,而不包括原生专业票务系统面向机构内部的内容管理、计划管理等功能。整个票务应用系统包括业务逻辑模块、核心数据库、运营管理后台、前向应用管理模块、票务票源接入服务、凭证生成与验证模块、终端管理系统、能力接入网关等部分。对外主要与专业票务系统对接,实现与票务公司的数据交换、票务订购等服务;对内则实现了丰富的应用服务渠道接入、健全的第三方能力接入以及核心的逻辑、运营及管理功能,如图1所示。

在整个票务应用服务体系中,首先必须由原始的业务公司将门票电子化,然后通常会以某种程序API将门票售卖功能开放给下游的代理商。对一个大型的在线票务代理商的票务应用系统而言,系统将连接多个原生票务系统的票源,将其中的票务信息同步到本地代理系统中,代理的票务应用系统与原生的票务系统之间存在复杂的交互。

3 系统性能瓶颈分析

关于原生专业票务系统与代理票务应用系统之间的运作流程,本文将以电影票订购业务为例来分析。

首先,在线电影票的购票代理系统必须将原生票务系统的电影院的名称、地址以及各个影厅信息同步到代理票务系统,然后增加必要的影院简介、影院推荐信息。其次,原生票务系统当前的播放电影的排期、档期等播放信息需要以较高的频率更新,例如,每个小时同步到代理票务系统,然后增加对电影的海报、影评等附加信息。在用户登录系统的时候,浏览正在热映的相关电影海报、影评等,然后点击进入购票,此时电影票的代理系统需要去原生系统获取最新的可售的座位信息,然后在本系统展示一个座位图的操作界面供用户进行选座并购买电影票。一旦用户选择订购电影票,代理系统将去原生系统将座位锁定,锁定座位后,用户在代理业务系统中完成电影票票款支付的过程。完成支付后和原生系统进行对单操作,完成对单后双方均确认了此次用户的购买行为,进行正式的出票过程。

图1 票务应用服务总体架构

通常,在代理方主动进行的营销活动中,用户的订票行为会被异常地集中在极短的时间内。例如,某些热门场次的首映式门票抢订、营销活动中的“1元订票”等。当用户的订票行为被异常地集中时,代理系统和原生系统最关键和脆弱的一步在于获取原生系统的可售座位信息。其原因在于,影院信息、影厅信息以及正在上映的影片排期及场次信息均提前同步到代理售票系统中,然而,电影排期场次的可售的座位信息随时可能被其他代理商的代理系统或者原生系统的地面订票行为所改变,需要实时地从原生系统获取。

因此,在通常的实现中,代理系统抢票的时候集中地获取可售座位图的访问量将直接传递给原生系统,由于原生系统与代理系统由不同的公司所开发,两个系统建设目标和性能指标不一定能够匹配,例如,代理系统所能承受的最大并发连接数可能会远大于原生系统,代理系统每秒能处理的请求数很可能将受限于原生系统。一旦代理售票应用系统进行大规模的营销活动,会承受越来越大的压力,每个请求都将对原生系统带来一个新的并发访问连接,将直接导致原生系统的CPU资源、网络资源、磁盘I/O资源、数据库连接资源等快速耗尽,极短时间内实时可售座位图请求造成的高并发访问的压力可能直接把原生票源系统压垮,导致原生票源系统崩溃,如图2所示。

图2 高并发状态下系统交互示意(无过载保护)

对此,本文提出一种高效可行的解决方案,实现高并发订票压力下代理票务应用系统对外部原生票务系统的过载压力保护;设计出一种新型的票务应用系统,以减少高并发压力下对外部票务系统的访问流量冲击,降低外部票务系统的访问压力。

4 系统高并发处理技术方案

4.1 整体方案概述

本文提出的系统高并发处理技术方案,实现了在高并发订票压力下对原生票务系统的过载压力保护。通过监控并发访问压力,当超过阈值时,自动启动可售座位数据的缓存机制。在电影排期的可售座位缓存数据超时失效的时候,集群里的多台服务器、多个线程竞争获取访问令牌,获取令牌成功的唯一线程作为代表去外部票务系统获取该排期最新的可售座位。本方案减少了高并发压力下对外部票务系统的访问流量冲击,降低了外部票务系统的访问压力。高并发票务应用系统实现技术方案中包含几个模块:票务应用系统、过载保护模块、在线座位图缓存、访问令牌池。其连接情况如图3所示。

图3 高并发票务应用系统技术方案示意

票务应用系统为传统的售票代理逻辑;过载保护模块为代理系统与原生票务系统中间的代理模块,监控售票代理系统与原生票务系统在过去60 s内的连接数,当超过预先设置阈值时,启动过载保护的模式;在线座位图缓存模块维护一份可供显示的座位图数据,该座位图信息是允许时间范围内的相对较新的座位图数据。座位图访问令牌池提供去原生票务系统获取座位图信息所需的访问令牌,每个座位图有一个访问令牌,在过载保护模式下,只有获得令牌的工作线程才能去访问原生票务系统获取座位图。

4.2 高并发处理机制

针对上述技术方案,本文制定了一种在线选座过程中的高并发处理机制,对代理的票务应用系统进行策略化改造,具体如图4所示。

图4中,该实施机制可以包括以下步骤。

(S402)监控各代理票务系统发往原生票务系统的连接请求。

(S404)判断设定时间内发往同一原生票务系统的连接请求次数是否超过设定阈值,如果超过设定阈值,则转步骤(S406),否则,转步骤(S408);具体地,以同一原生票务系统接收到的连接请求为准,计算该请求倒推设定时间内的发往同一原生票务系统的连接次数是否超过设定阈值。

图4 在线选座过程的高并发处理操作机制示意

(S406)拦截发往原生票务系统的连接请求,并启动过载保护模式;具体地,如果超过设定阈值,则认为现在对同一原生票务系统的访问过于密集,可能会造成原生票务系统的瘫痪,因此需要启动过载保护模式,即不能直接将连接请求透传至原生票务系统,而是根据下述情形分别进行处理。

(S408)将连接请求透传至原生票务系统。

(S410)响应于对连接请求的拦截,查询在线座位图缓存内是否存在所请求的座位图,如果存在,则转步骤(S412),否则,转步骤(S416)。

(S412)根据所请求的座位图的存活时间判断所请求的座位图是否可用,如果可用,则转步骤(S414),否则,转步骤(S416)。具体地,该存活时间是个大于零的数,具体数值可以由用户设置。如果查询到的存活时间大于零,则表明缓存内所请求的座位图可用,否则表明缓存内所请求的座位图不可用。

(S414)将在线座位图缓存内存储的所请求的座位图反馈给发起该连接请求的用户。

(S416)申请获取访问原生票务系统的令牌。

(S418)响应于对令牌的获取,从原生票务系统获取所请求的座位图,以基于所获取的座位图进行座位的选取;具体地,当多个连接请求均申请访问同一个原生票务系统内针对同一座位图的令牌时,只有一个连接能够获取到访问令牌,例如,可以根据各个连接请求访问时间的先后顺序确定能够获取访问令牌的连接请求。

在该实施案例中,在设定时间内如果访问同一个原生票务系统的连接请求数过高(如超过设定阈值),则由过载保护装置对这些连接请求进行拦截,根据在线座位图缓存内存储的所请求的座位图的存活时间或者直接获取该缓存的座位图,或者获取/等待令牌以自原生票务系统获取相应的座位图。这样既保证了用户能够及时获取最新的座位图,同时也降低了对原生票务系统的访问压力。

在步骤(S418)之后,响应于对令牌的获取,在从原生票务系统获取所请求的座位图后,将获取的座位图更新到在线座位图缓存中,设置存活时间,并启动倒计时。这样,如果在过载保护模式下且相应座位图的存活时间大于0,则其他请求同一座位图的连接请求可以直接从在线座位图缓存中获取相应的座位图。

进一步地,在步骤(S416)之后,如果连接请求未获取到访问原生票务系统的令牌,则未获取到令牌的连接请求进入休眠状态,等待在线座位图缓存内所请求的座位图的更新或等待获取令牌。此时,未获取到访问原生票务系统令牌的连接可以同时检测是否获取令牌以及在线座位图缓存内所请求的座位图是否更新,如果先获取令牌则直接到原生票务系统获取实时的座位图,如果先检测到缓存的更新,则直接到在线座位图缓存中读取所请求的座位图,这样可以显著提高在线预订座位的实时性。

在步骤(S408)中,连接请求被透传至原生票务系统,在选定座位后,将所请求的座位图更新至在线座位图缓存中。这样,如果后续连接请求被过载保护,在存活时间有效的前提下,这些连接请求可以直接到在线座位图缓存内读取所请求的座位图,既提高了预订座位的实时性,又避免了对原生票务系统造成较大的冲击。

在步骤(S406)中,过载保护模式启动,设置在线座位图缓存内被过载保护的原生票务系统的各座位图的存活时间,并启动倒计时。由于在连接请求不被拦截时,每次访问完原生票务系统都将所请求的座位图更新到在线座位图缓存内,因此,在线座位图缓存内存储被过载保护的原生票务系统的各个座位图均为最新状态的座位图,可以直接启动对相应座位图的存活时间的倒计时。

在步骤(S416)之后,对令牌进行获取,同时生成该令牌的超时时间,以便在该令牌超时时释放该令牌。

4.3 过载保护模块工作流程

该机制实施的核心点,在于过载保护模块的正常运行以及与周边相关模块或系统的协作。接下来,仍以电影票订购业务为例,通过具体实例对系统高并发处理的技术方案进行进一步说明。

正常压力状态下售票代理票务系统连往原生票务系统的连接在阈值的范围内,过载保护模块处在请求透传的状态,将从业务代理票务系统的请求直接发往目标的外部原生票源系统,此时相当于座位图缓存数据的存活时间为0。

当并发用户集中发起订票致使售票代理票务系统连往原生票务系统的连接超出了阈值范围,过载保护模块启动工作,以电影票售票代理系统为例,其流程如图5所示。

步骤1用户发起的查看座位图的请求发送给售票代理票务系统,在并发访问过程中,每个用户对应一个工作线程,每个工作线程均企图发起对原生票务系统的获取座位图的连接请求,这些连接请求被过载保护模块拦截。

图5 过载保护模块的运行流程

步骤2过载保护模块启动查询座位图缓存,座位图缓存池中如果存在该电影某影厅某个播放场次(排期)座位图,并在缓存数据的存活时间T内,直接返回缓存中的座位图。否则,转到步骤3。在此,在存活时间内的座位图可能不是最新的排期座位图,因此存在一种可能,用户看到的可选座位实际上已经卖出。然而,这是一种更优的做法。假设排期缓存存活时间为T,缓存生效减少了原生票务系统的访问压力,使之保持正常工作状态。原生票务系统繁忙拥塞,即便是每次调用均去原生票务系统,并不可能得到马上的反馈,在原生票务系统拥塞访问的时间T’很可能会大于T;代理系统仍然只能得到T’时间之前的座位图。更差的一种情况是,由于访问请求太多,原生的票务系统直接崩溃。

步骤3去排期座位图访问令牌池申请访问令牌,由于该座位图可能多个用户同时申请访问,每个用户将产生一个工作线程,同一个座位图的令牌为多台机器多个工作线程(每个连接一个线程)同时竞争,同一时间仅仅有一个工作线程能够获得座位图的访问令牌。成功生成该座位图的令牌的同时,还生成排期座位图访问令牌的超时时间,当获取令牌的工作线程不能在超时时间内完成更新排期座位图的更新操作时,该令牌将被释放。

步骤4获取令牌的唯一线程去原生票务系统获取该排期的最新可售的座位信息,每个排期仅在座位图失效时有一个线程能够获得令牌作为代表访问原生票务系统。此时外部票务系统查询座位图的最大的请求连接数将是票务系统提供的所有排期总数:例如,原生票务系统当前一共提供100个电影影厅播放场次(排期),在排期座位图缓存生效的时候,最多一个排期有一个连接去原生票务系统更新座位图数据,于是原生票务系统最多可能有100个请求连接过来更新排期座位图数据。

步骤5获取令牌的唯一线程将座位图信息更新到代理票务系统缓存之后释放(删除)令牌。

步骤6竞争不到令牌的线程进入休眠状态等待,直到数据被更新或者令牌被释放。

5 系统性能优化结果分析

针对电影票订购类业务,本文提出的新型系统经过上述优化处理,在可售座位查询请求中与外部原生票务系统间访问压力的关系如图6、图7所示。

图6 座位图超时时间与售票代理系统用户并发压力关系

图7 原生票务系统并发用户压力与售票代理系统的并发用户压力关系

并发压力在阈值以内,座位图超时时间为0,此时排期座位图的查询请求直接转发给外部票务系统。当并发用户压力达到某个阈值时,可售座位信息的超时时间自动置位为T,过载保护的机制开始生效。

每个排期仅在座位图失效时有一个线程作为代表访问外部票务系统。此时外部票务系统查询座位图的最大的请求连接数将是票务系统提供的排期总数。

在加载过载保护模块后,原生票务系统并发用户压力与售票代理系统的并发用户压力关系如图7所示,随着用户并发压力的增大,原生票务系统的访问压力也随之增大,到了过载保护生效的时候,访问压力渐渐趋近于原生票务系统提供的排期总数。

在实际的项目实施中,本文对新型系统的性能进行了全面的压力测试。从图8可以看出,经过高并发处理优化后的新型票务应用系统,在0.1 s、1 s和2.5 s这几档不同的响应时间约束中,瓶颈接口的并发性能上均得到了巨大的提升。

图8 系统性能测试结果对比

6 结束语

本文从票务应用服务的系统架构切入,以电影票订购业务为实例,全面剖析了票务应用系统及服务在业务实施过程中的性能瓶颈;并有针对性地提出了高效可行的解决方案,设计出一种支持高并发处理的新型票务应用系统,实现在高并发订票压力下对外部的原生票务系统的过载压力保护,提高了系统本身的稳定性、顽健性。目前该系统的核心技术已申请专利保护,并在电影票订购等移动互联网业务中成功实施,有效支撑了业务多次大规模的全国性营销活动,为客户带来便捷体验,为企业节约了服务器等成本投入,实现经济效益与社会效益的双赢。

1 李军锋,何明昕.高并发Web航空票务秒杀系统的设计与实现.计算机工程与设计,2013,34(3):778~782 Li J F,He M X.Design and implementation of Web-based air ticket seckill system with high-concurrency.Computer Engineering and Design,2013,34(3):778~782

2 彭海平.电子商务平台的性能优化和高可靠性研究与实现(硕士学位论文).上海:上海交通大学,2007.Peng H P.Research and design of performance tunning and high availability in E-commerce web platform(master dissertation).Shanghai:Shanghai Jiao Tong University,2007

3 王红爱,朱建生,刘文韬等.铁路客票系统中缓存机制的应用模型研究.铁路计算机应用,2013(2):30~33 Wang H A,Zhu J S,Liu W T,et al.Research on application model of cache mechanism in railway ticketing reservation system.Railway Computer Application,2013(2):30~33

4 李军.高并发Web系统的设计与优化(硕士学位论文).北京:北京交通大学,2009 Li J.Design and optimization of high-concurrency web system(master dissertation).Beijing:Beijing Jiaotong University,2009

5 崔强.电子影票系统总体设计构想.现代电影技术,2012(11):43~47 Cui Q.Overall design conception of electronic ticket system.Advanced Motion Picture Technology,2012(11):43~47

6 Shih S F,Huang A J.Electronic ticketing system and application method thereof.U.S.Patent Application,12/766386,2010

猜你喜欢

令牌票务线程
浅谈城市轨道交通车站票务运作风险管控
称金块
基于C#线程实验探究
地铁多元支付与票务安全融合发展研究
文旅部出台国内首个演出票务领域行业标准
基于国产化环境的线程池模型研究与实现
民航票务企业所需人才现状分析
基于路由和QoS令牌桶的集中式限速网关
动态令牌分配的TCSN多级令牌桶流量监管算法
浅谈linux多线程协作