然而,如何让不同的云平台之间实现业务系统的无缝对接?如何将资源利用率发挥到极致?为了防止出现“信息孤岛”等问题,云原生的实践者们不断探索多云环境下的解决方案。
在11月10日-24日举办的“乘云·向未来”火山引擎公共云·城市分享会上,火山引擎以“字节跳动多云演进及降本实践”为题,介绍分享了字节跳动多云算力架构和火山引擎云原生技术,以及如何解决多云环境下的部署、运维、数据和成本等挑战。
以下为演讲实录:
字节跳动为什么选择多云
火山引擎技术脱胎于字节跳动的技术,同时融入到字节业务中。伴随字节业务的发展,火山引擎的技术也在不断发展进步。
谈到多云化,大家会谈到字节为什么选择多云?概括起来讲是三个原因。
第一是业务性方面的诉求。2017—2018年,抖音快速发展从1万DAU增长到1亿DAU,有着极大的资源需求,而任何单朵云都不能在短时间供应,这个时候选择多云是业务发展不可回避的问题。同时,不同的业务有不同的硬件和算力需求,而不同的云服务商也有不同的算力供给。企业在选择云服务时,会考虑稀缺资源和业务支撑的因素。直播电商近年来风靡,需要分布式资源的支撑。如果自建IDC和资源,业务上会耗时较长,随着业务发展,企业采购云资源是必要的。
第二个重要因素就是经济性。具有大量互联网化业务的公司,如果持有大量资源,会造成一定的经济损失,所以会选择云服务进行支撑。还有,不同资源的成本不同,所以不同公司也会根据自己的需求,选择合适的云服务商。
第三个重要因素就是安全性。数据主权、安全合规、防绑定等问题,会导致企业在业务发展中不自觉地选择多家云服务商,形成多云的现象。
由于上述问题的存在,字节跳动的技术团队坚定地选择了多云作为基础架构发展的主要路径。
字节多云下的云原生之路
那么在多云情况之下,如何用好云呢?这是一个非常关键的命题。在谈如何用好多云之前,先回顾一下字节跳动多云下的云原生之路。
2016年,由于字节跳动不同业务使用了不同的自管资源,导致出现了资源浪费、管理开发、运维困难、容量口径不一致等问题,影响了业务的稳定性和效率。伴随头条的快速增长,字节跳动启动了云建设。
2017年,互联网竞争格局加剧,我们需要大量开发人员快速开发和迭代系统,这时候就要招聘大量的开发人员。但是新招聘的开发人员不熟悉公司的开发体系,需要培训和适应。如何让开发人员用自己的原生熟悉的方式,快速进入到业务的开发过程中,从而对业务的发展起到助力作用,这是不得不解决的问题。由于各个团队技能不一样,开发出来的业务系统也会对线上的互联互通相应的管理治理造成一些挑战,所以需要把这些技术和经验沉淀下来。于是,我们采用了服务网格的架构,统一监控告警的方式,支持多种语言适配服务网格,帮助不同业务开发人员快速进入业务迭代中去,把服务治理能力、稳定性治理能力、流量调动能力等公共能力沉淀到底层平台,赋能平台的发展。
我们在2019年做了很多市场活动,比如央视春晚红包,需要大量的云资源。我们的推广业务原来是大颗粒的,要适配和调优不同的云,成本很高。这种局面之下,对于推广大颗粒的业务而言,要去适配不同云的资源,又产生了适配和调优成本。在活动过程中我们发现,有一些推广侧的业务,可以进行一定程度的降级,额外节约出来很多资源,更好地支撑对应活动的展开。如果还像过往方式展开,成本是非常不经济的,因此需要提高云资源弹性,更敏捷地响应活动需求,从而降低资源成本。
2020年,随着推广业务完成演进,通过把离线在线混合在一起,提高了使用率。我们对存储进行了大范围的改造,推高了整体的运行效率。
业务发展过程中,由于资源需求很大,我们经常要在多云之间切换,增加了运维成本。云原生应用多云的能力帮助我们节省时间,快速适配不同的云。目前,抖音和头条能够实现1周左右快速适配不同的云,快速解决云的切换,这对业务来说是非常有帮助的。
2021年,从资源多云到应用多云,字节跳动正式实现了全场景应用编排和资源管理的标准化和统一化。
字节今天拥有500多个k8s生产集群,其联邦管理节点数超过21万,单集群规模达到20000以上,微服务数超过10万级别。每天,生产系统有3万次服务更新,这为迭代和创新提供了强大的支撑,同时保证了业务的稳定性。此外,离线任务容器数高达240M+,通过云原生的混合部署,有效地节省了企业的资源成本。
多云面临的四大挑战
多云发展的整个过程,并不是一帆风顺的,需要解决各个方面的问题。总结来讲,是以下四个点:
- 部署/运维复杂度:应用/服务多云部署方式,容器、主机、云上服务等不同类型的部署方式都额外增加了部署和运维的难度
- 打通/互操作性:网络打通、身份/权限打通、运维打通、数据访问打通、流量管理,多云条件下,带来互操作性的复杂度
- 数据管理/合规难度:数据离散分布之后数据资产的管理难度加大,数据合规挑战加大、数据泄漏风险和追踪难度加大
- 成本控制复杂度:业务、成本、资产的管理难度
字节多云算力架构
从字节跳动业务部署情况来看,整体形成了「多云管控+多云多活」的模式。在本地,采用多地方部署的方式,通过底层的存储技术,打通了本地多地方之间的差异性;通过网络层面的专线,实现了近距离的一体性。这样,不同的业务单元可以灵活地分配在不同的机房。
另外,通过多云、远程等方式,为业务提供了灵活的容灾能力。为了保持多云层面的稳定性,没有采用多机房的方式。当某个国家或省份的业务出现问题时,可以在不同的机房进行流量调配,保证业务的连续性。
在数据安全可回溯性方面,我们采取了以下措施:通过整体数据双向同步网关,保证了可追溯性和数据外出的透明性;通过多控制面,保证了整体的容灾性;通过超级控制面,确保了一致性体验。这样,不同地域的开发人员可以在同一个平台上进行作业,提高了业务开发的效率和稳健性。
今天整个字节跳动多云算力架构分为两大算力平台:一是分布式云原生平台,它将不同地域的公有云、信息群和地域性的资源统一纳管;二是离线实时计算平台,它有不同类型的存储服务,通过大数据加速技术,将不同的数据关联起来,并为上层的各种计算类型提供统一的视图,使得上层的各个系统变得更加简单。
然而,这种架构依然呈现出两种计算类型或体系的结构,如何让资源利用率更高呢?为了解决这个问题,字节跳动采用了以下两个策略:一是云原生离线调度Serverless Yarn,它可以简单地适配各种开源的离线调度工具,无需对业务进行改造,就可以接入在线的统一资源管理。通过这种方式,成功将离线和在线的资源融合在一起,混合运营在一起。二是离在线混部调度器Katalyst,它可以感知离在线的差异,提高云原生的调度能力,提升整体的资源利用率。此外,还有离在线资源管理器,它是一种云原生的资源管理工具,可以在运行过程中,精确地控制资源的使用,保证业务的稳健性。
降低运维部署以及离线资源管理复杂度
如果更进一步深入看,在分布式云原生平台上,为了支撑在线业务,提供了以下几种能力:
1、统一资源管理能力。这里包括多集群纳管能力,它可以连接多地域、多基础设施之上的集群,无缝接管业务在多种云上的存量集群,还有统一资源监管的能力,通过统一的控制链和界面,方便管理和调度资源。
2、统一应用管理。统一的应用分发能力可以根据用户的策略、集群的特征、业务的层面和依赖关系,进行多样化的分发策略,让业务无需关心底层的细节。另外,为了连接不同云上的集群,还需要完全兼容现有的生态。如果在历史和业务层面上存在不兼容的问题,就会在接入过程中遇到挑战。因此,接管应用体系之后,还要提供更强的运维和治理能力。
3、统一应用观测,通过对各种系统的集群层面上的统一收集,可以进行更强的感知。一旦遇到问题,除了集群本身具备的自我恢复能力,还可以通过智能化手段,让运维人员及时进行处理。
4、统一治理。为了解决地域性的稳定性问题,我们也提供了一些统一的授权管控、服务追踪、流量治理等能力,可以灵活地调配资源,保证业务的稳健运行。
另外,统一资源湖偏向于离线的算力平台。我们对数据的使用做了一些图层面上的整合,我们发现,在多云的情况下,如果一个公司是深度使用数据的,其90%以上的数据都是相互关联的。这就给单业务层面上的单元化部署带来了很大的挑战。业务无法给出准确的答案,如何摆放资源,如何处理相应的关系。为了解决这个问题,很多方案是把离线的算力连成一片,但这对多机房层面上的算力调度和存储远程拉取带来了挑战,同时又会造成专线无限制的被使用。
字节跳动内部采用资源湖的方式,通过数据驱动的理念和技术工具,可以做到智能化的感知,根据需要甚至提前进行资源的搬迁。比如,通过把A机房的资源搬到B机房,就可以快速地加速业务运行。所有这些搬迁动作都是自动化,都是通过资源湖和基于云原生的就近计算技术,完成自动化的搬迁能力。通过这种方式,把离线计算速度提升了1.3—1.4倍,节约了30%—60%带宽。
此外,还有一个非常重要的能力,就是对离线带宽的调度。因为离线带宽有限,如果不进行调度,就会影响业务的稳定性。这就是离线算力平台带给业务和上层计算引擎的好处。通过资源湖进行统一管理,通过ServerlessYARN解决云原生的问题,我们可以实现离线算力平台的高效运行。
降本之提升资源利用率
解决离在线问题的一个有效手段是靠隔离,那么如何进行更好地隔离,如何进行更加精准地隔离?这是一个很大的挑战。
在字节跳动内部,我们根据作业的延时敏感程度和业务的不同,进行两个维度的划分,实现分级化作业管理。根据CPU、IO和网络的不同,选择不同的隔离方案,有经验型的,也有业务自配型的,还有机器学习出来的适配模型。通过把隔离手段精准地应用到对应的业务上,实现离在线的完美结合,保证资源的充分利用,不影响在线的稳定性。这是字节跳动的实践。
今天,我们实现了几十万台服务器的常态化在离线混部,这套技术在多云和多集群下带来了很多好处。但是,实现这一过程并不容易,需要很多的历程和技术开发工作。
我们根据技术难度和落地难度,总结了一些常态下可以使用的手段,包括:一是应用画像的透视,可以对应用的特征和需求进行分析;二是规格的智能推荐,可以避免资源的浪费和不足;三是高低峰的分配,可以根据业务的波动进行调整;四是针对活动的离在线能力,可以应对突发的情况。这些资源效能能力,都是原子能力,可以被应用任意组合使用,降低资源使用成本。
多云的未来发展趋势
在回顾字节跳动的发展历程后,我们再来看看多云层面上的未来趋势。我们发现,有以下几个方面的变化:一是随着AI技术的发展,特殊架构的算力,如GPU、FPGA等崛起了,这就给管理这些算力带来了额外的挑战,这是多云层面上必须考虑和面对的问题;二是如何把这些算力更精准地匹配到不同的业务上,这也是一个挑战。我们需要对算力的效率和业务之间的匹配,有更精准的感知;三是由于不同云和地域带来的成本差异,我们需要对这部分进行感知;四是不同业务对于延迟层面的要求不同,我们需要对业务的体验进行感知。这些都会造成整个分布式云和多云层面,在未来发展上,需要更加精准的自适应和智能感知的能力,这是在资源和调度上呈现出来的趋势。
此外,我们还介绍了字节跳动在数据合规方面的一些手段,以及一些更加智能化的手段。最近几年,隐私增强的计算,如联邦学习、数据安全等,实现了跨云、跨用户的数据交互和计算,而不是数据交换。这就防止了数据的泄露,提升了合规和安全性。
最后,随着多云化的不可避免的趋势,管理、使用、运营都会带来更多的挑战。整个应用层面,也必然向多云化转变。对于各家厂商和用户而言,需要更强的针对多云的平台,从而能够提升他们的体验和效率。这样的平台,必须是开放和标准的,才能够实现互联互通和多云协同。