V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
scf10cent
V2EX  ›  推广

云函数如何做到 1 分钟创建 6000 台云服务器?

  •  
  •   scf10cent · 2020-04-28 18:00:50 +08:00 · 1158 次点击
    这是一个创建于 1474 天前的主题,其中的信息可能已经有所发展或是发生改变。

    解密背后承担云服务器创建任务的 CBS 云硬盘快照服务

    云函数( Serverless Cloud Function,SCF )是腾讯云为企业和开发者们提供的无服务器执行环境,帮助用户在无需购买和管理服务器的情况下运行代码。而随着方便快捷的云原生服务愈发受人青睐,业务量与日俱增,作为提供云函数 SCF 底层支持的云服务器,也承受着越来越大的压力。鲜为人知的是,承担云服务器创建任务的,是 CBS 云硬盘快照服务。当云函数 SCF 团队需要业务扩容或版本变更,云服务器创建并发量会增长为平常业务系统的数十倍。

    通过不断优化服务,在云函数 SCF 业务高峰期,云硬盘快照系统扛住了 1 分钟内并发创建 6000 台云服务器的压力。 那么,云硬盘快照是如何做到的?

    一、SCF 与 CBS 的协作之路

    由于 CVM 云服务器和 CBS 云硬盘在弹性扩容、资源管理工作中便捷性突出,云函数 SCF 团队逐步使用 CVM 云服务器和 CBS 云硬盘搭建底层系统。当云函数 SCF 云函数需要发布新版本时,会使用新版本的系统镜像批量创建云服务器,逐步替换旧版本镜像云服务器。云硬盘团队和云函数 SCF 团队反复协商沟通,在不影响现网其他用户的正常业务,初步的整体目标为:1 分钟内并发创建 6000 台 CVM,且服务器启动后 IO 延时抖动稳定。

    二、云服务器创建

    当说到云服务器创建,就不得不提 CBS 云硬盘快照服务,它是云硬盘某个时刻的数据备份。用户可以使用快照记录云硬盘不同时刻的数据,用于满足系统恢复、容灾以及云硬盘复制等需要。

    那么,云硬盘的备份,和云服务器创建有什么关系?

    别急,我们先为大家介绍下云服务器创建的两种方式,即通过镜像下载或云硬盘快照回滚创建。

    2.1 云服务器创建方式对比

    镜像下载: 通过宿主机下载完整镜像文件并写入 CBS 云硬盘后,才能启动云服务器。

    云硬盘快照回滚创建: 先将镜像文件以快照数据的形式存储,当需要创建 CVM 云服务器时,利用云硬盘快照系统的秒级回滚能力,将镜像文件批量回滚至指定的 CBS 云硬盘。

    它们之间的对比如下表所示,利用快照回滚创建云服务器,拥有很多传统创建方案不具备的能力:

    2.2 云硬盘快照回滚创建云服务器

    通过快照回滚创建云服务器,具备秒级并发创建,不占用宿主机资源等特点,整体的流程如下:

    1. 镜像数据存储于 cos 对象存储中:创建云服务器时,云硬盘快照系统将镜像数据从 COS 拷贝至目标云硬盘上,数据传输不经过宿主机。
    2. 云服务器启动只需访问一小部分数据:云硬盘快照系统优先拷贝关键数据,用户启动云服务器后,后台异步完成剩余数据拷贝工作。CBS 存储系统对用户 IO 和云硬盘快照系统 IO 做了隔离处理,分配固定带宽用于云硬盘快照系统的写入,整体流程对用户的云硬盘性能无影响。

    云硬盘快照系统优先搬迁关键数据,让用户在数秒内启动云服务器正常访问,那么,如果用户启动云服务器后,访问了未完成拷贝的数据,数据访问是不是就会失败?

    其实,由于云硬盘快照系统具备优先拷贝关键数据的能力,正常情况下,云硬盘快照系统会按磁盘扇区位置顺序拷贝数据。若一旦用户访问了未完成拷贝的数据,会触发云硬盘快照系统的优先拷贝机制,优先拷贝用户需要访问的数据。

    快照回滚创建服务器图示

    示意图说明:

    1. 当用户需要访问待拷贝数据块,宿主机通知云硬盘快照系统优先从 COS 对象存储搬迁指定数据
    2. 云硬盘快照系统将数据写入 CBS 云硬盘中
    3. 快照系统返回写入成功信息
    4. 宿主机下发读请求 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 的企业和开发者带来服务升级。

    Get 同款服务:


    传送门:

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3171 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:51 · PVG 18:51 · LAX 03:51 · JFK 06:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.