当前位置: 首页 > 科技观察

1分钟发5万张票!阿里影展抢票技术揭晓

时间:2023-03-22 10:30:42 科技观察

阿里妹攻略:对于电影爱好者来说,每一次影展活动都是一场抢票大战的开始。发票速度几乎可以用“二次元空间”来形容,比如上海国际电影节的线上销售记录是一分钟售出5万张。今天,阿里巴巴高级开发工程师念弦主要围绕门票销售流程,讲述了阿里文娱的云智能系统如何支撑高流量并发,保证系统稳定性,防止倒卖。一、背景介绍首先简单分析一下电影节的抢票业务。典型特征是在高流量抢购、高并发的场景下,用户可以快速锁定座位,然后出票,尤其是热门电影,会异常火爆。.第一个压力是查询售出席位和锁座列表,需要能够快速支持用户的锁座请求,实时查询售出席位列表,避免无效的锁座请求;第二个压力是出票,如果锁座成功,但是出票一直失败,会给用户带来非常不好的体验。二、架构设计思路的方向1、在分层设计中让业务取胜,分为渠道接入层、业务层和服务层。业务层,对外业务和管理后台功能独立,职责明确,快速支撑业务;服务层积累基础服务,形成稳定的业务和基础服务。图2:业务技术大图2.在架构设计上使系统稳定,接入统一网关使系统安全,限流,数据与库存中心和订单中心隔离,增加多级缓存解决方案,使系统稳定。图3:技术架构图三、实现方案及技术分析1、如何抵御高并发流量?电影节的流量是一个非常典型的秒杀场景,瞬时流量很高。系统的高性能要求注定是高的。在云智中,我们如何抵御高并发流量?我们通过以下三点来解释:热点数据隔离、流量调峰漏斗、多级缓存。1)热点数据隔离在热点隔离方面,云知选择的策略包括:数据隔离和业务隔离。数据隔离:将售出席位、锁定席位等库存相关热点数据进行隔离,分离业务数据库,采用分库分表的方式,降低系统性能压力,提高吞吐量。业务隔离:电影节的业务数据,独立的业务数据生成能力,圈定参与活动的业务数据,进行缓存预热,达到隔离的效果。2)流量削峰漏斗的关键词是“分层削峰”,以漏斗的方式减少请求流量。在业务链接过程中,我们会进行业务验证和层层过滤,例如用户账号安全、购买资质、影院、影厅等基础信息状态是否正常,待购买商品信息状态是否正常是否正常,秒杀是否结束等,每一层都尽量过滤掉非法请求,最后只处理真正有效的请求。最后,减少请求对数据库DB的写操作流程,保证系统处理真正有效的请求。以locksocket流程为例:图4:流量调峰漏斗示例图3)多级缓存在分层漏斗的前提下,云智采用分布式缓存和本地缓存LocalCache多级缓存方案来抵抗高并发traffic,下面简单介绍一下系统中使用的策略:a)Cachewarming。指定参与活动时间后,限时停止变更。售前自动预热缓存,避免流量暴增冲破缓存;b)缓存失效时间控制,VO对象和DO对象采用失效时间缓存控制,静态数据和DO实体采用长失效策略:不失效或24H;动态数据和实体Info使用比较短的失效策略:分钟级别,比如幂等KEY缓存时间为2分钟;c)LocalCache使用的缓存时长策略有3种:2s、60s、122s。先读取本地缓存,再读取远程分布式缓存,这样系统就可以抵抗瞬时高并发流量。示例图如下:图5:多级缓存示例图将缓存分为两层:第一层是本地缓存结构:用户、权限、基本信息等静态数据。我们更喜欢本地缓存;第二层是全量缓存实体信息的DO和VO信息,这一层使用Tair分布式缓存。2、如何保证系统的稳定性和高可用?对于任何赛程或赛事,系统的稳定性都是第一要素。对于电影节的活动场景,我们使用了很多设计稳定性模式,其中最核心的有:多轮全链路压测、限流、降级、动态扩容、流量调度、单点缩减、以及简化依赖关系;除了以上几点,我们还会重点谈谈我们在电影节期间是如何支持和准备的?1)保障准备体系图6:保障准备体系示意图a)战前阶段工作较多。只有提前充分准备,才能有更好的支持效果,主要包括以下部分:(1)梳理薄弱环节,包括系统架构、系统薄弱环节、核心主流程等,识别后制定对策;(2)全链路压测,对系统进行全链路压测,发现系统能够承载的最大QPS;(3)限流配置,为系统配置一个满足业务需求的安全限流阈值;(4)应急预案,收集各领域可能存在的风险点,制定应急预案;(5)安全保障,主要围绕账户权限的管控,以最小充分原则为基础,杜绝滥用权限,安全无小事;(6)战前演练,通过演练验证保障体系是否完备,演练现场计费,提高队伍反应处置能力;(7)作战手册,制定作战手册,明确关键节点的作战流程和任务以及沟通机制。第九届北京国际电影节保证现场b)销售是在战中阶段展开的,我们也叫战中。整个项目组主要关注三件事,即“监控”、“响应”和“记录”。项目组同学要保持战斗状态,严格遵循应用负责人机制,负责巡视应用状态,发现异常及时同步技术数据和业务数据。同时,在对战中临时成立“保障虚拟团队”,处理促销期间可能出现的紧急客诉等问题,及时决策,控制影响范围,同时时间提高综合作战能力。记录就是要记录每个应用在战斗过程中的峰值,及时积累技术数据,为后续的系统建设和流量评估提供参考。c)战后阶段,该阶段的主要工作是项目回顾,主要包括:项目成果、项目回顾、项目沉淀和完善、项目过程中收集的问题和失败的详细分析,以及过程中积累的经验项目和系统稳定性保障在日常生活中积累,让活动保障常态化逐步落地。2)优秀实践a)精准监控通过监控,可以实时发现各个服务是否触发了限流值,及时进行复核,调整限流值,保证业务成功率和系统稳定性.精准监控系统的负载、内存、PV、UV、错误量等系统基本的占勤和业务量指标,避免内存泄露或代码bug对系统的影响,精准监控,及早发现问题内存泄漏等问题。b)数据仪表盘通过数据仪表盘,实时采集和展示业务数据,可以为系统和业务提供更直观的业务支撑,以及更有效的业务准备。第22届上海国际电影节保障现场3、如何保证不倒卖?在经营过程中,我们实现了很多业务,解决了很多困难。我们将重点解决以下两个痛点,一是恶意锁,一是防止超卖。1)如何解决恶意锁座?首先,我们采用的存货扣减方式是扣留存货。当用户锁定座位时,库存被锁定。怎么解决恶意锁座呢?a)锁仓订单“到期时间”会产生一个“库存”,超过这个时间,锁仓订单将到期并释放库存;b)限制用户购票人数,1人最多只能购票6张;c)接入黄牛防控系统;2)如何防止库存超卖?电影票不同于电子商务业务中的普通标准产品。不允许超卖,否则会出现重票,导致客诉和舆论问题。所以在库存数据一致性方面,需要保证没有高并发的情况。对于heavytickets,我们的解决方案是:a)使用分布式缓存,预先减少分布式缓存中的库存,减少数据库访问;b)使用数据库的唯一键,将锁表中的sessionId和seatId设置为唯一键。锁定席位时,如果该席位已经售出,会报数据库异常,不允许某个席位重复售出。4.总结回顾电影节抢票,我们首先想到的是能够抗高并发流量,让系统稳定。通过以上章节,我们揭开了高性能和高可用背后的技术,并展示了一个典型的抢票技术方案。核心技术包括:让业务赢=完整的业务应用+支撑核心业务高性能高可用=流量调峰+限流降级+多级缓存平台成熟度=完善的监控+保障方案在这个过程中,我们遵循以系统稳定、业务致胜的设计思路,不断思考和落实这些技术细节,沉淀核心技术,实现用户顺畅的抢票过程。