字节跳动的多云云原生实践之路( 二 )


2019 年,抖音、今日头条等业务达到较大规模,频繁的营销活动要求底层有海量云资源供应,在这一阶段,基础架构大力推进了“推广搜”的云原生化,把物理机服务与在线服务进行全面融合,实现统一容器化调度 。
2020 年,为进一步控制资源使用成本,技术团队实现了常态化在离线混部,在面对高峰流量时能够快速进行资源出让,保障业务稳定性 。同时,数据库、缓存等存储系统也开始进行云原生化改造,加速了更大范围资源池的统管和融合 。
从上述演进不难看出,云原生架构这些年要解决的难题之一就是巨大的资源缺口 。大量资源短缺会不可避免地导致“集群建设 — 应用搬迁 — 腾挪资源”,进而带来不小的运维成本和稳定性问题 。
为了解决这一问题,早在 2019 年,我们就开始进行集群联邦建设,通过解耦应用和集群的绑定关系,将各个业务线的资源并池,以应对分布式云带来的挑战 。到 2021 年,字节跳动正式实现了全场景应用编排和资源管理的标准化和统一化,目前联邦集群已管理近 50 万节点,即便面对超过 10 万的微服务数、每天 3 万多次的变更数,也能为业务提供持续、稳定的保障 。
多云下的海量算力实践
如今再看字节跳动的底层算力平台,它可以被分为分布式云原生平台和计算平台体系两部分 。

字节跳动的多云云原生实践之路

文章插图
其中分布式云原生平台汇集所有公有云集群、IDC 集群和汇聚集群(区域性 / 边缘集群),由 开源编排引擎 KubeAdmiral 统一管理 。通过分布式的集群编排,在不采取任何其他措施的情况下,字节跳动的常态运维水位可以从 85%-90% 提高到 95%,资源利用率提升非常显著 。
为了缓解运维复杂度问题,技术团队也开发了一个基于分布式编排引擎的统一调度器 Godel 。这是一个融合调度器,能管理在离线资源,调度在离线任务,同时它也针对大规模场景进行了很多性能上的优化 。
资源管控系统 Katalyst 采用 Kube.NETes Native 的方式进行重构,能提供更强的资源管理能力、调度能力、抽象能力和数据能力 。通过这些能力,技术团队可以更好地按级划分应用使用的资源,实施精细化的资源出让策略、多维度的资源隔离能力、多层级的负载驱逐策略,让整体混部变得更健壮 。
在这些核心中间件之上,是持续交付、服务网格、应用引擎等服务,这些服务可以识别资源在哪个部门、哪条业务线使用,再通过流量分发引擎调度,实现全局性的资源和流量管理 。
计算平台体系则是针对字节跳动内部存在的海量离线业务,这类业务存在资源离散的问题:各个云上的存储、各个机房的 HDFS、各个机器学习任务使用的 NAS……为了进行统一管理和使用,技术团队推出了大数据文件存储 CloudFS,提供对接多云对象存储能力,无论用户在哪里、用户想访问的数据在哪里,它都能提供本地缓存加速 。
离线业务存在的第二个问题是大数据作业无法享受云原生的好处:传统大数据引擎不是针对云原生设计,难以直接云原生部署,各计算引擎和任务需要进行深度改造才能支持原先在 YARN 上的各种特性,改造成本巨大 。基于此背景,字节跳动推出了基于云原生的 YARN 解决方案 —— Serverless YARN,它 100% 兼容 Hadoop YARN 协议, Hadoop 生态下的大数据作业无需修改即可透明迁移到云原生系统上,在线资源和离线资源间可以高效灵活转换、分时复用,集群整体资源利用率得到显著提升 。
在这些系统之上,我们又建设了一个关键模块——多数据中心离线统一资源湖 ResLake 。它作为一个融合了计算 + 存储 + 网络的巨大离线算力湖,方便批计算、流计算、AI 训练等任务接入,让技术团队可以进一步加强跨机房资源管控、加强热点数据治理、提升多集群多队列用户体验、提升多机房资源利用率 。按照最新数据,在 ResLake 的作用下,技术团队实现了超过 1.4 的作业加速比,队列跨机房流量优化也超过 30% 。
降低运维部署复杂度
对于在线业务,分布式云原生平台就变得至关重要了 。举个例子,直播业务之前在各种云上都开了 Kubernetes 资源,在分布式云原生平台上线后,新平台如果需要对这些一开始就游离在外的资源进行纳管,就必须具备对存量应用的无缝接管特性:不仅需要无改造、无运行影响地转移应用,也要能连接多基础设施 Kubernetes 集群,方便集群接入 。


推荐阅读