Categories
程式開發

世界頂級賽事的票務支撐:百萬座位與限時匹配


一、背景

麥座,是大麥旗下的票務系統。去年,我們承接了 2019 年國際籃聯籃球世界杯(2019FBWC),核心目標是完成三種套票的運營及售賣。用戶可選擇的套票方案為:

  1. 球隊套票:可以觀看指定球隊比賽;

  2. 城市套票:可以觀看指定城市比賽;

  3. 單日套票:可以觀看指定日期(同時也指定城市)的比賽。

要知道,2019FBWC 有 92 場比賽,共計 100 多萬的座位,兩場比賽間最短時間間隔僅有 10 多個小時,只有上一場比賽打完,才能確定下場比賽的對手和城市。我們的技術難點是,面對套票本身對陣關係及場次的不確定性,如何在百萬座位中,快速為套票用戶匹配座位。以下是我們的技術解法和總結,希望對大家有借鑒。

二、套票解法

1. 套票問題抽象

我們按照目標場次是否存在,把三種套票分為兩類:

1)球隊套票定金、城市套票、單日套票。特點在於目標場次一定存在,但是對陣關係和座位圖不確定,可以抽象為無座場次下單模型,即在不確定具體場次和座位情況下通過售賣數字庫存,為用戶鎖定某種資格(入場、後續購票等等);

2)球隊套票後續階段。特點在於目標場次不一定存在,敗者球隊不一定有後續比賽。但是隨著賽程推進,一輪打完必然知道下一輪的對手以及比賽城市,此時只有已經交了球隊套票定金的觀眾可以繼續以較便宜的價格購買球隊套票下一階段的門票。

針對球隊套票賽程階段,我們需要提供的是鎖定資格後不斷購買指定球隊後續比賽場次門票的能力,即給客戶“配單”。而無論何種套票,用戶最終還是要進場觀賽,需要要在驗票入場前告知用戶實際座位,因此我們提供將無座訂單轉化為有座訂單的能力,即給客戶“配座”。

為了解決配單、配座問題,麥座設計了兩個工具:

1)配單工具:球隊套票,每個階段之間通過工具,生成下一階段待支付訂單,延續用戶購買套票資格;

2)配座工具:具體比賽場次出來後通過工具,將無座套票映射到有座場次,給用戶機選座位,最終實現用戶座位分配。

2. 解法一:配單

配單功能適用於球隊套票的分階段售賣,世界杯的球隊套票分為六個階段。

世界頂級賽事的票務支撐:百萬座位與限時匹配 1

圖 1 賽程抽象

第一階段為定金支付,支付定金後,獲得後續球隊套票購買資格,後續共分為 5 個階段,每個階段對應小組賽到決賽的實際場次。配單工具要解決的核心問題在於:

1)利用當前階段的訂單信息生成下一階段待支付訂單,同時通知用戶支付;

2)保持套票訂單之間的關聯關係,方便報表統計。

世界頂級賽事的票務支撐:百萬座位與限時匹配 2

圖 2 配單模型

如圖所示,配單時基本上是按照原始訂單的訂單結構信息,複製出目標訂單的結構信息,訂單結構保持不變,同時所有後續階段的訂單都與最原始的定金訂單建立關聯關係,後續通過定金場次訂單可以統計出套票生命週期的所有訂單,方便報表統計。球隊套票每個階段都生成一個待支付的無座訂單,並提醒用戶及時支付。

世界頂級賽事的票務支撐:百萬座位與限時匹配 3

圖 3 處理流程

配單處理流程如圖所示,由於處理時間較長,為了更好的用戶體驗和性能,需要在訂單開始處理後及時返回用戶“處理中”的狀態,後台採取異步處理。通過消息中間件將處理任務分發到到集群處理節點,另一方面由於底層下單接口TPS 承載有限,需要每個處理節點(應用實例)控制處理速率,做好限流,圖中是通過線程池控制處理速率。

世界頂級賽事的票務支撐:百萬座位與限時匹配 4

圖 4 process 分解

單個 process 的內容如圖所示,其中橙色框中的步驟標識有數據庫寫操作,需要做事務處理。扣減庫存、訂單保存、訂單權限保存基本上是複用的麥座下單 process 中的的 step。

3. 解法二:配座

配座工具適用於所有套票映射最終有座場次的場景。從用戶體驗上講,配座與配單不同,配單工俱生成的訂單需要用戶支付,因此必然讓用戶感知到新訂單的生成,而配座工俱生成的訂單實際上不需要用戶支付,而且由於配座的場次非常多,會出現一個原訂單生成最多十個目標訂單的場景,因此如果讓用戶感知到其實是不合理的(考慮一個用戶某天打開訂單列表,可能看見若干莫名其妙的訂單),所以訂單結構上配座與配單也不盡相同。

世界頂級賽事的票務支撐:百萬座位與限時匹配 5

圖 5 配座模型

配單工具通過關聯關係記錄套票生命週期,而配座工具通過父子關係,更偏向於傳統的購物車訂單,即父訂單收錢,子訂單無需再次收錢。套票無座訂單記為父訂單,實際的有座場次與套票訂單建立父子關係。另外由於配座時不需要用戶支付,因此子訂單都記為零元訂單,以免後續報表和對賬結算金額無法抹平。

球隊套票每個階段、城市套票、單日套票最終要映射到有座場次,座位的選擇是通過機選實現,配座流程與配單流程大部分是可以復用的,不同之處在於配座需要為用戶機選座位,因此需要插入機選步驟,如圖6 所示。同樣,圖中的橙色框標識有數據庫寫操作,需要做事務處理。

世界頂級賽事的票務支撐:百萬座位與限時匹配 6

圖 6 process 分解

配座是麥座與大麥票務中台融合的一次實踐,也是大麥多年以來票務能力的資源整合。未來大麥票務中台的機選能力可以開放給更多的業務方使用。

5. 如何做的更加通用?

設計之初,我們考慮到了業務的通用性,雖然不同票務系統的差異,不太可能通過一套實現滿足麥座、世界杯、票務雲的需求,但是玩法是可以藉鑑的,通過一套接口流程,可以將套票玩法沉澱下來,後續其他票務系統有類似的玩法需求,僅需要實現接口就可以方便快速的克隆套票玩法,因此我們將接口定義抽取了獨立的業務插件(jar 包)。另一方面,使用插件而不是獨立應用,是因為配單和配座不可避免的要做權限校驗,jar 包可以復用接入系統的權限體系,這樣工具只做核心的玩法部分,可以更聚焦。

世界頂級賽事的票務支撐:百萬座位與限時匹配 7

圖 7

三、效果以及未來展望

2019FBWC 總共92 場比賽,共計進行了5 輪配單配座,通過後續的業務數據檢查,所有座位配置正確,無一錯漏,配單配座工具將運營同學原本一周甚至更久的工作在十幾分鐘內搞定,達到了產品要求的準確、高效,效果得到業務方的認可。

大規模的配單配座在體育賽事中可能成為行業常態,事實上2019FBWC 的玩法也同時得到了亞運會、冬奧會等賽事的關注,配單配座工具採用的技術並不是阿里特有,同時由於我們採用插件設計,也在一定程度上實現了可複用,方便的推廣到其他票務平台。

作者介紹

阿里文娛技術專家 展恆

相關閱讀

電影垂直行業的雲智開放平台如何煉成?

阿里工程師帶你了解 B 端垂類營銷中心如何設計?

雲智前端技術如何賦能場館院線?

60 秒售出 5 萬張票!電影節搶票技術揭秘

電影行業提升 DCP 傳輸效率,還能這樣做!

超大型場館的繪座選座解決方案

大型賽事穩定性保障:Dpath 為世界軍人運動會護航