9月16日,Distributed Cloud|2021全球分布式云大会·上海站隆重召开。在全球分布式云大会不懈布道下,云计算行业对分布式云的关注度愈发高涨,以全球分布式云联盟成员为代表,涌现出了大量分布式云技术和实践成果,为分布式云计算发展夯实了基础。

2021全球分布式云大会为分布式云计算发展再添强大推力,本次大会共设有分布式云主题报告会、边缘云论坛、云原生专题论坛、分布式数据库论坛四大论坛,围绕分布式云、边缘算力、云原生、分布式架构等技术与实践展开。全球分布式云联盟联合阿里云、腾讯云、Google Cloud、中兴通讯、京东云、安迈云、网心科技等国内外分布式云顶尖技术服务商,共话分布式云创新新趋势,共谋云计算变革新未来,共享分布式云计算新红利!

在9月16日下午召开的云原生专题论坛上,百度网盘资深研发工程师 郑兴发表了题为《百度网盘服务与资源治理实践》的主题演讲。

打开网易新闻 查看更多图片

百度网盘云原生混部背景介绍

郑兴介绍到,百度网盘是一款国民级的产品,在2012年上线以来,连续九年为超过7亿用户提供稳定、安全的个人云存储服务,用户存储总量超过1000亿GB,人均存储量超过200GB,获得ISO/IEC 27001 和ISO/IEC 27018 两项信息安全认证。

他表示,网盘功能通过不断推陈出新,在工作、生活、安全、企业等方面提供高可靠的服务,通过电脑、手机、电视多种终端场景的覆盖和互联,让用户能够随时随地存取消费数据,实现个人与数据服务的互联互通。

对于网盘用户规模和存储数据量快速增长、功能不断加强迭代的情况,网盘急需大量的计算存储、缓存等资源,满足业务发展带来的计算需求。

郑兴表示,若单独购买机器或者云产品满足需求会带来高额的成本,基于此,百度网盘将目光投向数据存储机器。但是要使用存储机器部署计算服务,首先需要确保计算服务不会影响到存储质量。

最后,还是考虑使用公司现有的平台,通过容器托管服务的运行环境,并且做到容器与容器之间、容器与机器之间的资源隔离,保障数据存储服务的运行安全。

郑兴表示,为了更好地使用网盘可用的特性,百度网盘在2016年,决定自研平台,通过自研平台对网盘业务进行接入。

网盘服务与资源治理实践

郑兴通过对平台中服务管理、资源管理和系统高可用保障三个部分的描述来介绍网盘的云原生建设经验。

服务管理:服务描述和分级策略

郑兴通过服务描述和分级策略介绍服务管理的思路。他认为,作为一个业务团队,维持服务质量稳定是最重要的。根据服务的优先级,在执行保障预案的时候会有不同的方案和执行顺序。

对此,他首先介绍了网盘的服务分级策略。

他介绍道,管理网盘的服务时,对资源需求、服务容量和计算需求等6种特殊定义,以及服务异常后的影响程度,将服务分为六个级别。最重要的是P0级,主要是宿主机服务,P1-P3是根据接口重要度进行划分的服务,P4、P5为离线服务,同时P1-P4服务使用的是能够稳定运行的容器,P5使用的容器资源不作任何稳定性承诺。

资源管理:挖掘可用资源,构建混部资源池视图

郑兴通过介绍挖掘可用资源的方法和提高资源利用率的手段、资源分配策略、资源审计策略对资源管理的内容进行讲解。

郑兴表示,对于挖掘可用资源,如何将可用资源的目光打到存储机器上,而最终资源构成又是什么样的?它又是如何使用的呢?

首先在机器构成方面,我们将历史的、存量的,以物理机方式交互给业务线的空闲机器挖掘出来,和存储机器一起组成混部机器池,并对CPU进行 Quota 归一化的操作,解决CPU异构问题。

第二步,在资源层面,我们将存储服务、在线服务、离线服务、缓存服务,以宿主机部署和容器化部署共存的方式进行混合部署。部署容器服务时,通过实时地计算宿主机服务,过去一段时间资源使用最高峰进行资源预留,将剩下的闲置资源拿来使用。

另外容器服务在实际运行时也不会完全用满所申请的资源,为解决网盘巨大的计算资源缺口,百度网盘对容器进行资源预留之后,将空闲资源再回收利用。

通过以上对宿主机和容器内空闲资源的超发利用,进行混合部署后,仍然还有一些资源可以被挖掘,以提高整机的资源利用率和用来满足网盘的计算需求。

手段一:错峰计算:提高机器低峰期利用率

郑兴介绍道,通过错峰计算进行机器级别的资源复用,网盘通过自研控制组件,将错峰粒度细化到全天24小时实时,网盘通过软限、不占用整机可分配资源额度的方式,将容器部署到节点上。

通过以上的方式,网盘实现对错峰利用的精力控制,更大化利用错峰的优势,提升利用率。

手段二:分时复用:复用容器,荡平资源山谷

郑兴表示,云厂商分时复用空闲机器的资源,网盘利用空闲容器的资源。 在部署时,将可以复用的两个服务部署到一个容器内,由控制组件通过远程配置,动态决定拉起其中一个服务,需要切换时,通过修改配置,可以直接快速的完成两个配置的切换。

与错峰计算不稳定的资源相比,分时复用的资源是稳定的,资源可以一直存在,不会因外界的条件而收缩。

网盘通过使用上述两种对机器和容器资源复用的方式,避免了很多复用方案中,通过频繁的切换部署导致的带宽费用和对代码托管服务,机器IO等带来的集中压力。

同时,在复用时,被复用的资源和代码是始终存在的,在请求量突然暴涨时,能够做到实时快速还原,让服务的安全性不会受到影响。

手段三:跨机房计算:利用带宽换空间,复用空闲机房,解决数据存放机房计算资源不足

郑兴介绍道,对跨机房资源调度时,按任务流量来源,在线域流量调度,实时调用其他机房的容器,完成响应。离线域任务发送时,有两个控制入口,通过Proxy控制任务发放,最后由Worker实现被动式跨机房数据计算。

资源管理:资源分配合理,利用率呈正态分布(事前)

郑兴表示,网盘将资源分配分为两个阶段:

(1)资源预选阶段。

通过服务描述的特性,确定服务的主导资源,通过亲和性和非亲和性满足服务部署时对资源需求的约束,以及对独占资源和服务互斥的需求。

(2)上一阶段挑选出的可部署范围中,通过剩余机器进行分组、打分的方式,过滤掉特殊资源之后,完成目标部署机器的挑选,尽可能解决资源碎片问题。

资源管理:资源审计,使用合理,提高安全性(事后)

郑兴介绍道,通过分类策略,将容器创建出来之后,资源也不是一成不变的,需要在事后进行资源审计,使资源分布和使用更合理。

机器层面,应对宿主机资源需求变化,需要实时调高对资源的预留值,并且根据过去一段时间的使用缓慢降低,保障宿主机的安全性。

服务层面,由于流量或自身功能迭代的变化,对资源的需求也与过去会有不同,通过审计可以发现使用率不满足网盘要求的服务,需要进行资源回收避免浪费或进行容量补充。

通过审计可以观察到服务的资源瓶颈,进行套餐调整或发现到服务的资源是否异常,比如说内存泄露等等,让服务提早完成修复。

系统层面,通过资源腾挪重新调度容器的部署节点,整合资源碎片,并减少稀缺资源被非需服务占用现象。

系统稳定性:服务容灾架构,多机房部署、跨地域容灾

郑兴通过服务容灾架构、容量安全、异常自动定位三个方面来介绍大规模超发场景下如何保证系统高可用。

对于容灾部署架构,从系统架构层面看,网盘采用多地域、多可用区均衡部署的方式完成搭建。同时,多可用区之间互为备份,流量隔离,可用区内的节点,流量均匀分布。

而对于核心链路的流量,还会额外准备不同地域的灾备机房,在常态时,灾备机房完全不引入流量,通过分时复用的方式,完成服务的部署,在整个区域不可用时,通过切换配置,迅速启用灾备的容器,通过在百度 BFE 和网盘 Gateway 层完成流量入口切换,能够迅速恢复服务,保障核心链路功能还能正常使用。

系统稳定性:容量安全

郑兴介绍道,首先网盘要通过保障容量安全达到什么目的?从系统层面看,保障网盘核心功能、数据读写的安全,从服务层面看保障存储服务、计算服务、SLA质量达标,机器层面看减少资源竞争,保持机器平稳运行。

如何保证?可以从两个方面解决问题。

1、将对延时特别敏感的服务使用独立的专属资源池进行隔离部署。

2、从常态和突发两种场景描述如何应对资源需求的变化。在常态下,要关注服务的容量和可用资源额度,包括节点健康度不低于90%。核心服务单机房抗压能力不低于高峰期的两倍,可扩容Buffer至少可以提供一倍的扩容容量。

在突发情况下,具备降低资源压力的能力:

在单机层面通过资源压制和资源避让避免降低整机的资源利用。

在服务层面,第一,允许核心服务的容器能够临时进行资源超用,缓解突发压力。第二,实时自动扩容,补充可用容量。若以上两种方式仍未满足需求,将离线服务退场,腾出资源空间。

在系统层面,将在线流量与离线流量进行优先级调整,从硬件层面优先保障在线服务的网络质量。

最后如果集群的功能长时间无法恢复,会采用灾备机房,给非核心流量限流,为系统恢复稳定提供缓冲时间。

系统稳定性:异常自动定位,故障处理实现闭环

郑兴表示,故障过程中,虽然线上的问题有多种,但是通过状态监控上报分析、主动下发探测任务等手段,能够主观感知到节点的运行状态。

通过搭建接口级混沌工程测试平台,提前模拟生产环境失控场景,让重大风险在可控范围内提前暴露并修复。

在定位问题之后,通过迁移、动态熔断降级等手段,具备无人工干预,异常自愈能力。

郑兴表示,百度网盘基于托管的5万台机器,通过压榨机器上的闲置计算时间和空间,以近乎0的成本,帮助了百度网盘在市场份额上的快速增长。通过容器化服务部署,机器资源挖掘,集群的CPU月均使用面积比超过45%,磁盘利用率超过85%,托管实例数超过40万个,在如此极端的资源使用场景下,仍保证了网盘服务SLA四个九达标。

郑兴认为,云原生技术通过不断地发展,提供了许多极致通用的解决方案,遗憾的是这些方案都集中在基础设施和能力层面,在服务层面,包括系统架构、研发框架、复杂的测试场景和快速安全的部署变更能力在内的研发流程,缺乏一些好用的解决方案,所以网盘正在做一件事情,将通用的系统需求下沉到基础设施中,构建新一代的混合云原发框架,实现研发效能与服务质量的提升。

第一,网盘设计了微服务规范方式,由下游服务在API粒度进行服务寻址方式、重试策略、请求权限控制等策略的统一管理,在上游服务使用时,需要指定访问的 API,并遵从下游制定的规则。以此来统一整个网盘的服务治理策略。

第二,云原生研发框架。框架通过配置既代码的方式,将服务规范落地,无需用户主动管理,能够自动跟从下游的最新策略,提供端到端的语义内容理解和服务治理策略,解决了过去框架升级对业务的强依赖的推进、推动问题,实现更新与业务迭代解耦,能够自主升级。同时对框架用户提供多云异构屏蔽的能力,让业务能够真正的只关注逻辑实现。

第三,提供多租户端到端的测试环境,解决多用户、多版本、服务集群联调需求,和全量搭建测试集群带来的资源消耗问题。

第四,实现无人值守安全发布。通过无人值守提升发布质量,减少变更的人力成本,实现快速稳定的变更能力。