火山引擎全栈云原生架构实践

image.png

12 月 2 日,火山引擎「新云·共未来」云产品发布会在上海成功召开。火山引擎云原生产品负责人邓德源带来了主题为《火山引擎全栈云原生架构实践》的分享

image.png

以下为演讲正文:

大家好,我是火山引擎云原生产品负责人邓德源,今天非常荣幸能够给大家带来云原生的技术分享。接下来我将为大家分享我们的云原生架构如何为字节跳动的业务提供安全、稳定、连续的服务,并通过火山引擎云原生实践和案例解读,分享我们对云原生未来发展的思考。

 

字节跳动云原生发展历程

 

字节跳动的云原生发展历程大致经历了 4 个阶段。

第一阶段是 2016-2017 年间,开始尝试实践 Docker & Kubernetes。

从 2016 年开始,字节跳动启动了Kubernetes v1.4 的开发测试上线,并不断完善周边基础设施建设,如基于 Consul 实现服务发现等。

第二阶段是 2017-2018 年间,公司业务全面实现了微服务化,为后续全面云原生化奠定了基础。

在这一阶段,我们基于微服务化的痛点,启动了对 Service Mesh 的调研和实现,主要场景是安全业务推广;同期,我们也不断加强云原生链路观测能力,实现了监控日志一体化分析平台,初步解决了大规模服务下的服务问题诊断。

第三阶段 2019-2020 年,字节跳动实现了核心业务的云原生化。基于前一阶段的微服务化成果,团队逐步启动了核心业务的云原生化,并获得了 3 个标志性里程碑:

• 基于容器化调度平台,实现了在离线业务的统一管理和调度,将容器平台作为业务统一入口,并且实现了资源利用率的大范围提高;

• 完成了业务 Mesh 化的全覆盖,同时非 Mesh 化业务也能够通过服务框架的形式共存;

• 函数计算全面上量,支持大规模消费类场景,并涵盖了新兴场景,如云边一体化。

第四阶段是 2021 年,字节跳动所有业务均已经实现了全面云原生化,并且基于云原生基础设施,成功支持了春晚活动,充分验证了其稳定性和弹性能力。

今年年初,为了优化存储的运维效率,同时释放计算资源,我们开启了数据库、缓存等中间件的改造,系统全面走向了整合化。基于平台化的基础设施,我们也在深度地向智能化、实时化、分离化等方向全面演进。

image.png

截止目前,字节跳动已经建设了完善的云原生基础设施:拥有 200 多个生产集群,共计 50 万节点,最大集群节点数上万,容器数超过 1000 万;有 10 万多在线微服务,平均每日变更数达 2 万次,离线任务数超过 1.4 亿。

这个时候,我们开始问自己一些问题:字节跳动的理念是独一无二的吗?我们的实践是否是不可复制的?我们丰富的云原生实践,如何能够普惠万千企业?

 

火山引擎云原生架构设计理念与实践

 

根据国家“十四五”规划,到 2025 年,国内数字经济占比将达到 GDP 的 10%,企业新增生产级云原生应用在新应用的占比将从 2020 年的 10% 增加到 60%。数字经济与实体经济的融合已经成为不可逆转的趋势。

那么,作为近年来增速最快的企业之一,字节跳动的云原生架构体系是如何全面、有机地跟随业务的快速发展的?这离不开我们设计基础架构的核心理念和原则。

image.png

基础设施:平台化 → 智能化。平台化从另一个角度看即是服务化,当基础设施平台化且有聚集效应时,企业才有足够的体量往下推演;同时随着数据和经验的积累,企业也能进一步衍生出智能化能力,包括智能调度、智能运维等。

系统架构:垂直化 → 整合化。基于业务发展的速度,我们针对某些场景,例如推荐广告搜索,实现了相对垂直的管控能力;同时,我们的在线和离线能够整合,批处理和流处理能够一体化,异构资源能够做到统一调度。从垂直到整合,这是一个逐步收拢的过程。

基础组件:规模化 → 实时化。规模化推动的是以量取胜、实时化推动的是以质取胜。规模化阶段业务不断上量,资源成倍增加,而实时化的演进迫使我们去做细粒度的优化,例如我们在软硬结合、内存计算方向的探索,在降本提效上都有显著的效果。

研发体系:敏捷化 → 现代化。我们不仅提倡敏捷化快速交付的能力,还不断实践现代化应用的构建。所谓现代化,一方面意味着应用构建更深入地走向移动化和低代码化,另一方面则是在应用的容灾和迁移能力上能够更深层地做到无感知。

业务触点:中心化 → 分离化。这是一个逐步建设多云、混合云、云端一体化能力的过程,我们所服务的业务遍布各地,这些业务所服务的客户同样遍布各地,我们期望基础架构能够在计算、存储、数据方面都具备分布式的能力,支持业务提供更广泛的服务。

事实证明,云原生为上述理念提供了一条最佳的实践路径。云原生强调自动化、高弹性、可扩展,同时提供了一整套围绕这个思想的工具链和规范。

而作为字节跳动旗下的企业级技术服务平台,火山引擎抽象了字节跳动在硬件、存储、安全、业务、开发、运维等多个场景下的云原生实践思想,推出了包含上层解决方案和中层基础产品服务的云原生全系产品。

火山引擎云原生产品与解决方案

火山引擎云原生产品重点围绕 5 个方向完善产品矩阵,分别是云原生系统、开发态、交付态、运行态以及安全运维。

image.png

其中,「云原生系统」包含最基础的容器服务和镜像仓库两大核心产品,沉淀了字节跳动数年来建设容器平台的经验,除基本应用托管能力外,还提供高稳定、高性能、自运维等能力,旨在为企业提供最坚实的底座。火山引擎的上层产品大多都围绕这两款产品构建,例如函数服务、持续交付、应用观测、湖仓一体的大数据分析服务、机器学习平台。许多内部业务系统,如抖音电商、商业化开放平台,也都基于这款容器产品构建其业务系统。

基于应用生命周期拆解,我们新划分了「开发、交付和运行态」,其核心是解决应用现代化过程中所遇到的问题。首次发布的产品体系可以支撑企业业务架构升级以及打通重点场景的原子产品,其中既包含代码仓库、应用平台这类可以支撑应用快速开发的产品,也包含持续交付、制品仓库等提升敏捷化和统一交付能力的产品,也有服务网格、应用观测、应用韧性这类可以从流量、监控、演练等方面保障业务平稳运行的产品。

最后,在「安全与运维」层面,火山引擎重点构建了以云堡垒机和云命令行为主的安全运维通道,以及以 IaC 为核心的自动化运维能力,结合应用全生命周期托管能力,提供安全且自动化的云原生体验。

解决方案主要包括「业务架构升级」「重点场景使能」两方面。其中,「业务架构升级」主要针对业务的多云部署、新一代的微服务架构以及面向下一代的无服务器架构展开。「重点场景使能」则是输出字节跳动快速发展的核心路径:当前,大多数企业现在已经进入转型的深水区,业务和架构复杂性并非单款产品所能解决的;相较于产品能力零散的输出,所有产品力的构建都围绕着核心场景完成。

 

云原生的基础底座:容器

 

此次火山引擎推出的云原生容器系统类产品包括容器服务和镜像仓库,提供最基础的容器化平台,主要有四个特点:

image.png

按需弹性:容器服务底层基于弹性计算和弹性容器两类计算引擎,其中弹性容器主打弹性场景,根据实测数据,它可以支持容器的秒级启动,30 秒满足近万核的扩容需求。

• 系统层采用精简 Hypervisor 和 Kernel,裁剪掉多余功能,仅保留核心能力,兼容性得到了内部业务的广泛验证;

• 管控层针对核心创建链路做异步和缓存,无需每次额外申请 ENI 和 EBS 资源;

• 采用快照和按需加载的能力,将镜像加载速度降低到毫秒内。

性能优化:容器和虚拟机运行时全面基于自研网卡和自研 vSwitch,相比开源方案,火山引擎软硬一体化的方案在PPS、延迟和带宽具有近 2 到 3 倍的提升,单机容器密度近千。存储 IO 上采用自研协议栈,深度优化数据拷贝路径,实现用户态协议和全链路零拷贝,性能相对原生 IO 提升了 5 倍。

安全可靠:VKE 支持同一集群同时运行 runC 和 runV 容器,用户可以按照隔离需求来选择不同的运行时。Kubernetes 完全由平台托管,默认采用 CIS 等安全规范,由平台确保 Kubernetes 的安全和运维,免除用户管理成本。

随处可及:在设计之初,我们就意识到了系统可扩展能力的重要性,确定了同源架构的路线。一方面通过同一套基础底座实现随处部署,另外通过同一套产品能力提供无缝的体验。接口上做到 Kubernetes 100% 的兼容,已经使用 Kubernetes 的用户可以实现无缝迁移。

 

云原生的中坚力量:服务治理

 

为保障云原生应用全生命周期的敏捷和稳定,字节跳动围绕研发效率、运行效率和稳定性三个方面,实现了一系列平台和服务来保障服务治理能力的有效落地,解决了易用性和快速迭代的问题、性能和成本的问题,并保障了观测、安全和运行时的稳定。

在本次云产品发布会上,我们主要推出 API 网关、服务网格、应用观测服务、应用韧性服务和持续交付。下图介绍了每个产品的原子能力,这里我围绕几个实际的场景来介绍它们所服务的一些场景。

image.png

敏捷迭代:随着企业业务、规模的不断发展扩张,项目复杂度提高,研发进度变慢和交付质量下降不可避免。结合持续交付、应用观测服务和容器服务,火山引擎可以帮助企业实现可灰度、可观测、可回滚的能力:通过持续交付完成代码上线,通过应用观测实现实时监控,通过容器服务完成快速回滚,所有操作一气呵成。此外,这些流程都可以通过应用韧性服务来进行实时的演练。

零信任网络:零信任假设无论在网络边界内部还是外部,都不存在任何隐含的信任。换句话说,任何地方都需要显式认证,并使用最小权限原则来限制对资源的访问。因为有海外团队在业务合规经验上的积累和交流,我们对零信任有非常深度的实践。最初我们实现了 JWT Token 之间任务互访,现在已逐渐迁移到以云原生技术 SPIFFE 为标准,同时以 API 网关、服务网格和容器服务作为基础实现的方案。基于这些实践,火山引擎可以为企业提供专家级安全保障。

全链路监控:微服务架构的复杂性为运维工作带来了很大挑战。为了实现对复杂微服务的监控,火山引擎在微服务中添加埋点,可采集指标、日志、分布式链路等多种数据,实现对业务立体化的监控。

全场景接入:我们在服务治理上的一个亮点是针对不同的场景实现场景化的接入。服务网格在字节跳动的第一个落地场景是安全,通过为每个业务配置安全 Sidecar 的模式,我们实现了对业务风险控制的能力。基于此,我们演化出通用 Sidecar 模式,接入了数据库 DB Mesh、A/B 测试,所有的接入对业务而言都无感知、无侵入。

 

云原生的极致形态:Serverless

 

除了容器系统和服务治理两类产品体系,围绕「业务架构升级」,火山引擎也推出了一些 Serverless 和多云产品。它们是火山引擎正在经历且未来演进的方向。

 

image.png

Serverless 的价值是什么?云的本质就是规模化经济,通过按需付费、弹性伸缩和免运维来释放企业的生产力,但现在云的形态做得还不够透彻。我们按「资源」需求付费,而不是「业务」需求付费;我们的弹性还处在准实时阶段,而且很多业务因为架构或者周边生态问题还无法享受到弹性能力;最后在运维上,云仅免去了物理层运维,但复杂度上移到了虚拟化层。如果能在这三个方面做到极致,企业的成本和可用性可以得到长足的优化。

Serverless 不是简单的工具或框架,而是一种软件架构思想和方法,涉及面比较广,但我们认为这种思想下的软件架构将是云原生走向极致的一种形态。火山引擎目前已经是 Serverless 的深度实践者,我们走向 Serverless 总共有 4 个大目标:业务 Serverless 化、开发 Serverless 化、资源Serverless 化、运维 Serverless 化。

• 业务 Serverless 化:99% 以上业务负载 Serverless 化,包括微服务、函数、定时任务、计算类任务、机器学习及 AI 任务。

• 开发 Serverless 化:Serverless 形态对开发者而言缺乏友好型,这里我们以 CloudIDE、FaaS Native、Remote Debuging 等能力来服务开发者,很大程度上缓解了开发排障效率低的问题。

• 资源 Serverless 化:如前所述,目前全部负载基于容器服务和弹性容器,并开放混合调度能力,对平台而言资源利用最大化,对我们上层客户而言成本达到了最优化。

• 运维 Serverless 化:Serverless 带来的一个显而易见的好处是用户免运维,无需管理基础设施;但从另外一个角度来看,Serverless 规范化架构和弹性能力,更能进一步确保系统高可用性。

在 Serverless 层面,火山引擎目前主要围绕「应用平台」和「函数服务」进行能力输出。其中应用平台本质是一套基于容器服务的应用托管平台,支持更多高级的能力比如全链路灰度部署、单 AZ、多 AZ 部署策略等;火山引擎函数服务则已经支持大量应用场景,例如小程序开发、评论离线流、游戏技术中台、红包雨活动、飞书在线面试等。

多云原生:应用与资源的多云化

上午主会场提到几个数据,92% 的企业都会使用多云,未来一定是多云的时代。目前企业实践多云的路径依然很漫长,而部分已经“采用”多云的企业,内部也俨然形成了一种新的「烟囱式」建设形态。

当我们谈多云的时候,很多时候大家都会想到 CMP,就是云管平台:用一个管理软件将多个云的资源层纳管到一起,再加上一些权限管理、账号对接等功能。这只是从运维管理基础云资源的角度来纳管,再极端一点,只是将资源显示在一个控制面板上。云管并不是真正意义上的多云:一方面各个云的接口差异很大,难以适配;另一方面,云服务很多,云管要接入的服务范围很难框定。

火山引擎秉持着「开放共享的云」的理念,深度实践了多云基础设施。我们推出的多云产品的核心是将容器服务集群管理的能力延伸到本地数据中心或云服务商 IaaS 之上,同时支持纳管自建集群,实现面向应用的多云容器平台统一控制平面。

image.png

VKE 向外延伸的能力我们统称为 VKE Anywhere,支持用户导入现有 Kubernetes 集群——无论是来自 IDC 或公有云资源自建集群,还是通过云托管的集群—— 我们都能够一并支持。VKE Anywhere 同时支持托管集群,即通过 VKE Anywhere 来创建 Kubernetes 集群,底层可基于不同类型的环境。VKE Anywhere 与 VKE 完全同源同构,对上保持完全一致的 API 结构,上层产品无需改造即可接入 VKE Anywhere,可以根据客户场景实现产品的灵活封装。本次发布我们以应用开发交付为主,上层引入包括镜像仓库、持续交付、服务网格、应用观测服务等产品,同时还引入了应用市场支持企业内部应用快速分发。

多云控制面支持多集群联邦、全局服务发现和负载均衡等全局管控能力,可以根据用户需求部署在任意数据中心,通过专线或者 VPN 方式互联。火山引擎内部对多云的实践效果显著,我们当前已经创建了 3 个联邦集群,底层纳管了 10+ Kubernetes 集群,共支持 100k+ 节点。

 

结语

 

火山引擎的发展离不开客户的支持。

目前国信证券的金太阳服务证券交易应用、资产运营管理业务、投行/风控/开户等业务,均运行在火山引擎的容器云平台上。我们的容器平台核心能力支撑了国信证券基础设施的平台化:统一资源管理方面,我们为其建设了资源审批到上线的全部流程;交易应用基于容器服务全托管,实现了自愈、弹性伸缩、快速回滚等能力;平台系统对接上,通过一些列扩展点,打通了核心系统的对接。

在 2021 年中国信息通信研究院发布的 DevOps 标准持续交付第十二批评估结果中,国信证券金太阳资讯中台顺利通过《研发运营一体化(DevOps)能力成熟度模型》持续交付 3 级评估,标志着其持续交付能力达到国内领先水平。同时,国信证券也是全国第三家通过持续交付 3 级评估的券商。

未来我们也将继续努力,打磨更加优秀的产品,将更多的内部实践输出到客户手上,谢谢大家。

(0)
上一篇 2021年12月7日 11:26
下一篇 2021年12月7日 11:46