订票系统 #
不同业务的订票系统存在很大差异。
电影院/场馆选座系统 #
业务需求:
- 可以同时购买一张票或多张票。
- 用户可以自动选座也可以手动选座。
- 购物多张票的用户应优先推荐连座。
- 系统应尽量减少同一个座位被多人同时选中的可能。
- 只有一个用户购买成功会降低其他人的用户体验,而其他人甚至可能因此丢失买到票的机会。
实现方式:
- 用户选择场次、票价和数量。
- 购票系统根据待售票和生成规则返回最佳座位表。生成规则如下:
- 根据票价获得所有可选区域,以每排最中间位置为中心,计算座位的距离列表。
- 从每个区域的距离列表中选择最短距离,合并为最佳座位表。
- 如果是多人票,则连座票优先级大于距离。
- 如果用户选择自动选座,直接锁定座位,生成订单。
- 否则,返回最佳座位表,由用户手动选择。
座位锁定方案:
基于队列实现公平性。购票系统尝试锁定座位前向客户端返回一个token,同时该token也写入队列。后台消费队列,锁座位。客户端通过token发起轮询查询购票是否完成。