东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

从新旧技术体系替换,看大麦网票务技术体系重塑演进之路

  • 2020-12-09
  • 本文字数:4797 字

    阅读完需:约 16 分钟

从新旧技术体系替换,看大麦网票务技术体系重塑演进之路

作为大麦网技术架构以及相关票务中台建设负责人,阿里巴巴高级技术专家王冬(花名:赛特)在大麦网并入阿里 3-4 个月左右转到大麦网,经历了大麦网从旧技术体系迁移到新技术体系的全过程,也见证了大麦网在并入阿里这几年的技术发展过程中,业务所处领域、技术工程架构、团队组织形式的各种变化和挑战。近日 InfoQ 记者采访了王冬,听他详解大麦网新技术体系如何快速重构落地以替换旧技术体系、票务系统技术架构演进呈现的发展趋势,以及大麦网并入阿里之后在组织结构上、文化融合上、技术架构变化上面临的挑战。王冬将在 2021 年 1 月 8-9 日北京召开的QCon全球软件开发大会“业务架构演进“专题上带来大麦网票务技术体系重塑演进之路的精彩分享。


技术体系复用就像一枚硬币的两面

在 2017 年并入阿里之前,大麦网已有 13 年的发展历史,被誉为中国第一娱乐营销平台。而早在正式收购前的 2014 年,阿里就以 D 轮投资人身份持有大麦网 32.44% 股份。对于大麦网并入阿里后新旧技术体系的替换,应该说是有备而来的,但是提及那段经历,王冬还是颇有感触。“我是在大麦网并入阿里大概 3-4 个月左右转到这边的,整体经历了大麦网从旧技术体系迁移到新技术体系的全过程。同时,作为新技术架构的推动者,在其中也有很多不一样的经历,积累了很多新的经验。在这其中感触最深的是迁移大麦网的老票务系统。”


大麦网票务系统是它得以在市场站稳脚跟的基石,已经有十几年的历史,可以想象其中会有多少的业务逻辑和经验沉淀。不过在王冬看来,这个系统可以基本认为是个单体应用,虽然内部有一些模块化的拆分,但从整体部署上来说,仍没有达到比较好的服务化拆分要求。由于没有相应的服务化拆分,系统的可维护性不好,系统的可伸缩性较差,且相关的库存查询和扣减操作是最大的性能瓶颈。


“其实这个系统在十几年前应该是个比较先进的系统,但是在系统服务化已经变成常态的今天,为什么这个系统还类似于单体应用?我想这是需要大家认真思考的一个问题。”在王冬看来,一个系统除了业务需求不断迭代外,还要随之进行技术迭代和演化,只有这样系统才可能跟得上技术发展的节奏,系统才不至于随着时间慢慢恶化。


经过旧有系统向新系统的迁移,大麦网当前的商品和交易底层全部基于阿里的共享电商平台。阿里的共享电商平台主要包括用户、商品、营销、交易、支付等全链路的交易能力,也经历过高流量、高并发的真实场景检验,同时其也支持了各种不同业务的多种场景,因此在王冬看来,复用它来支撑大麦网的电商交易体系是比较适合的选择。“从短期投入来看,既要了解共享电商平台的模型,又要将大麦网的业务进行匹配映射,这块在初期确实会付出不少的人力代价。但从长远来看,除了稳定性和性能的保障外,也包括后续和淘系商品的一些联动,这个选择会为未来带来很大的想象空间。”


不过王冬也承认,集团技术体系的复用是有两面性的。一方面可以借助已有体系来快速研发迭代,另一方面已有的体系也会限制大麦网在某些方案选择上只能取次优解。“这就是现实中的技术权衡,体现了架构决策的重要性,也体现了对业务和技术全局理解的重要性。”具体做法上,对于那些经常变化的、行业性比较强的业务诉求,大麦网倾向于以自建体系来承接;在变化可能性较小的地方,可能会复用集团技术体系。


娱乐票务从集中往分散发展

易观智库发布的《中国现场娱乐在线票务平台年度分析报告》显示,中国现场娱乐票务平台主要经历了三大发展阶段:2010 年以前,主要为传统专业票务代理公司及主办 PC 端网站;进入 2010 年后,在互联网 + 和市场用户需求的发展与增长的驱动下,传统票务代理开始向互联网 + 转型,以大麦、永乐票务为代表;2015 年之后,伴随现场娱乐票务市场发展,更具创新和灵活性的新兴互联网票务交易服务平台快速发展。


在王冬看来,当前现场娱乐票务正在从集中往分散方向发展。在以前都是以几个主要的票务网站为主,几个票务网站都在用户中有比较好的认知,有好的项目用户都会去这几个网站进行购买。随着私域流量的兴起,许多内容方或场馆方都想要抓住自己的用户,想要有自己可承接的系统。其实这个也不只是发生在票务行业,在其他行业也在向这个方向发展。因此,后续很多 ToB 定制化需求将是未来一个很重要的关注点。


“怎么快速解决这方面需求?我们需要在体系迭代过程中将相关的因素考虑进去。就当前来看,通过开放平台的方式可以部分解决相关的定制化问题。另外,目前业界也都在向低代码平台方向发展,这个也是解决定制化需求的一个很好的工具。”


大麦网高性能售票能力详解

对于大麦网的电商交易业务,可能有些人会认为无法跟大促、秒杀等业务场景相比,但其实并不是这样。王冬告诉 InfoQ:“大麦网最热项目商品详情页的秒级峰值基本可以达到大促活动的量级。”


因此,对于大麦网技术架构来说,势必要在高性能售票能力上下功夫。在售票链路上,大麦网的部分链路能力基于阿里的共享电商平台去做,这部分性能或许不用担心。但对于票务行业性的部分,为了日常演进的灵活性,大麦网选择了以自建体系来承接。其中最为重要的是选座和库存两大体系,这两大体系的高性能、一致性需要不断进行优化和迭代。对于这两大体系,王冬进行了详细的介绍。

选座

系统选座能力有三个核心问题要解决,即高并发、高数据量、高冲突率。对于高并发,大麦网采用将并发转串行的方式,类似于针对每个秒级时间片生成相应快照,快照存储到缓存中,再把相应请求按秒级时间戳映射到相应的时间片快照缓存上。这样可以将高并发减少相当大的量级,满足座位一致性的同时也保证了系统可用性。另外,对于快照缓存的生成,可以控制到秒级以下的分片,具体可根据参数灵活配置。


对于高数据量,大麦网采用两级压缩的方式来减少数据量的大小。第一级压缩采用大麦网自研的算法将座位相关的数据进行自定义压缩,类似于座位 ID 之类的数据可以压缩成偏移量的形式,会出现很多“012”之类的重复字符串,然后再采用类似 zip、7z 之类的通用压缩算法对这类重复字符串进行压缩,这样可以达到很好的压缩比。在客户端解压时间上,经过大量测试,实际上解压时间可以忽略不计。高的压缩率代表可以极大减少带宽的消耗,提升用户侧的性能体验。


对于高冲突率,由于很多用户会在抢票时选择同样的座位,如果不做相应的选择限制,冲突率会非常高,极端情况下前 1 分钟的冲突率会高达 60% 以上之多。由于大量冲突,用户不得不返回到选座页面重新选择进行购买,这样不断操作也会给系统带来巨大的压力。为此大麦网采用了预锁座的模块来解决这个问题。一般锁座都是基于数据库的锁座操作,这类操作消耗的系统资源大、并发性能不高,因此大麦网没有采用这种方式。预锁座是基于缓存的锁座操作,比较轻量级,并发的性能十分高。预锁座还需要防止类似 DDOS 攻击的现象,即防止不良的机器爬虫进行恶意占座。怎么解决这个问题呢?大麦网采用安全风控模块对用户的客户端进行风控识别,这样可以大量阻止机器刷单。在预锁座中最重要的还是锁座时间的参数,此参数设置过长,容易被机刷现象放大,进而无法销量;此参数设置过短,用户来不急完成下单流程,还是解决不了高冲突率的问题。最终大麦网采用结合实时和历史数据来决定预锁座时间的方式,达到的效果是前几分钟的冲突率减少到 5% 以下。

库存

对于库存能力,大麦网从几方面进行了性能提升及稳定性保障。首先,进行核心链路和非核心链路的解耦,进行库存读取和库存扣减的系统分离,还对核心链路的弱依赖进行降级,这几方面均保证了从架构层面上库存操作核心链路的稳定性。


其次,对于库存操作的热点问题,采用热点离散算法,根据业务数据将相关的库存记录分散到多个库的多个表中,分散单库表的行锁压力,另外还使用了阿里双 11 的热点补丁来提高单行记录行锁的性能。并且,当某数据库库存扣减量达到一定的并发阈值时,会将额外的并发扣减请求降级为串行扣减请求,保证数据库的高稳定性。


最后,对于库存的数量来说不能有任何问题,因为物理座位和服装商品不一样,有较大的稀缺性,一旦不一致在现实世界中很难补充解决。为此大麦网采用了大事务拆分及实时对账的方式来保证库存操作的一致性,防止任何数量不一致的情况产生。


由于日常流量和有热门项目时流量有巨大的差异,因此需要对热门项目有比较准确的预判,从而在必要时才能知道要进行资源水位扩容。大麦网通过流量数据、IP 热度数据等对项目进行预测以分析项目可能达到的量级,然后针对量级来给出相应的资源配置,最终来决定是否进行扩容还是保持现状。


另外,类似大麦网这类日常流量和峰值流量差几个量级的体系,迭代思路、运维保障、资源利用等方面也是挑战。对于迭代思路上,由于大麦网热门项目基本周周都有,不断迭代升级的系统如何保证不出大问题?大麦网最终采用了抓大放小的方式,制定安全生产策略。对于可能产生大问题的事项,做了安全生产红线,在线下会对红线相关的修改做 CR 和测试覆盖,在线上会对红线进行实时巡检;另外,也会有定期的全链路压测、故障演练等方式,以保证系统核心链路的性能和稳定性。在运维保障上,大麦网将所有和热门项目有关的预案执行完全自动化,以防止忘记执行预案从而产生稳定性问题。对于资源利用,动态扩缩容是解决问题的最好方式,但是困难之处在于,项目热度是否能预测准,整条链路的资源配比是什么,是否能快速扩容,结束后能否快速恢复,这些都是要解决的难题。目前大麦网正在不断探索中。


大麦网票务中台建设初探

作为大麦网相关票务中台建设负责人,王冬也向记者介绍了票务中台的情况。大麦网所提及的票务中台,主要聚焦在演出票和电影票,统称为现场娱乐票务。“虽然我们可以把票务统称为现场娱乐票务,但其实在这里面也可以分成很多类别的票,我们也面临着要支持多个票务类目的情况。从客户角度来看,通用解决方案不能做到最佳体验。但就平台的原始积累来说,肯定是先建设通用的能力来支持好大部分的类目,这就导致个别类目会存在水土不服。“


即使有这样的现实问题,但是王冬也进一步表示:”当平台发展到一定阶段时,就需要从通用向个性来发展,以便更好地服务于特定领域客户,无论是 ToB 的 B 端体验,还是 ToC 的 C 端体验都是如此。所以,以上这些促使我们在系统建设的过程中向这方面做了相应的思考和推进。另外,除了类似于演唱会这种单项目外,我们之前也承接过类似男篮世界杯这类世界级体育赛事,这类大型项目和我们的日常业务也有较大的差异,因此中台化是最好的解决方案。


结束语

作为一名技术 Leader,见证大麦网并入阿里之后在组织结构上,文化融合上,技术架构上的变化,从管理上和对业务的思考上,王冬都有了更深刻的感悟。


刚开始来大麦网,他对现场娱乐票务业务并不十分了解。“我觉得最好地了解业务的一个方式是不断解决当前出现的问题,在过程中深挖背后真正的原因,这能使你很快地熟悉业务。”


对于技术团队管理,王冬有几点想和大家分享。首先,技术团队一定要对业务和行业有深刻理解,这样设计出来的系统才能适应业务和行业,设计出来的架构才能为业务留好未来的发展空间;其次,每天系统都会面临着不断地迭代发展,那几年后这个系统或体系会发展成什么样?每位技术同学都需要思考这个问题;最后,对于一些比较复杂的问题或创新事项,需要提前进行思考并发挥团队的力量,促进团队同学共同思考。


采访嘉宾介绍:

王冬,花名赛特,当前任职于阿里巴巴。曾涉猎并参与创建各类票务技术体系,当前负责大麦网及淘票票技术架构及相关票务中台能力建设,在业务建模、技术架构演进、高并发、分布式技术等领域有丰富的实践经验。


想与王冬老师进一步沟通交流可以到 QCon 北京站的现场,同时还聚集了 BAT、字节跳动、美团等大厂技术大咖,将会分享业务架构、智能金融、微服务、人工智能等热门领域的前沿技术落地实践。精彩不容错过!


目前大会门票 9 折抢购中,限时立减 680 元,优惠截至 12 月 25 日,席位有限,抓紧抢购!扫描下图二维码可查看大会最新日程安排。大会咨询:17310043226(同微信)



2020-12-09 07:002582

评论 1 条评论

发布
用户头像
mark
2020-12-09 10:01
回复
没有更多了
发现更多内容

MySQL库表设计小技巧

Simon

MySQL 数据库设计

什么?还没有自己的域名?

北漂码农有话说

k8s极简史:K8s多集群技术发展的历史、现状与未来

华为云开发者联盟

Kubernetes 容器 云原生 华为云

架构师训练营——请简述 CAP 原理

WW

SpringBoot 使用 jasypt 对配置项进行加密

hungxy

Java springboot jasypt

写一个 web 性能压测工具

WW

「架构师训练营」第 7 周作业 - 总结

森林

Oracle JDK7 bug 发现、分析与解决实战

vivo互联网技术

week7 总结 性能测试

a晖

凡架构必拆分,分则有度

菜根老谭

微服务 康威定律 架构思维 分治思维

实操案例:字符串哈希表操作

华为云开发者联盟

程序员 编程语言 C语言 哈希表 字符串

LeetCode 565. Array Nesting

liu_liu

算法 LeetCode

JVM系列之:详解java object对象在heap中的结构

程序那些事

Java JVM GC JOL

企业架构框架之DoDAF

冯文辉

企业架构

Newbe.Claptrap 框架入门,第二步 —— 简单业务,清空购物车

newbe36524

容器 微服务 Reactive .net core ASP.NET Core

架构师都该懂的 CAP 定理

闻人

架构 分布式 架构师

LeetCode 144. Binary Tree Preorder Traversal

liu_liu

算法 LeetCode

计算机网络基础(七)---网络层-ICMP协议

书旅

计算机网络 网络协议 网络层

两个指针缩小范围算法,CQRS 命令查询职责分离模式 John 易筋 ARTS 打卡 Week 09

John(易筋)

ARTS 打卡计划

性能测试

满山李子

极客大学架构师训练营

使用HSDB 查看jvm内存

引花眠

tomcat 使用apr

zack

tomcat

Flink 1.11 Unaligned Checkpoint 解析

Apache Flink

flink

Mybatis二级缓存,你确定要用么?

xcbeyond

mybatis 二级缓存 一级缓存

ARTS打卡 第8周

引花眠

ARTS 打卡计划

波士顿动力狗 SPOT 权威购买指北

早睡蟒

Python 人工智能 学习 波士顿动力 机械狗

Flask 的 url 处理器

Leetao

Python flask Web框架

来自前端童鞋对后端的吐槽@#$%^

Java小咖秀

程序员 程序人生 大前端

「架构师训练营」第 7周作业 - 性能测试

森林

有趣的“第二个系统”

架构精进之路

提升认知 研发体系

MinIO 简介和搭建一个对象存储服务

耳东@Erdong

Minio store Object store

从新旧技术体系替换,看大麦网票务技术体系重塑演进之路_架构_张晓楠_InfoQ精选文章