在上一篇中,咱们介绍了如何使用云存储服务代替传统的共享存储设备。若是咱们大量的使用了云存储服务,就不可避免的要在多个云存储服务之间复制、共享、迁移或者同步数据。这里说的多个云存储服务包括跨不一样供应商的云存储服务。html
首先咱们来看一下Azure的存储服务。git
每个存储帐号中能够建立一个或者多个容器(Container),可是Container的层级只有一层。存放在Azure存储服务中的每个文件都对应一个惟一的URL地址,包括虚拟机的系统盘和数据盘都是以.vhd文件的形式存放在存储帐号的容器里面的。github
Azure支持在存储帐号之间进行Server to Server的数据复制,即:要复制的文件不会通过发出复制命令的计算机进行中转,不管source和destination是否在同一个数据中心,甚至能够在Azure中国版和Azure国际版的存储服务之间直接进行数据复制!我试过从Azure东亚或者东南亚的数据中心往Azure中国的北京数据中心复制文件,速度一般能够轻松达到60~100Mbps!除了正常的业务数据迁移,我常常用这个方法从Azure国际版往Azure中国版上搬镜像,或者在Azure国际版上下载大型软件安装包(就像SAP这种动辄10几20几个GB的)而后再搬回国内使用。windows
附上从Azure国际版往Azure中国版复制文件的示例命令和参数:api
azcopy /source:https://[存储帐号名称].blob.core.windows.net/[容器名称] /sourcekey:[主访问密钥] /dest:https://[存储帐号名称].blob.core.chinacloudapi.cn/[容器名称] /destkey:[主访问密钥] /pattern:[文件名]
接下来咱们再看一下AWS的存储服务。网络
AWS S3可谓是公有云存储服务的鼻祖,其API基本上已经成为业界事实上的标准,一批后来者都或多或少的借鉴了AWS S3的设计和实现思路。工具
AWS S3只是一个对象存储服务,虽然不像Azure的存储服务那样一应俱全(blob,table,queue...),可是足够精专。AWS S3也没有被用于存放虚拟机的磁盘文件。经过使用AWS CLI,咱们能够在不一样的bucket之间复制文件,其复制过程也是Server to Server模式的。可是咱们没法在AWS国际版的bucket和AWS中国版的bucket之间进行Server to Server的文件复制。究其缘由,我的认为主要是由于AWS S3没有为bucket提供独立的Access Key,而AWS中国版和AWS国际版的endpoint与IAM也是彻底独立的,而且AWS CLI也不支持在同一条命令中使用两个不一样的credential和endpoint。spa
AWS S3在bucket级别提供了跨区域复制同步,可是所能跨的区域只是国际版的区域,不包括中国区。另外,在AWS中国版的EC2上访问AWS国际版S3上的文件,其传输速度和普通的家用、商用网络没有任何区别——都是忽快忽慢,并且还常常出现超时、没法访问的状况。不过AWS中国版和Azure中国版、AWS国际版和Azure国际版之间的互访速度仍是很是快的。.net
经过上述介绍,咱们不可贵出这样一个结论,在AWS S3和Azure存储服务之间迁移(复制)数据,也只能是先从一方下载,再上传到另外一方了。的确这是一个没有什么太多技术含量的实现方案,可是经过一些最佳实践和技巧,再配合适当的辅助工具,对数据迁移质量和效率而言,仍是有很大提高空间的。命令行
这里推荐一个在Azure存储服务和AWS S3之间作数据迁移的开源工具:AzureCopy,这是一个C#写的工具,并且已经提交到NuGet库中。源代码在GitHub上。除了做为普通的命令行来使用,还能够在本身开发的项目中调用相关的功能。老规矩,咱们首先要作的就是让它支持AWS中国版和Azure中国版。这里不得不吐槽一下Azure SDK的设计仍是欠点火候的——一样是.net/C#的SDK,我只添加了一行代码,AzureCopy就能支持AWS中国版了,而支持Azure中国版却修改了好几个方法,同时还花了一两个小时的时间来进行调试!
修改完成,咱们就可使用以下的命令在Azure中国版和AWS中国版之间复制文件啦(credential是写在配置文件中的):
.\azurecopy.exe -i https://xhttestsa1.blob.core.chinacloudapi.cn/myc-1/music-1.mp3 -o https://s3.cn-north-1.amazonaws.com.cn/test-pub/
须要注意的是:AzureCopy也是须要在本地进行文件中转的。因此若是要复制大型文件,请在Azure或者AWS的虚拟机上使用这个工具。