最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

同程旅行云原生改造:半年完成全部核心业务改造、抗住爆品 300% 流量冲击

  • 2021-09-30
  • 本文字数:5104 字

    阅读完需:约 17 分钟

同程旅行云原生改造:半年完成全部核心业务改造、抗住爆品300%流量冲击

采访嘉宾 | 彭涛

 

2018 年 3 月,同程集团旗下同程网络与艺龙旅行网合并为同程旅行,同年登陆香港联交所主板挂牌上市,成为港股“OTA 第一股”。财报显示,2021 年上半年,同程艺龙 MAU 约为 2.56 亿,其中在第二季度,MAU 达到 2.8 亿,同比增长 58.3%,创下了历史新高。上半年,同程旅行的各项核心业务增长均远超行业增速,并超越疫情前水平。

 

业务量的增长让同程旅行的技术团队感到欣喜,但另一方面这也意味着团队需要直面高流量带来的新挑战,云原生改造成了解决问题的关键。虽然同程旅行从 2019 年年底才开始进行云原生改造,至今还不到两年,但成果显著,成功帮助同程旅行经受住了业务流量暴增的考验。近日,InfoQ 专访了同程旅行研发中心云原生平台负责人彭涛,一探同程旅行云原生的改造之路。(本文节选自《中国技术先锋团队访谈录》2021 年第五季)

 

半年完成全部核心应用改造

 

2019 年,同程旅行主要面临两个问题。首先,由于刚和艺龙网完成公司主体合并不久,两个前身公司各自存在着不同技术体系的构建、发布等系统,这些系统随着公司业务的逐步整合,也必须在技术层面做进一步的收敛,以达到平台统一的目的。同时,在线旅行业务具有较明显的业务波动特性,在季度、节假日、每日时段上都有比较突出的波峰波谷特性。这样的业务特性对技术资源的整体利用率波动影响较大。

 

当时,企业服务云化成为业界技术发展较为主流的新趋势。基础服务的云化支持和业务应用的云原生改造成为技术团队较为紧迫的工作。2019 年底,同程旅行基于原有两个前身公司容器化基础上的云原生的二次改造工作正式启动。

 

2019 年底到 2020 年中的这半年里,技术团队定下的总体目标是提升集群资源利用率,降低资源使用成本。围绕这个目标,团队计划利用云原生思维重构部分技术体系,将多套旧有系统合并、收拢到一套以云原生应用为核心的私有云平台上,同时将 IDC、物理网络、虚拟网络、计算资源、存储资源等通过 IaaS 、PaaS 等,实现虚拟化封装、切割、再投产的自动化流程。

 

说起来似乎不难,但整个过程需要多个技术工种的支持和配合。

 

基础层面,为了支持 IaaS 层的网络虚拟化,运维人员选择了 Vxlan、大二层技术,并用 KVM 作为计算资源的切割。在容器网络虚拟化这部分,考虑到要降低损耗,采用了 BGP、Host 网络模式等技术,同时开发了绑核、NUMA 等相关技术。容器存储方面,远端存储选择了 Ceph,本地层使用块存储设备、NUMA 设备等。异构资源侧则采用了 GPU 改 CUDA library 的方式来完成虚拟化的切分和分时复用。技术团队将资源调度变成了利用时序数据预测应用规模的方式,提升了资源利用率。

 

这一阶段的最大成果就是完成了有显著潮汐特征的订单服务的改造。通过改造,订单业务从原先独享机器集群切换到了共享机器集群,仅使用之前独享机器集群 40%的机器就完成了对全线服务业务的支撑,同时由于调度算法加入了自研的服务画像技术作为默认调度属性,资源调度的稳定性不降反升。

 

改造进行半年之后,同程旅行已实现纳入到该平台部分单机资源利用率提升了 20%,并通过云原生化的旧应用改造,下掉了当时集群内一半的服务器和相应的机房水电资源。

 

虽然看起来顺利,但是技术团队其实也面临着很多问题。比如在改造完成后服务部署时,团队发现大批量的物理机都出现负载上升的情况,经过排查发现是低版本的 Java 程序无法准确识别容器里的规格,导致 GC 时频繁发生资源争抢。

 

当时正在做业务迁移,这个问题导致部分业务的稳定性感受不太好。”彭涛说道。由于无法确定其他语言是否会出现同样的问题,研发团队紧急开发了垂直扩缩容,确保 GC 可以使用更多的计算资源。另一方面,研发团队与业务团队一起进行了 JVM 版本升级,两项措施双管齐下,才没有耽误迁移进度。事后,研发团队还引入了隔离性较强的 Kata Container 来彻底解决该问题。



同程旅行云原生平台架构图,来源:同程旅行

 

流量突增,团队迎来大考

 

从 2020 年中到年底这段时间,可以认为是同程旅行云原生改造的第二个阶段。

 

第一阶段改造完成后,平台开始服务同程旅行的大部分在线业务。随着服务器集群规模的扩大,部分机器开始频繁出现故障。此时,保障服务稳定性成了技术团队的首要任务。

 

基于公有云、私有云和离线专属云集群等新型动态计算环境,同程旅行的技术团队帮助业务构建和运行具有弹性的云原生应用,促进业务团队开始使用声明式 API ,同时通过不可变基础设施、服务网格和容器服务,来构建容错性好、易于管理和观察的应用系统,并结合平台可靠的自动化恢复、弹性计算来完成整个服务稳定性的提升。

 

具体工作上,技术团队将公有云的镜像预热、分发,专线直连内网机房,解决了内网集群需要镜像快速分发等问题,依赖的缓存资源和持久化数据实现了常驻云上,离线资源所在的专有云集群也同步被打通。同时,依托弹性计算能力,团队将集群间资源使用成本降到最低,并将最高服务稳定性的智能化调度平台的服务动态部署在多个集群上。针对业务专有需求和特殊,平台可以输出基础设施 API 和基础能力 API,供业务构建自己的云服务。

 

上述工作完成之后,原本用来应对季节性流量高峰期而采购的机器资源开始减少。通过判断服务当前冗余度来缩容线上服务的实例数,平台可以用最小的实例数量提供线上服务,而节省下来的资源可以提供给离线业务混合部署使用。

 

“在不额外新增机器的情况下额外获得的算力,成功支持了屡次创纪录的峰值流量。”彭涛说道。同时,团队开发的 Service Balance 系统可以在服务性能受损时自动尝试修复该节点性能,使得平台能够以较低的成本稳定运行。

 


同程旅行流量变化趋势图,来源:同程旅行

 

在 2020 年,同程旅行的部分业务跟进了直播方式。由于业务转变较快,应用架构尚未来得及调整,导致部分应用出现了明显的卡顿,影响到用户体验。为解决该问题,技术团队首先通过弹性计算改造为业务快速提供支持,之后又尝试了 Scale Zero 等方式,最终将该业务的资源使用量降到了之前常备资源的 20%。这也是在第二阶段中取得的重要成果。

 

得益于这次经历,弹性计算项目在同程旅行内部快速推广开来,企业核心业务的主要链路在三个月内就完成了云原生弹性计算接入,并借用弹性计算成功撑住爆款应用带来的日常流量 300%的峰值流量,也顶住了 2021 年上半年的屡次刷新公司峰值流量,为公司同类业务场景提供了坚实的技术支撑。

 

2021 年上半年,同程旅行进入到云原生改造的第三个阶段。团队通过基础组件、服务的云原生改造、服务依赖梳理和定义等方式,使应用不再需要考虑底层资源、机房、运行时间和供应商等因素。此外,同程旅行还利用标准的云原生应用模型,实现了服务的跨地域、跨云自动化灾备、自动部署,并向云原生场景下的 DevOps 演进。

 

考虑到五一出行和爆款产品带来的叠加流量,加上全球 GPU 资源供应紧张带来的影响,同程旅行将混合云改造计划提前。通过打通公有云的弹性容器集群,平台实现了 GPU 资源按需申请。通过使用混合云服务,同程旅行的基础资源使用成本和维护成本都进一步大幅降低。

 

目前,同程旅行核心业务均已完成了第二阶段的改造,部分小业务线还在持续推进中。改造完成的项目现在由平台控制在不同的机器、集群、云上进行着符合预期的流转和动态的部署。团队还完成了对机器数量较多的两个离线集群云原生改造。

 


同程旅行容器化专项组获年度最佳收益项目奖,来源:同程旅行

 

面对云原生改造过程中可能存在的新旧架构并存情况,彭涛给出了以下五条建议:

 

  1. 所有的迁移改造方案都要有对应的回滚方案,这样业务才可以大胆尝试;

  2. 新老架构转换要努力做到一键化和无感化,产品、功能等提前培训;

  3. 研发团队要通过直接面对平台用户、自己先用自己的平台等方式,尽快发现问题。提需求、开发、测试、上线交付的各个时间点都要明确。事后要回访,响应每个用户的意见;

  4. 研发团队需要积极参与平台资源使用的整个生命周期,降低平台的使用复杂度;

  5. 提前做好沟通。各业务的服务观察周期不同,可以利用时间空隙进行服务的新老架构切换。

 

目前,同程旅行的云原生改造计划仍在持续深入进行。技术团队计划在明年实施存储类基础服务的云原生化改造,借助云平台提供的声明式接口加速软件交付流程,同时将业务代码下沉至函数级,运维能力由集成平台统一提供。

 

“这个过程的侧重点在于人效的提升。我们感觉比较好的落地方向是前端和机器学习。结合之前的经验,技术团队可以构建一个拖拽式的特定业务场景组件和界面编程平台,通过简单的编码就可以构建出整体服务的 pipeline,相关组件的运维能够对接到统一的平台运行。”彭涛解释道。

 

除了推进内部改造外,同程旅行也计划提供一些行业专属的云原生服务,推动整个上下游链路完成技术升级,未来也计划将一些项目开源,回馈给社区。

 

“积极参与到这次技术变革中”

 

在彭涛看来,云原生改造给团队带来的最大影响就是,原来权责清晰的研发、测试、运维的工作定位,开始变得模糊起来。

 

“三个部门都开始面向平台工作,三者之间的沟通协作也借由平台变得更加稳定和高效。”彭涛说道。从运维侧看,自动化处理占比开始增加,集群资源利用率提升的同时,稳定性并没有下降。从研发侧看,迭代交付速度提升,基础组件和基础服务可以通过 API 的方式调用,单体应用很方便就能拆解成小的微服务。团队开始借助云原生实现 DevOps,从而促使开发部门和运维部门建立密切协作,应用代码开发完成后能够非常快速、顺畅地转入生产。

 

云原生是一种构建和运行应用程序的整套技术体系和方法论。彭涛认为,云原生服务是希望研发人员能够关注自己的业务。从定义来看,云原生应用是通过标准化应用和服务构建容错性好、易于管理和便于观察的松耦合系统。结合可靠的自动化手段,云原生技术使研发能够轻松地对系统作出频繁和可预测的重大变更。如果云原生改造之后,研发人员需要关注的东西变多或者需要配置的东西更多了,那么就有点本末倒置了,因为复杂配置的背后不只是用另一套代码的问题。

 

“以后的程序员也许真的要面向云原生应用编程了。”彭涛感叹道。

 

“早期,大家自己写代码部署到虚拟机上,容器服务带来了更轻量的操作系统打包和分发方式,提升了软件的交付效率,再结合大量的自动化组件,使 DevOps、线上部署和运维效率倍增,应用移植性变得更强。目前流行的无服务器计算更是让用户无需管理和运维底层的计算资源。这种趋势下,程序员都需要将自己的思维转变成面向云原生应用编程,继而改变自己负责的服务。”

 

云原生技术带来的技术跨代,相比之前单纯满足业务需求开发工作,能够更加成系统化地解决用户痛点。不过彭涛也指出,云原生作为一种新的思维方式和编程理念,目前缺乏比较好的引导方式。如果一家公司希望进行云原生改造,首先就需要上下层达成思想上的共识。

 

当前时代的发展带来了越来越多的变化和机会,很多企业业务的更新速度已经从以“周”为单位提升至按“小时”计。在这种情况下,云原生带来的极致交付体验是值得大家花费时间和精力去学习、去实践的。云原生作为新生事物,虽然学习成本不是很高,但带来的变化却是巨大的。

 

“大家可以积极地参与到这次的技术变革中。”彭涛说道。

 

嘉宾简介

 

彭涛,同程艺龙架构师,2019 年加入艺龙,目前在研发中心负责资源调度相关工作,包括容器化平台建设、弹性扩缩容、离在线混部、GPU 隔离调度、弹性扩所容、虚拟网络等,尤其在推动业务落地有丰富的实战经验,主导设计的容器平台 Furt 已成为公司推动的主流产品,各项技术指标达到业内领先,已经受过相当规模的业务落地检验。在容器化方向有丰富的理论和实战经验,过去曾就职于百度基础架构部、新浪微博研发中心,参与开发和设计了百度公有云虚拟化网络、以及微博峰值流量与热点应对。Kubernetes 代码贡献者,Flink 代码贡献者。

 

在今年 11 月 12-13 日举办的 ArchSummit 全球架构师峰会(深圳站)中,彭涛将分享题为《同程私有云平台的弹性计算架构设计与落地实践》的演讲。大会还有业务架构、下一代云原生技术体系、应云而生的新一代数据架构、AI 工程化治理等专题,邀请到 Snowflake、阿里、字节、腾讯、华为等公司的资深架构师前来分享。点击阅读原文可查看大会详细日程。

 

迷你书推荐

中国顶尖技术团队访谈录(2021 年第四季)开放下载

 

这期《中国顶尖技术团队访谈录》精选了腾讯科恩、金蝶、海尔集团 IT、小红书、网易、阿里等技术团队在技术落地、团队建设方面的实践经验及心得体会。InfoQ 希望通过这样的记录,向外界传递顶尖技术团队的做事方法/技术实践,让开发者了解他们的知识积累、技术演进、产品锤炼与团队文化等,并从中获得有价值的见解。

 

如果你身处传统企业经历了完整的数字化转型过程或者正在互联网公司进行创新技术的研发,并希望 InfoQ 可以关注并采访你所在的技术团队,可以添加微信:caifangfang842852,请注明来意及公司名称。

 

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2021-09-30 10:574729

评论

发布
暂无评论
发现更多内容

区块链技术大显身手,仅用20分钟就打完一场官司!

CECBC

CECBC 区块链技术 数字版权 存证

clang-format 使用与集成介绍

Geek_101627

Flutter开发环境配置

玉龙BB

flutter android vscode

眼中有码,心中无码

小眼睛聊技术

学习 深度思考 程序员 最佳实践 算法

如何设置线程池参数?美团给出了一个让面试官虎躯一震的回答。

why技术

Java 源码分析 面试 线程池

ARTS打卡第一周

GKNick

MySQL 可重复读,差点就我背上了一个 P0 事故!

楼下小黑哥

Java MySQL

重学 Java 设计模式:实战单例模式

小傅哥

设计模式 编程思维 重构 优化代码

爬虫框架Scrapy应用实践-淘宝保险频道数据抓取【2】-抓包分析

hadesxiong

Python 爬虫 保险 Scrapy

Java日志门面系统

泛泛之辈

Java 日志 slf4j

2万字长文带你细细盘点五种负载均衡策略。

why技术

Java 负载均衡 源码分析 面试 dubbo

我的编程之路 -6(新时代)

顿晓

android 编程之路 时代

那些会阻碍程序员成长的细节[2]

MavenTalker

程序员 程序人生

5G时代下应用的安全防御研究

Nick

5G 5G网络安全 5G安全

关爱孩子的心理建设

Neco.W

人生 感悟 教育

[ARTS打卡] week 01

Mau

ARTS 打卡计划

ARTS打卡计划_第一周

叫不醒装睡的人

ARTS 打卡计划

ARTS-01

NIMO

ARTS 打卡计划 ARTS活动

如何做好Code Review?

架构精进之路

Code Review

Apache DolphinScheduler新特性与Roadmap路线

代立冬

大数据 数据中台 工作流调度 海豚调度 数据湖调度

ARTS-1

你当像鸟飞往你的山

ARTS 打卡计划

数据产品经理实战-数据门户搭建(上)

第519区

数据中台 开发数据

后疫情时代,区块链的发展迎来曙光!

CECBC

CECBC 区块链技术

深入计算机底层,从几本靠谱的书开始

HackMSF

计算机工作原理

DDD 中的那些模式 — 使用 Specification 管理业务规则

Joshua

设计模式 领域驱动设计 DDD 架构模式

ARTS 打卡 WEEK2

编程之心

ARTS 打卡计划

如何使用 Apache CXF 快速实现一个 WebService

Rayjun

Java WebService CXF

体验一次简洁的代码

你当像鸟飞往你的山

Mysql索引不会怎么办?6000字长文教会你

Super~琪琪

MySQL 数据库 sql 索引

ARTS week 3

刘昱

像孩子一样认识新事物 —— 读《终身幼儿园》

YoungZY

学习 读书笔记 读书

同程旅行云原生改造:半年完成全部核心业务改造、抗住爆品300%流量冲击_文化 & 方法_褚杏娟_InfoQ精选文章