文章转载自腾讯开发者云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助用户在无需购买和管理服务器的情况下运行代码。而随着方便快捷的云原生服务愈发受人青睐,业务量与日俱增,作为提供云函数SCF底层支持的云服务器,也承受着越来越大的压力。鲜为人知的是,承担云服务器创建任务的,是CBS云硬盘快照服务。当云函数SCF团队需要业务扩容或版本变更,云服务器创建并发量会增长为平常业务系统的数十倍。通过不断优化服务,在云函数SCF业务高峰期,云硬盘快照系统扛住了1分钟内并发创建6000台云服务器的压力。 那么,云硬盘快照是如何做到的?一、SCF与CBS的协作之路由于CVM云服务器和CBS云硬盘在弹性扩容、资源管理工作中便捷性突出,云函数SCF团队逐步使用CVM云服务器和CBS云硬盘搭建底层系统。当云函数SCF云函数需要发布新版本时,会使用新版本的系统镜像批量创建云服务器,逐步替换旧版本镜像云服务器。云硬盘团队和云函数SCF团队反复协商沟通,在不影响现网其他用户的正常业务,初步的整体目标为:1分钟内并发创建6000台CVM,且服务器启动后IO延时抖动稳定。二、云服务创建当说到云服务器创建,就不得不提CBS云硬盘快照服务,它是云硬盘某个时刻的数据备份。用户可以使用快照记录云硬盘不同时刻的数据,用于满足系统恢复、容灾以及云硬盘复制等需要。那么,云硬盘的备份,和云服务器创建有什么关系?别急,我们先为大家介绍下云服务器创建的两种方式,即通过镜像下载或云硬盘快照回滚创建。1、云服务器创建方式对比镜像下载:通过宿主机下载完整镜像文件并写入CBS云硬盘后,才能启动云服务器。云硬盘快照回滚创建:先将镜像文件以快照数据的形式存储,当需要创建CVM云服务器时,利用云硬盘快照系统的秒级回滚能力,将镜像文件批量回滚至指定的CBS云硬盘。它们之间的对比如下表所示,利用快照回滚创建云服务器,拥有很多传统创建方案不具备的能力:2、云硬盘快照回滚创建云服务器通过快照回滚创建云服务器,具备秒级并发创建,不占用宿主机资源等特点,整体的流程如下:1.镜像数据存储于cos对象存储中:创建云服务器时,云硬盘快照系统将镜像数据从COS拷贝至目标云硬盘上,数据传输不经过宿主机。2.云服务器启动只需访问一小部分数据:云硬盘快照系统优先拷贝关键数据,用户启动云服务器后,后台异步完成剩余数据拷贝工作。CBS存储系统对用户IO和云硬盘快照系统IO做了隔离处理,分配固定带宽用于云硬盘快照系统的写入,整体流程对用户的云硬盘性能无影响。云硬盘快照系统优先搬迁关键数据,让用户在数秒内启动云服务器正常访问,那么,如果用户启动云服务器后,访问了未完成拷贝的数据,数据访问是不是就会失败?其实,由于云硬盘快照系统具备优先拷贝关键数据的能力,正常情况下,云硬盘快照系统会按磁盘扇区位置顺序拷贝数据。若一旦用户访问了未完成拷贝的数据,会触发云硬盘快照系统的优先拷贝机制,优先拷贝用户需要访问的数据。图一. 快照回滚创建服务器图示示意图说明:①当用户需要访问待拷贝数据块,宿主机通知云硬盘快照系统优先从COS对象存储搬迁指定数据②云硬盘快照系统将数据写入CBS云硬盘中③快照系统返回写入成功信息④宿主机下发读请求IO正常访问云硬盘数据。三、云硬盘快照系统肩负重任回到云函数SCF团队的业务需求,1分钟创建6000台云服务器,启动后IO无卡顿,其实对于云硬盘快照系统还是一个非常大的挑战。云硬盘快照系统主要由三个模块组成:管理节点manager,调度器scheduler,数据传输模块transfer。管理节点manager负责快照任务管理,调度器scheduler负责任务调度,下发具体的拷贝任务。数据传输模块transfer则具体执行拷贝任务。当用户发起创建云硬盘服务器请求时,manager模块接收请求,委托任务给schuduler,指定镜像文件回滚至目标云硬盘上。schuduler下发具体拷贝任务,让transfer模块从COS将数据块拷贝写入至目标云硬盘。图二. 云硬盘快照系统架构图示挑战一 拷贝数据耗时长高并发量下,如果所有镜像数据都从COS对象存储系统拉取,对COS的读压力会非常大,触发COS的Qos流控,且用户访问云硬盘数据IO延时高。解决方案 :搬迁节点transfer,增加本地cache。由于云函数SCF批量创建云服务器使用同一个镜像,在每个搬迁节点transfer中都缓存镜像的部分数据块,一旦命中transfer的cache就不再从COS下载数据,这样每个transfer只需下载一次镜像。图三. transfer增加本地cache图示挑战二 系统QPS能力低1分钟创建6000台子机,对快照系统的QPS能力要求达数十万。随着业务量上升,快照系统整体架构需具备横向扩展提升QPS的能力。解决方案 :调度器scheduler支持水平扩展。在快照回滚创建云服务器过程中,核心处理逻辑在调度器scheduler,无论是顺序拷贝的调度,还是优先拷贝请求都要经过scheduler, 所以scheduler的负载直接影响到整个云硬盘快照系统的性能。scheduler单机性能有限,无法满足并发量要求。开发团队将scheduler由主从配置升级为水平扩展,并且整体架构均做了适配,使其不再成为性能瓶颈。图四. scheduler水平扩展图示挑战三 单仓库读写能力有限如果大量的云硬盘落在同一个存储仓库,则会造成单仓库写入流量过大,触发单仓库回滚带宽限制。解决方案 :增加云硬盘仓库调度系统。在批量购买云硬盘时,从仓库的剩余容量、已创建的云硬盘数、回滚带宽、仓库当前用户IO写入带宽四个纬度综合考量,把同一批次创建的CBS云硬盘尽量打散到多个,满足6000台云服务器并发创建的需求。通过上述方案,云硬盘快照完成了1分钟6000台云服务器创建任务,IO延时降低95.6%,COS读带宽降低89%,为使用云函数SCF的企业和开发者带来服务升级。