『云计算』1分钟创建6000台云服务器,云函数是如何做到的?( 二 )


三、云硬盘快照系统肩负重任 回到云函数SCF团队的业务需求 , 1分钟创建6000台云服务器 , 启动后IO无卡顿 , 其实对于云硬盘快照系统还是一个非常大的挑战 。 云硬盘快照系统主要由三个模块组成:管理节点manager , 调度器scheduler , 数据传输模块transfer 。 管理节点manager负责快照任务管理 , 调度器scheduler负责任务调度 , 下发具体的拷贝任务 。 数据传输模块transfer则具体执行拷贝任务 。 当用户发起创建云硬盘服务器请求时 , manager模块接收请求 , 委托任务给schuduler , 指定镜像文件回滚至目标云硬盘上 。 schuduler下发具体拷贝任务 , 让transfer模块从COS将数据块拷贝写入至目标云硬盘 。
『云计算』1分钟创建6000台云服务器,云函数是如何做到的?
本文插图

图二. 云硬盘快照系统架构图示
挑战一 拷贝数据耗时长
高并发量下 , 如果所有镜像数据都从COS对象存储系统拉取 , 对COS的读压力会非常大 , 触发COS的Qos流控 , 且用户访问云硬盘数据IO延时高 。 解决方案 :搬迁节点transfer , 增加本地cache 。
由于云函数SCF批量创建云服务器使用同一个镜像 , 在每个搬迁节点transfer中都缓存镜像的部分数据块 , 一旦命中transfer的cache就不再从COS下载数据 , 这样每个transfer只需下载一次镜像 。

『云计算』1分钟创建6000台云服务器,云函数是如何做到的?
本文插图

图三. transfer增加本地cache图示
挑战二 系统QPS能力低
1分钟创建6000台子机 , 对快照系统的QPS能力要求达数十万 。 随着业务量上升 , 快照系统整体架构需具备横向扩展提升QPS的能力 。 解决方案 :调度器scheduler支持水平扩展 。
在快照回滚创建云服务器过程中 , 核心处理逻辑在调度器scheduler , 无论是顺序拷贝的调度 , 还是优先拷贝请求都要经过scheduler ,所以scheduler的负载直接影响到整个云硬盘快照系统的性能 。 scheduler单机性能有限 , 无法满足并发量要求 。 开发团队将scheduler由主从配置升级为水平扩展 , 并且整体架构均做了适配 , 使其不再成为性能瓶颈 。

『云计算』1分钟创建6000台云服务器,云函数是如何做到的?
本文插图

图四. scheduler水平扩展图示
挑战三 单仓库读写能力有限
如果大量的云硬盘落在同一个存储仓库 , 则会造成单仓库写入流量过大 , 触发单仓库回滚带宽限制 。 解决方案 :增加云硬盘仓库调度系统 。
在批量购买云硬盘时 , 从仓库的剩余容量、已创建的云硬盘数、回滚带宽、仓库当前用户IO写入带宽四个纬度综合考量 , 把同一批次创建的CBS云硬盘尽量打散到多个 , 满足6000台云服务器并发创建的需求 。
通过上述方案 , 云硬盘快照完成了1分钟6000台云服务器创建任务 , IO延时降低95.6% , COS读带宽降低89% , 为使用云函数SCF的企业和开发者带来服务升级 。


推荐阅读