上回说到,为了全市人民的幸福和便捷,T姐化身花果山美猴王,能够吹一口气就复制一批虚拟机出来,承担健康码查询的突发流量。
但是,启动虚拟机所需要的系统盘,是云上块存储CBS(Cloud Block Storage)的服务实例,其大小一般在50GB-500GB之间。我们以每虚拟机的系统盘大小200GB计算,复制100个虚拟机的时候,就需要复制20TB的数据。
对计算机网络熟悉的同学会发现,通过双口25G网卡,复制4TB数据,所需要的时间大致为:
(20000GB * 8) / 50Gbps = 3200秒,也就是53.3分钟。考虑到网络传输的数据包封装开销,所需时间有可能长达1小时。
而以腾讯云为代表的大规模云计算平台,无论是在公有云上,还是为用户进行本地化的部署,都可以在分钟级别时间内实现数以万计的虚拟机自动发放和克隆。这是如何实现的呢?
小E带着疑问,找到了方老师。
方老师问:
“你有没有通过某度网盘,给别人分享过东京热和一本道《蓝色生死恋》和《流星花园》?”
小E摇了摇头。
方老师意识到自己暴露了年龄并撤回了上一句话。
旁边的纳多同学听见,跑过来发言:“我是发现过,往某度网盘上面传《臭作》《尾行》等PC98游戏全集,虽然文件有几个GB,但几秒钟就传好啦!”
纳多同学因为开车留下了证据而被移出了群聊。
原来,纳多同学提到的功能,叫做“网盘秒传”。实际上,这是网盘客户端能够配合网盘云端,识别客户准备上传的文件是否存在,如果存在,就只为用户创建一个链接,而不需要重新传输文件,大大节约了网络传输的时间。
同样地,如果小E想从别人的网盘里面往自己的网盘里面复制945GB的《耽美改编全集纳尔齐斯与歌尔德蒙》,网盘的后台也并不会真的去复制文件本身,而是给小E的网盘提供一个链接,小E就可以从自己的网盘里面下载文件了。
实际上,对于虚拟机的复制,也可以用这一技术来实现。
由于虚拟机的系统盘,实际上是存储在云上的CBS中,那么,每次进行虚拟机克隆的时候,只需要为新的虚拟机提供CBS上块实例的一个链接,是不是就可以了呢?
小E想到了一个问题,如图:
假设云平台从VM A复制了一台虚拟机VM B,二者使用CBS中的同一块数据块作为系统盘。如果VM A向自己在CBS存储中的系统盘进行了改写,从而写到系统盘对应的数据块上,同时,这个数据块也是VM B的系统盘。那么,实际上相当于VM A的写入操作对VM B造成了影响。这是我们不期望看到的。
小E想出来的解决方案是:
如下图:
图中,VM A和VM B的系统盘,都是来自COS(Cloud Object Storage)中的CBS快照。在CBS中,并不会真的复制两份数据,而是当VM A和VM B需要读取系统盘内容时,从快照读取,而写入系统盘的时候,CBS会在其他地方保存每次写入的内容,这叫做写时重定向 (Redirect on Write,ROW)。实际上,克隆出的每个VM的系统盘,CBS可以通过这种技术只保存修改过的内容。
在应用了快照ROW技术以后,我们发现,只有第一次做快照的时候需要全量复制CBS卷的内容,此后每次克隆虚拟机,CBS只会做一个链接而无需复制数据,从而大大节约了存储空间,同时也能够实现快速地批量克隆虚拟机。
有了快照ROW技术,TX云等大型公有云平台,就可以在分钟级时间克隆出上万个虚拟机,应对高峰期的大量并发请求了。
不过,如果我们只是人工监测请求流量,然后手工发起虚拟机的克隆扩容,有的时候还难以满足业务的要求。有没有办法让虚拟机自动克隆扩容呢?
小E突然回忆起了一个瓦特和蒸汽机的故事——请看下回分解。