作者 |  阿里文娱技术专家 展恒

出品 | AI科技大本营(ID:rgznai100)

背景

麦座,是大麦旗下的票务系统。去年,我们承接了 2019 年国际篮联篮球世界杯(2019FBWC), 核心目标是完成三种套票的运营及售卖。用户可选择的套票方案为:

1. 球队套票:可以观看指定球队比赛;

2. 城市套票:可以观看指定城市比赛;

3. 单日套票:可以观看指定日期(同时也指定城市)的比赛。

要知道,2019 FBWC 有 92 场比赛,共计 100 多万的座位,两场比赛间最短时间间隔仅有10 多个小时,只有上一场比赛打完,才能确定下场比赛的对手和城市。我们的技术难点是,面对套票本身对阵关系及场次的不确定性,如何在百万座位中,快速为套票用户匹配座位。以下是我们的技术解法和总结,希望对大家有借鉴。

套票解法

1. 套票问题抽象

我们按照目标场次是否存在,把三种套票分为两类:

1)球队套票定金、城市套票、单日套票。特点在于目标场次一定存在,但是对阵关系和座 位图不确定,可以抽象为无座场次下单模型,即在不确定具体场次和座位情况下通过售卖数字 库存,为用户锁定某种资格(入场、后续购票等等);

2)球队套票后续阶段。特点在于目标场次不一定存在,败者球队不一定有后续比赛。但是 随着赛程推进,一轮打完必然知道下一轮的对手以及比赛城市,此时只有已经交了球队套票定金的观众可以继续以较便宜的价格购买球队套票下一阶段的门票。 针对球队套票赛程阶段,我们需要提供的是锁定资格后不断购买指定球队后续比赛场次门票的能力,即给客户“配单”。

而无论何种套票,用户最终还是要进场观赛,需要要在验票入场前告知用户实际座位,因此我们提供将无座订单转化为有座订单的能力,即给客户“配座”。为了解决配单、配座问题,麦座设计了两个工具:1)配单工具:球队套票,每个阶段之间通过工具,生成下一阶段待支付订单,延续用户购买套票资格;2)配座工具:具体比赛场次出来后通过工具,将无座套票映射到有座场次,给用户机选座 位,最终实现用户座位分配。

2. 解法一:配单

配单功能适用于球队套票的分阶段售卖,世界杯的球队套票分为六个阶段。

图 1   赛程抽象

第一阶段为定金支付,支付定金后,获得后续球队套票购买资格,后续共分为 5 个阶段, 每个阶段对应小组赛到决赛的实际场次。配单工具要解决的核心问题在于:

1)利用当前阶段的订单信息生成下一阶段待支付订单,同时通知用户支付;

2)保持套票订单之间的关联关系,方便报表统计。

图 2   配单模型

如图所示,配单时基本上是按照原始订单的订单结构信息,复制出目标订单的结构信息, 订单结构保持不变,同时所有后续阶段的订单都与最原始的定金订单建立关联关系,后续通过 定金场次订单可以统计出套票生命周期的所有订单,方便报表统计。球队套票每个阶段都生成 一个待支付的无座订单,并提醒用户及时支付。

图 3   处理流程

配单处理流程如图所示,由于处理时间较长,为了更好的用户体验和性能,需要在订单开 始处理后及时返回用户“处理中”的状态,后台采取异步处理。通过消息中间件将处理任务分 发到到集群处理节点,另一方面由于底层下单接口 TPS 承载有限,需要每个处理节点(应用实 例)控制处理速率,做好限流,图中是通过线程池控制处理速率。

图 4   process 分解

单个 process 的内容如图所示,其中橙色框中的步骤标识有数据库写操作,需要做事务处理。扣减库存、订单保存、订单权限保存基本上是复用的麦座下单 process 中的的 step。

3. 解法二:配座

配座工具适用于所有套票映射最终有座场次的场景。从用户体验上讲,配座与配单不同, 配单工具生成的订单需要用户支付,因此必然让用户感知到新订单的生成,而配座工具生成的 订单实际上不需要用户支付,而且由于配座的场次非常多,会出现一个原订单生成最多十个目 标订单的场景,因此如果让用户感知到其实是不合理的(考虑一个用户某天打开订单列表,可能看见若干莫名其妙的订单),所以订单结构上配座与配单也不尽相同。

图 5   配座模型

配单工具通过关联关系记录套票生命周期,而配座工具通过父子关系,更偏向于传统的购 物车订单,即父订单收钱,子订单无需再次收钱。套票无座订单记为父订单,实际的有座场次 与套票订单建立父子关系。另外由于配座时不需要用户支付,因此子订单都记为零元订单,以 免后续报表和对账结算金额无法抹平。

球队套票每个阶段、城市套票、单日套票最终要映射到有座场次,座位的选择是通过机选 实现,配座流程与配单流程大部分是可以复用的,不同之处在于配座需要为用户机选座位,因 此需要插入机选步骤,如图 6 所示。同样,图中的橙色框标识有数据库写操作,需要做事务处理。

图 6   process 分解

配座是麦座与大麦票务中台融合的一次实践,也是大麦多年以来票务能力的资源整合。未 来大麦票务中台的机选能力可以开放给更多的业务方使用。

4. 如何做的更加通用?

设计之初,我们考虑到了业务的通用性,虽然不同票务系统的差异,不太可能通过一套实 现满足麦座、世界杯、票务云的需求,但是玩法是可以借鉴的,通过一套接口流程,可以将套 票玩法沉淀下来,后续其他票务系统有类似的玩法需求,仅需要实现接口就可以方便快速的克 隆套票玩法,因此我们将接口定义抽取了独立的业务插件(jar  包)。另一方面,使用插件而不 是独立应用,是因为配单和配座不可避免的要做权限校验,jar 包可以复用接入系统的权限体系, 这样工具只做核心的玩法部分,可以更聚焦。

图 7

效果以及未来展望

2019FBWC 总共 92 场比赛,共计进行了 5 轮配单配座,通过后续的业务数据检查,所有座位配置正确,无一错漏,配单配座工具将运营同学原本一周甚至更久的工作在十几分钟内搞定,达到了产品要求的准确、高效,效果得到业务方的认可。

大规模的配单配座在体育赛事中可能成为行业常态,事实上 2019 FBWC 的玩法也同时得到了亚运会、冬奥会等赛事的关注,配单配座工具采用的技术并不是阿里特有,同时由于我们采 用插件设计,也在一定程度上实现了可复用,方便的推广到其他票务平台。

【end】

欢迎所有开发者扫描下方二维码填写《开发者与AI大调研》,只需2分钟,便可收获价值299元的「AI开发者万人大会」在线直播门票!

推荐阅读全球呼吸机告急!医疗科技巨头美敦力“开源”设计图和源代码中国无人机“老炮儿”回忆录
互联网之父确诊新冠,一代传奇:任谷歌副总裁、NASA 访问科学家微软为一人收购一公司?破解索尼程序、写黑客小说,看他彪悍的程序人生!在Kubernetes上部署一个简单的、类PaaS的平台,原来这么容易!2020年,这20个大家都认识的加密交易所过得怎么样?你点的每个“在看”,我都认真当成了AI

世界顶级赛事百万座位如何做到票务限时匹配?相关推荐

  1. 集思广益,有个几百万关键字的数组的文本匹配的算法

    关键字 都是放在一个数组中的,譬如$keyword_arr=["key1","key2","example",......],大约有几百万甚 ...

  2. 如何打造园本特色_立足城市特色 打造赛事品牌——年轻成马如何走向国际化...

    新华社成都11月1日电 题:立足城市特色 打造赛事品牌--年轻成马如何走向国际化 新华社记者李博闻 李华梁 在全民健身席卷大江南北的今天,在中国一年有超过1500场马拉松赛事.国家体育总局田径运动管理 ...

  3. 大型体育赛事交通信息系统建设框架

    " 写在前面: 通过分析大型体育赛事交通信息系统的特征需求,明确系统的人.车.路三大基本要素,分析五类系统用户的功能需求.结合三种建设模式,设计赛事交通综合监控指挥.车辆调度及管理.设施管理 ...

  4. P2071 座位安排

    P2071 座位安排 题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛,每排座位只能坐两人,且每个人都 ...

  5. php餐厅预定座位系统,一种餐厅座位智能化预订系统的制作方法

    本发明涉及座位智能预订系统技术领域,尤其涉及一种餐厅座位智能化预订系统. 背景技术: 现有的餐厅座位预订系统,大多采用用户与餐厅工作人员间建立联系并进行人工预订的方式,上述方式需要餐厅配备足够的工作人 ...

  6. 一年节省费用100万,AI导航误差不到1米,杭州奥体“大小莲花”智慧场馆大揭秘...

    来源: https://www.thehour.cn/news/512203.html 近日,杭州奥体中心主体育场和网球中心(大小莲花)智慧化改造第一期工程结束,"大小莲花"数智管 ...

  7. BSC Web3生态深度研究

    一.总览 截止2022年5月12日,BSC上共有项目 1365个,其中包括 DeFi 项目 782个,NFT项目392个,GameFi 299个,各类工具 167个,钱包 44个,验证器 5个,平台市 ...

  8. 国之骄傲,清华IT大牛带领一群年青程序员叫板美国!

    前言: 在中国,有一所大学,是无数学子们梦寐以求的学术殿堂,叫清华: 在清华,有一个实验班,是全国高考状元们挤破了头都想进的计算机课堂,叫姚班: 在姚班,有一个世界级的IT大牛,被称为"无法 ...

  9. 优酷发布2018世界杯战略 阿里云将提供全程技术保障

    6月10日,优酷2018世界杯战略发布会在北京举行,知名导演姜文和人气明星鹿晗现身发布会,二人都将加盟本次优酷世界杯的相关节目及推广,一起为优酷世界杯打call.阿里文娱集团轮值总裁兼大优酷总裁.阿里 ...

最新文章

  1. vs2017开发Node.js控制台程序
  2. R语言nchar函数统计字符串中字符个数实战
  3. mysql查询有数据但返回null_mybaits sql查询有数据 映射时返回结果却是null 为什么呢求指导...
  4. 【C语言】一堆数组中存放了10个小于100的整数,请编程对所有数据按照从小到大的顺序进行排序,若个位数相等,则按照十位从小到大的顺序排序,输出排序后的结果...
  5. PHP版本不同可以导入导出吗,请教高人:两个php平台之间的数据导入导出
  6. 美英澳联合发布2020-2021期间遭利用最多的 Top 30漏洞
  7. 使用Git将本地文件夹同步至github
  8. css3文档手册chm_你还在使用CHM帮助文档吗?赶快试试Baklib吧
  9. 绝地求生要java吗_绝地求生卡盟_【Java】几种典型的内存溢出案例,都在这儿了!...
  10. X.U.S.T的《自己搭建IIS找ASP程序漏洞》发表在《黑客X档案》,稿费捐给希望工程
  11. 展讯SC9820E驱动配置之camera配置
  12. VeraCrypt磁盘加密软件
  13. java摄像头_Java实现 海康摄像头抓拍图像
  14. Tesseract OCR图片提取中文并转换为Excel的示例(附Python代码)
  15. Android Studio中模拟器如何输入中文、将模拟器语言设置为中文
  16. 杜国光博士,基于视觉的机器人抓取--物体定位,位姿估计到抓取估计课堂笔记
  17. 这个帖子记录一下java代码转换成易语言代码的坑[持续更新]
  18. Excel电子表格隔行自动填充底色
  19. 将mp4文件转换为flv
  20. acw_sc__v2算法的两种方式

热门文章

  1. Android重绘ListView高度
  2. ruby实时查看日志
  3. Firebug Console 与命令行全集
  4. (转)修改ETM,用Ogre实现《天龙八部》地形与部分场景详解(附源码)
  5. System Center Data Protection Manager 2007补助说明
  6. two years in cnblogs.com
  7. Eclipse link方式安装反编译插件
  8. B样条曲线 及 B样条曲面
  9. UML与软件建模 第三次作业
  10. 虚拟机cenos 重置密码