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