数字经济时代下,云计算已成为推动企业数字化转型的重要引擎。越来越多的企业开始借助云计算提高业务效率并减少运营成本。然而,云计算也面临着很多挑战与难题,比如云服务的选择、成本、安全性、可用性、扩展性等。如何在云时代,构建一个高性能、低成本、安全可靠的技术体系,是众多企业和开发者关注的重点话题。
在11月10日-24日举办的火山引擎公共云·城市分享会上,火山引擎以“字节跳动基础设施云化实践”为题,介绍了字节跳动的基础架构技术体系和大规模实践,以及字节跳动和火山引擎的“内外统一”研发体系,展示了字节跳动在云原生领域的探索和创新。这些技术体系,不仅支撑了字节跳动内部的海量业务和高峰流量,也为外部的客户和合作伙伴提供了云服务能力,共享云时代的红利。
以下为演讲实录:
字节跳动的基础架构技术体系
字节跳动生于云、长于云,是一家云原生公司,也是云时代的原住民。自2012年成立以来,字节跳动始终坚持拥抱云计算。为什么说字节跳动是一个云时代的原住民呢?因为字节跳动广泛使用过各种云服务。
字节跳动认为多云是一个必然的趋势,因为多云可以让企业更灵活,更自主,更高效。有人可能会问,云服务不是很贵吗?其实,如果你是一家初创企业,你需要考虑的不仅是云服务的费用,还有自己购买和维护服务器的成本,以及招聘和培训系统管理员的投入。相比之下,云服务可以让你节省大量的时间和金钱,只需动动鼠标,就可以在云上获取你需要的资源。而且,你不需要担心资金链的问题,你可以按需付费,根据业务的变化,随时调整资源的规模。这些都是火山引擎可以为你提供的服务。
图片
字节跳动的基础架构技术体系,是在过去十年的业务发展过程中逐步建立和完善的,它涵盖了从系统、存储、数据库等最基本的基础设施,到云服务器、云存储、云数据库、云原生计算等高层的服务,再到研发体系的各个方面。字节跳动的基础架构技术体系,具备实时推荐、实时计算等特征,能够支持海量的业务流量和高峰压力。其中,池化存储ByteStore、统一资源调度Godel等,是字节跳动的核心技术,它们与火山引擎相结合,形成了业务无感、资源融合、技术一体的“内外统一”研发体系,更好地承载了字节跳动内外的业务发展。
字节跳动基础架构核心技术体系 - 池化存储 ByteStore
图片
火山引擎的核心技术是基于ByteStore的池化存储存储,这种存储的好处是它提供了一个底层的存储机制,让上层可以根据自己的需求来设计存储策略。基于ByteStore,可以实现数据库、文件系统、对象存储等多种应用,统一存储在一个地方。火山引擎的设计初衷是通过这样一个底层的存储基础设施,来满足性能、成本、安全性等各方面的要求。
当然,这并不容易,火山引擎也参考了很多业界的实践和开源的方案,但是发现它们都存在各种各样的问题,比如调度问题、容错问题、一致性问题等,这些问题在开源的方案中都不能很好地解决。火山引擎的所有的投入和改进都是为了提高系统的可用性,让系统能够稳定地运行,支持字节跳动的各种业务,服务广大的用户。不管是底层的存储结构,还是上层的一致性协议,其实都是非常复杂的,没有经过大规模系统的考验,是无法满足业务的需求的。
池化存储 ByteStore这项技术的发展历程也是非常惊人的,它从2018年之前开始立项研发,到2020年,这套系统只有26台服务器,2000多个PD的使用空间,但是随着业务的增长,这个规模也迅速扩大,到了2023年8月,线上的服务器已经接近十万。这既是字节跳动业务带来的压力和挑战,也是火山引擎技术成熟的动力。正是因为字节跳动的海量业务和高峰流量,让火山引擎或者字节跳动的基础设施,能够展现出它们的价值和优势。
字节跳动基础架构核心技术体系 - 统一资源调度 Godel
图片
Godel是一个基于ByteStore存储架构的资源调度系统,可以实现离线和在线的混合调度,支持海量的业务和算力需求。Godel的设计参考了业界的先进经验,比如谷歌的Borg等,但是也克服了开源方案的诸多局限,比如K8S的可用性、扩展性等问题。
Godel的一个重要特点是,可以同时调度离线和在线的任务,而不会互相影响。这是一个非常困难的问题,很多公司都尝试过,但是效果不理想。而Godel可以做到完全的资源动态调度,根据业务的历史情况和预测,可以在30分钟内,把集团的算力弹出100万,或者在白天压缩到最小,实现真正的弹性。
Godel的另一个优势是,可以和火山引擎无缝对接,更好地承载字节跳动内外的业务发展。字节跳动拥有上百万台服务器,白天时间不需要大规模计算时,可以把这部分资源作为弹性资源,供给给客户。这样,客户就可以享受到更低的成本,更高的性能,更好的体验。当然,这里面还有很多挑战,比如资源的分配、优化、隔离等,这些都是Godel需要不断探索和解决的问题。
字节跳动基础架构核心技术体系 - 实时推荐特征&实时计算规模
字节跳动在计算机领域,经历了很多的探索和实践,也走过了很多的弯路,才能够形成今天的技术体系和能力。其中,实时推荐特征是一个典型的案例,它是字节跳动的核心业务之一,也是火山引擎的重要应用场景之一。实时推荐特征,是一个涵盖了从数据采集、处理、分析,到特征提取、存储、服务的完整的标签体系,可以根据用户的行为和偏好,实时地给用户推荐最合适的内容。
实时推荐特征的背后,是海量的数据和算力的支撑。实时推荐特征产生的实时计算规模十分庞大,有超过10万台服务器,有2万个CheckPoint作业数量,6万多个Flink作业,超过900万个Flink作业CPU总数,消息处理峰值超过120亿,这些都运行在字节跳动的原生基础设施上,是实时计算规模能力的体现。
字节跳动基础架构大规模实践
图片
字节上云的大规模实践也是很“痛苦”的,基本上很难找到完全无损的上云方案。但是我们能做的是把上云过程中对业务的干扰尽量降低,同时把这个过程尽可能变得无缝。上云业务的必要性是什么?我们对云提出了三个最基本的要求:
- 第一是高可用。概括来说,就是动态调度能力、容灾能力以及多机房切流。
- 第二是资源与成本。这个一般是上云最首先要考虑的问题。当前环境资源不足,难以满足业务高速发展的需求,资源问题已经变成业务发展和技术架构演进的主要瓶颈问题之一。应对资源的峰值利用需要堆更多资源,其余时间空闲造成业务成本高。
- 第三是对研发体验的要求。要尽可能让业务少配合、少改造,更快适配云上的资源。所以,从做云计算的第一天开始,火山引擎的所有云产品就遵守了“不做我的客户”原则,意思是我们提供的所有能力都是标准的、通用的。比如,MySQL数据库是标准的MySQL数据库,你从火山引擎官网上下载的MySQL跟字节自用的是一样的。
那么为什么要上云?首先,业务降本。上云可以优化人力资源,让研发专注于业务创新,而非基础运维和架构。IT降本的关键是实现资源的动态弹性分配,减轻业务的成本压力,提高资源的利用率。其次,业务提效。传统数据库利用率一般不应该超过10%,但是在云上的数据库在调度平台的加持下,利用率可以到非常高而不影响业务。此外,各家组件非常复杂,一个中型业务便涉及数据库、操作系统、IDC资源、中间件、各种调度平台,而人的能力是有限的,因此,需要云服务商实现统一管理并简化兼容及迭代策略。
上云之后可以解决哪些问题呢?上云后将统一由火山引擎提供服务。火山引擎提供标准公有云IaaS、PaaS组件,且保障资源量、SLA;每日峰值流量使用弹性云资源,不需要为空闲付出成本;账户间强资源隔离,通过火山引擎的资源调度能力,杜绝争抢问题。
通常我们建议业务在迁移过程中做流量回放,提前发现和解决问题,而不是等到上线后才发现。然而,哪怕我们做了那么多准备工作,在云下切换到云上的过程中仍然遇到了很多不可预知的问题。比如存储组件失误,业务监控劣化,上云同步组件BUG等。我们不是要给大家展示一个完美的火山引擎,而是要给大家提供一个足够好的系统,提供基础的业务能力,承诺不绑定、开放接口和业务共同成长。
上云的短期收益是显而易见的,主要体现在三个方面:
- 业务稳定性:火山引擎的业务架构设计避免了单点故障的风险,提高了系统的可靠性和可用性。同时,火山引擎售后保障体系支持得更及时,响应速度更快。
- 研发体验:火山引擎的开源组件保持了与线下一致的接口和功能,让研发人员无需做额外的适配和定制,即可享受到云上的灵活资源调拨和稳定可靠的开源环境。
- 性能收益:云上资源充足且隔离,容器平台和调度系统保证了业务之间的高效协作,降低了故障的发生概率。pod稳定性提升,单实例问题明显减少。
图片
长期收益是可以预估的,从基础设施的角度来看,主要体现在三个方面:
- 研发更专注于业务:云上组件快速迭代,不会出现线下的“孤儿产品”和版本不一致的问题,让研发人员始终使用最新的技术和功能。云上组件无需运维,让研发人员不需要关心底层组件和基础设施的事情,可以更专注于业务的开发和创新。
- 云上稳定性更好:云上产品提供了非常好的高可用保障,无论是单机房还是多机房,都可以实现灵活的故障转移和恢复。云上提供租户维度的管理,隔离性更好,资源调度更加灵活。云上产品可以实现细粒度的运维,可以针对单个容器进行监控、调试和优化,提高了运维的效率和质量。
- 长期综合成本下降:通过云上的弹性资源、组件能力、运维保障体系,可以节省20%左右的综合成本。
图片
字节跳动&火山引擎“内外统一”
字节云和火山引擎都是基于字节跳动的原生基础设施和技术体系,为内外部的业务提供云服务和云能力。字节云是一个整合了多个云平台的基础设施层,可以让业务无感地切换和使用不同的云资源,实现真正的多云。火山引擎则希望把字节跳动沉淀的技术和最佳实践,进行外溢输出,分享给更多的客户和合作伙伴,让他们也能够受益于云时代的红利。火山引擎秉承开放、共生、共赢的理念,希望所有客户都是云时代的原住民,用云原生的方式来重新构建技术体系,通过多云管理的能力让业务享受到弹性、高效、安全的云服务,实现真正的云原生。
图片
字节跳动的研发体系正在构建一个内部的PaaS平台,可以融合容器服务VKE、ECS等不同的资源,实现业务的无感切换。火山引擎是基于字节跳动的基础设施开发的云服务,与字节跳动的技术体系完全一致,可以为用户提供云上的最佳实践。我们的目标是建立一个统一的技术栈,通过火山引擎的接口,开放各种各样的能力。我们希望能够承接所有业务,包括自己的和外部的,随时提供海量的限制CPU的能力。
在火山引擎看来,云原生是一条刚刚开始的路,还有很多的探索和创新的空间。很多业务,只是把传统的基础设施搬到了云上,而没有充分利用云的特性和优势,导致了低效和高成本的问题。火山引擎希望能够通过自己的技术和平台,引领和推动云原生的发展,让业务能够以云原生的方式,重新考虑和构建自己的架构和服务,同时也希望能够和客户及合作伙伴,一起走在云原生的路上,共同探索和创造未来。