热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

2018年3月,同程集团旗下同程网络与艺龙旅行网合并为同程旅行,同年登陆香港联交所主板挂牌上市,成为港

作者 | 褚杏娟

采访嘉宾 | 彭涛

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,请注明来意及公司名称。

扫描二维码下载↓



推荐阅读
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 2021最新总结网易/腾讯/CVTE/字节面经分享(附答案解析)
    本文分享作者在2021年面试网易、腾讯、CVTE和字节等大型互联网企业的经历和问题,包括稳定性设计、数据库优化、分布式锁的设计等内容。同时提供了大厂最新面试真题笔记,并附带答案解析。 ... [详细]
  • 生产环境下JVM调优参数的设置实例
     正文前先来一波福利推荐: 福利一:百万年薪架构师视频,该视频可以学到很多东西,是本人花钱买的VIP课程,学习消化了一年,为了支持一下女朋友公众号也方便大家学习,共享给大家。福利二 ... [详细]
  • 2020年第十一届蓝桥杯决赛JAVA B G题“皮亚诺曲线距离“的个人题解目录
    本文是2020年第十一届蓝桥杯决赛JAVA B G题“皮亚诺曲线距离“的个人题解目录。文章介绍了皮亚诺曲线的概念和特点,并提供了计算皮亚诺曲线上两点距离的方法。通过给定的两个点的坐标,可以计算出它们之间沿着皮亚诺曲线走的最短距离。本文还提供了个人题解的目录,供读者参考。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 开发笔记:Python之路第一篇:初识Python
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Python之路第一篇:初识Python相关的知识,希望对你有一定的参考价值。Python简介& ... [详细]
  • 初识java关于JDK、JRE、JVM 了解一下 ... [详细]
author-avatar
戴劳力士_484
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有