携程乐鸿辉:混合云弹性如何帮助携程应对业务的低迷与快速恢复

简介: 2023年10月31日-11月2日,2023云栖大会在中国杭州·云栖小镇举行,携程容器与混合云研发总监乐鸿辉在【云服务器 & 计算服务】专场中带来了题为《混合云弹性如何帮助携程应对业务的低迷与快速恢复》的主题演讲,分享了携程的云原生之旅、混合云弹性实践以及最终实践效果。

2023年10月31日-11月2日,2023云栖大会在中国杭州·云栖小镇举行,携程容器与混合云研发总监乐鸿辉在【云服务器 & 计算服务】专场中带来了题为《混合云弹性如何帮助携程应对业务的低迷与快速恢复》的主题演讲,分享了携程的云原生之旅、混合云弹性实践以及最终实践效果。


以下是他的演讲内容整理,供阅览。


乐鸿辉 携程容器与混合云研发总监


一、携程的云原生之旅


携程从2017年之前就开始了容器化,很早就对在线应用进行了先期探索;2018年时,基于云原生架构业务的未来趋势判断,用K8s代替了原有的Mesos架构,并以K8s为起点构建容器平台,进行云原生化改造



云原生架构不仅是容器化,更是整个infrastructure架构以及应用层的现代化,使其具备有弹性、轻量、可迁移的特性。到2020年,我们经历了疫情,直接导致业务进入了迷期,但是对做基础架构的人来讲是一个非常好的机会所以这几年也是非常繁忙的一段时间,业务技术团队以及我们对整个架构做了很大的改造,去打造一个弹性的、混合多云的系统。


目前,我们已经基于容器平台把近60%以上的算力进行了容器化,包括部分有状态的服务。同时,我们也构建了一个混合多云的架构,充分利用弹性调度的手段,进行降本增效,提升运营的效率。



这张图是航空客运量的数据,可以看到在疫情期间的波动非常大,整个业务上的不确定性对我们造成一个非常大的压力,这个业务的波动会反映在对整个基础设施上的需求和挑战。


以前,我们是基于IDC这样传统的容量预测,相对来讲是一个可预测的范围,什么时候去建设IDC、什么时候去准备什么样的资源。但是一旦进入疫情期间,这个是非常难做到的,基本上以前的历史数据已经无效了。


另一个问题,疫情期间对公司的业务影响比较大,所以降本压力非常大,要尽量杜绝资源浪费。同时,一旦恢复,将会迎来一个猛烈的反弹,对资源有快速扩展的需求。既要降本,又要应对未来极速扩展的需求,对整个技术体系的容量管理和弹性是非常大的一个挑战。



应用容量的管理,在之前是手工进行的,面临以下三个问题:

  1. 管理效率低。因为都是手工管理,虽然有一些辅助的预测工具,但是携程有一万多个应用、两万多个部署组,需要消耗大量的研发人员、SRE的精力。
  2. 容量风险高。手工扩容容易存在偏差,一旦出现数据波动,应用极有可能造成恐慌性的扩容,造成容量挤兑。
  3. 基于以上问题,研发倾向于提前超量扩容,最终导致严重的资源浪费。


二、混合云弹性实践:提出韧性优先架构


针对以上挑战与问题,弹性系统是非常好的解决方案。但从手工管理到弹性的自动化系统,对容器平台构建者而言,怎么让我们的研发人员、乃至整个公司信任这套系统,并在关键时刻起作用呢?我们把这个问题从三个维度进行了拆解。



  1. 弹得快,即跟上流量。
  2. 靠得住,即关键时候不掉链子。
  3. 容量足,容量不足一切都是免谈的。



第一个,是弹得快,是性能问题。首先,我们到底需要多高的性能?第一反应肯定是性能越高越好,但是同样意味着边际成本会越来越高。所以,如何评估合理的目标非常重要。我们是基于场景来评估性能目标的这些场景包括日内扩容、节假日扩容,对未来的增长预期,系统的冗余系数。基于上述场景的数据及评估敲定目标SLO。然后,梳理核心链路,对链路进行拆解,进行数据埋点、启动压测,分析瓶颈再优化的过程。


在优化上,除了代码优化,更重要的是架构上的优化。如果只在部分场景使用了容器、K8s,但其它的架构生态还是基于传统的静态思路构建,而进行调整,那么会对整体性能可靠性造成非常大的影响。整体来讲,云原生更重要的是整个架构的现代化过程。



第二个问题,如何确关键时刻不掉链子。对于研发人员来讲,可以从局部做好每个系统的优化、压测,做好可靠性保障,提升局部的可靠性。但是如果从架构、从自上而下的角度来思考问题,局部的故障是不可能避免的。如果局部出现故障,怎么去保证整体的可靠性,保证业务的承诺是能够达到的?以下介绍几个经典的高可用的设计经验:


第一,做到故障的隔离。要保证系统一旦出现局部问题的时候,避免从一个局部的故障演变成一个整体的故障。在这基础之上,可以在故障域之间做冗余部署,一旦发生故障,就可以利用切换手段完成故障转移。可能大家、包括我们自己也会走一些弯路,我们以前经常关注的是冗余部署和故障转移,往往忽视了故障隔离,但是其实「故障隔离」是其中最重要的一个点,如果做不到故障隔离,后面两个其实都是无效的。


基于上述思想,我们提出了韧性优先架构。



从结构上来看,利用Region 、AZ等公共云提供的天然故障域,在这故障域之内,构建partition这样更小的故障域。不同于业界、社区,我们的K8s是不跨故障域部署的,而是部署在partition的。


基于这样的架构诉求,不可避免得会出现很多的集群,在提供给上游的客户或上游的系统用的时候,我们要简化它的复杂性所以在这之上,每个Region也部署了一套Federation,上层PaaS与使用方对接Federation,由Federation提供Region部署的调度能力及管控能力


基于这样的结构,我们引入了一些约束。对韧性优先架构的约束主要有以下两点:


第一,核心的弹性的高频链路应该收敛在故障域内,在东西向不能出现频繁的控制链路/数据链路的交互,因为这会打破故障隔离的原则

第二,应用要在多个故障域 partition之间进行冗余部署,在变更的规范上,不允许同时跨越多个AZ、多个partition、多个故障域之间的变更,因为这些变更动作同样也会打破故障隔离的前提。一般核心链路涉及到的环节和系统非常多,只有这些环节和系统都做到了这样的架构对齐,才会真正实现韧性优先,这是一个百密一疏和持续性的工作。



基于这样的架构思想我们也设计了多集群的HPA方案,实现HPA功能的韧性优先


首先分析HPA有哪些关键链路第一个,最核心的是对应用容量的自动扩缩容,第二个是HPA的资源的变更,第三个是多区域之间容量的再平衡。因为扩缩容会影响应用承载流量的能力,它是最高频的,这条链路核心,所以它的故障域设计上要做到最小,故障域限定在K8s Cluster。即扩缩容的动作K8s Cluster内就可以封闭,无需跟外部进行交互。再平衡主要是为了平衡各集群及AZ的容量小时级别的不可用都不太影响业务流量的承载,它的故障域要求会松一点,为整个RegionHPA资源的变更类似,故障域定义为Region


基于这样的设计与实现,如果Cluster A挂了,流量会自动把负载均衡传导到Cluster B,在Cluster B扩缩容的组件会自动扩容也就是说整个架构,不论是个别Cluster宕掉或者Federation宕掉,对上层的业务来说完全是无感的,会正常地进行扩缩容



另一方面,怎么解决容量的问题。携程以前是基于IDC构建的,容量扩展周期较长。目前是通过打通阿里云,以混合云的架构,利用云的弹性来扩展容量


具体来看,在携程容器的IP是全局可路由的,然后AZ内是应用共享同一个流量调度单元,做到调用尽量收敛。在这样的一个结构下,也提出了一些约束:AZ之间容量的驱动是由流量的驱动来进行的,但是AZ内的容量负载,甚至是故障切换,是由Federation进行调控实例数比例来进行的。


三、效果最高峰1分钟扩容近2000个容器实例



上图是阿里云的某一个AZ的资源使用的展示。可以看到,波动是非常剧烈的,也非常感谢阿里云在ECS的弹性供应上有非常强的能力,帮助我们应对流量的尖峰和波动。



从过去一年的指标看,弹性系统可靠性没有发生过影响业务的故障。像今年这么大挑战情况下,基本上系统的可靠性达到了历史最高峰。在假日高峰,能够做到一分钟有近2000个容器实例的扩容。扩展性上,最高将30%的容量调度到阿里云;效率上,90%以上的应用开了HPA,同时HPA本身的参数是由autopilot产品来负责去优化与管以达到最优或者遵循统一的策略,这样基本不需要人的参与去运维。


成本方面,通过弹性系统,在线应用CPU的宿主机利用率在25%到30%之间。当然宿主机利用率的上限也受到多AZ容灾设计上的限制,如2个AZ的容灾架构一般宿主机的利用率不要超过50%


因为每个应用是按需使用资源的,所以应用跟应用之间,业务跟业务之间它有一个错峰的效应。基于错峰的效应,整个五一期间,把容量需求的峰值消减了28%以上,同样也可以达到降本的效果。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
弹性计算 人工智能 Cloud Native
新开普副总裁焦征海:云原生计算基础设施助力新开普创新提速
新开普副总裁焦征海在【云服务器 & 计算服务】专场中带来了题为《云原生计算基础设施助力新开普创新提速》的主题演讲,围绕新开普业务上云之路、倚天ECS实例降本实践以及未来业务展望等相关话题展开。
|
运维 安全 云计算
蝶宇云陈林:基于阿里云计算巢的业务转型 | 2023云栖精选
2023年10月31日-11月2日,2023云栖大会在中国杭州·云栖小镇举行,蝶宇云科技总经理陈林在【计算巢专场】发表了题为《基于阿里云计算巢的业务转型》的主题演讲,从初创企业突破困境之路、拥抱阿里云计算巢、专注安全运维托管服务等方向做了分享。 立即购买【蝶宇云—金蝶云星空计算巢(企业版SaaS服务)】:https://market.aliyun.com/products/56082003/cmgj00064150.html?#sku=yuncode5815000001
|
Java 测试技术 Maven
Spring整合JUnit实现单元测试
本文介绍了如何在Java开发中使用Spring与JUnit进行单元测试。首先,设置JUnit和Spring环境,创建待测试的业务逻辑类,如MyService。接着,编写JUnit测试类MyServiceTest,使用`@RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`注解,注入并测试MyService的方法。此外,借助Mockito模拟依赖对象,以及使用Spring TestContext框架进行集成测试,确保测试的隔离性和环境的稳定性。通过这些方法,可以提升代码质量和测试效率。
380 1
|
人工智能 运维 架构师
数美科技首席架构师陈建:基于云上弹性的高可用实时风控架构实践
2023年10月31日-11月2日,2023云栖大会在中国杭州·云栖小镇举行,北京数美时代科技有限公司首席架构师陈建在【CloudOps云上运维专场】发表了题为《基于云上弹性的高可用实时风控架构实践》的主题演讲,从在线实时风控架构及高可用解决方案等方向做了分享。
|
存储 运维 监控
复星健康集团陈清阳:云边端协同一体化,构建新一代双SaaS星医平台
上海复星健康科技(集团)有限公司技术总监陈清阳在【一云多形态】专场中带来了题为《云边端协同一体化,构建新一代双SaaS星医平台》的主题演讲,围绕复星健康集团在双SaaS服务建设过程中选型思考、集团数据能力建设、混合语音组网解决方案、复星健康的平台化工程实践等相关话题展开分享。
|
运维 测试技术
实用指南:使用Pytest Allure测试框架添加用例失败截图
本文介绍了如何在使用`allure+pytest`进行软件测试时,通过`pytest_runtest_makereport`钩子函数自动捕获失败用例的截图。在`conftest.py`中定义钩子,当用例失败时,保存截图并附加到Allure测试报告中。测试代码示例展示了登录豆瓣的场景,测试失败时会自动生成截图。这种方法有助于快速理解和解决测试问题,提升测试效率和软件质量。
|
存储 弹性计算 缓存
阿里云助力元戎启行 加速自动驾驶应用落地
曾经在科幻电影中才会出现的自动驾驶汽车,如今已经驶进了真实道路。
阿里云助力元戎启行 加速自动驾驶应用落地
|
存储 传感器 弹性计算
序祯达生物联合创始人兼CIO费家俊:弹性计算助力测序多组学应用提升新药研发效率
序祯达生物联合创始人兼首席信息官费家俊在【高性能计算】专场中带来了题为《加速裂变,催化创新——弹性计算赋能测序多组学应用提升新药研发效率》的主题演讲,围绕弹性计算如何助力测序多组学应用提升新药研发效率、创新药研发详解以及测序分析等相关话题展开。
|
存储 架构师 文件存储
云端渲染时长1.58亿核小时,阿里云助力国漫巨制《新神榜:杨戬》提升视效
阿里云E-HPC为影视渲染全流程量身定做的方案有幸成为诸多中国数字内容创作佳片后的推手,带来生产关系的改变
云端渲染时长1.58亿核小时,阿里云助力国漫巨制《新神榜:杨戬》提升视效
|
机器学习/深度学习 缓存 Kubernetes
进击的Kubernetes调度系统(一):Scheduling Framework
阿里云容器服务团队结合多年Kubernetes产品与客户支持经验,对Kube-scheduler进行了大量优化和扩展,逐步使其在不同场景下依然能稳定、高效地调度各种类型的复杂工作负载。 《进击的Kubernetes调度系统》系列文章将把我们的经验、技术思考和实现细节全面地展现给Kubernetes用户和开发者,期望帮助大家更好地了解Kubernetes调度系统的强大能力和未来发展方向。
8908 0

热门文章

最新文章