将Amazon S3云存储服务用作私人文件网络同步的可行性

对于电脑上包含重要数据的人,肯定避免不了数据备份工作。以前,我们可能需要使用刻录盘、移动硬盘、U盘,以及局域网内的网络共享等各种方式进行文件备份。这样的备份虽然看上去挺美,但依然存在一定的隐患。例如毁灭性的自然灾害或火灾等事故,以及失窃等人为因素,用于保存备份的设备可能会与电脑一起被破坏或丢失。这种情况下,无论当时使用了怎样稳妥的备份机制,数据丢失都是无法避免的。

所以近些年逐渐兴起了一种网络备份方式,通过这类免费或收费的服务,可以将本机的文件复制到网络服务器中,并保存在服务器上。而服务器上的数据,服务提供商会进行定期备份,并可能会同时保存在不同地点的多个设备中。因此只要网络是通顺的,就算一个地点的数据全部丢失,也可以通过其他地点的数据进行恢复。这属于一种非常完善的“异地备份”机制,以往只有预算非常充沛的大企业才有可能实施。不过现在因为有了高速互联网和云计算等技术的发展和普及,个人用户及小企业用户,也可以用非常低廉,甚至完全免费的服务享受到妥善的数据保护。

现有的各种“拆箱即用”文件同步服务

针对中小企业和个人,有很多此类服务,通常需要安装一个客户端软件,并指定要同步的文件夹。随后客户端软件就会将指定文件夹中保存的全部内容都传输到网络服务器上,并在后续使用中对其中的内容进行监控,如果文件内容有变化,则会立刻将变化的内容进行同步。因此在忽略网速影响的情况下,修改过的文件很快就会应用到服务器上,完全可以实现近似实时的同步。

例如我目前使用的此类服务是微软免费提供的Windows Live Mesh,该服务为所有用户提供了5 GB容量的免费空间,并且这个客户端本身也是Windows Live套件的组成部分。上传后的文件还可以同步到自己或(获得许可的)他人的其他电脑上,因此还可以借助网络空间的中转,对多台设备上的文件进行同步。此处说的“设备”并不仅限于电脑,其他智能手机等可以访问互联网,并安装客户端软件的硬件,都可以支持。另外,该服务还可以让我们在没有安装客户端的情况下,直接通过网页查看自己保存的文件。

使用Windows Live Mesh即可借助网络空间,在多台设备之间同步数据

其他类似的服务还有很多,例如DropBox、SugerSync等。但这类服务服务对于免费用户,往往有这种那种的限制,例如空间限制、流量限制、连接数限制等,不一而足。因此如果您的重要文件本身并不是太多,通常使用免费版就可以获得妥善的保护。但如果数据量太多,往往会不太方便。此时只能考虑付费购买额外的空间。原本我一直使用Windows Live Mesh,但想要更换,主要原因就是5 GB空间不太够用,可微软的服务根本不提供付费扩容的选项。

另外对于居住在中国大陆的朋友,还有一个重要的问题:功夫网。由于各种原因,国外的很多优秀应用都已经被彻底屏蔽,例如Facebook、Twitter、Wordpress.com、DropBox、YouTube、Google Blogger等等等等…这些服务可能彻底无法直接访问,另外还有一些服务总是不够稳定,时不时抽一下。因此如果使用这类公开的文件同步服务,很有可能某天一觉醒来,彻底撞墙,所有数据都无法找回。当然,撞墙的服务通过其他方式可以绕道访问,但这毕竟不方便,并且往往对用户的技术水平提出了更高要求。更重要的是,文件同步服务最重要的就是网络传输速度,如果在撞墙后通过其他方式绕道访问,难免会对速度产生影响。

结合上述因素,最近我开始考虑另一种方式,那就是使用Amazon提供的S3云存储服务作为后端,并使用前段软件,把我的重要数据都同步/备份到S3的云中。

什么是Amazon S3?有什么优势?

S3(Simple Storage Service)是Amazon提供的一种云存储服务。简单来说,在开通该服务后,通过某种机制,我们就可以将任何数据都传过去,保存在Amazon管理的服务器上,同时并不用担心可用空间的限制,不用担心可接受文件类型的限制,不用担心单个文件的大小限制(S3对单个文件的体积也有限制,单个文件最大只能达到5 TB,不过这个限制和没限制有啥区别?)。更重要的是:不用担心由于硬件故障或操作失误导致的文件丢失。

对于上传的文件,S3会将其保存在位于不同地理位置的设施中,取决于文件可靠性级别,S3提供了两种文件保存方式:

  • 标准存储:可提供99.999999999%的可靠性和99.99%的可用性保障,具有SLA(服务级别协议),适合企业存储涉及到关键应用的数据,可承受两个设施内数据的丢失。
  • 去冗余存储(Reduced Redundancy Storage):可提供99.99%的可靠性和可用性保障,具有SLA,适合存储不那么重要,但依然需要保护的数据,可承受一个设施内的数据丢失。

至于企业用户所需的合规性要求,例如必须遵守的萨班斯法案、HIPAA法案等,从设计之初就是针对企业应用的S3服务自然也考虑到了。不过这不是本文的重点,有需求的读者请自行查阅官网说明。

也就是说,只要将自己的数据丢给S3,不再需要执行任何额外的操作,随后即可享受到妥善的保护,并且取决于设置,这些数据可以仅供自己,供自己授权的人,或针对公众提供访问。因此很多企业往往会使用标准存储服务保存自己的重要业务数据,同时使用去冗余存储服务保存网站上的图片,或者需要分发的数字内容,因此这也可以理解为一种CDN应用。

那么功夫网的问题应该怎么办?其实也有撞墙的可能,但我认为,至少目前,这种可能性并不大。首先,S3属于一种后端的文件存储服务,并不直接面向最终用户,并且对最终用户来说可以是完全透明的。目前已经有很多网站及大型企业将其用于存储文件。例如DropBox,也只提供前端,所有文件也都是在S3中存储的。DropBox在国内已经撞墙了,不过被墙的仅仅是用于访问这些数据的“入口”,也就是DropBox自己的域名,但实际上用于保存文件的服务器依然是可以访问的。

其次,正是因为有太多大企业在使用,那些人才不会过于肆无忌惮。因为他们需要考虑把这服务墙掉之后将导致的各种影响,甚至有可能危及某些企业的正常运作。要知道,目前这类服务主要都是“洋大人们”在使用,对于好面子的那啥来说,如果不是非常有必要,通常应该不会这样极端。但如果真的有朝一日S3直接撞墙,那….我也不知道该咋办了,这种风险也不是没有。

Amazon S3的价格几何?

听起来好像更美,那么Amazon S3如何收费?是否提供免费服务?

在收费方面,Amazon遵循了云计算的一种最重要的特性:Pay As You Go。也就是说,你只需要为你使用了的资源付费。具体到S3这种云存储服务,具体费用取决于你保存的数据量、传入和传出数据的网络流量,以及执行的各种请求的数量。另外还取决于你所选的数据中心位置,以及需要的文件保护级别。

至于免费服务?目前反正是没有。不过对于新用户,S3依然提供了一定的免费额度。这叫做AWS Free Usage Tier。具体来说,在新用户首次开通S3服务的前12个月,每月免费提供5 GB存储空间,内传和外传数据流量各15 GB,以及20000个Get请求和2000个Put请求。超出部分自然需要为此付款了。

目前S3服务在全球有四个数据中心,其中两个位于美国,一个位于欧洲的爱尔兰,另一个位于亚洲的新加坡。不同数据中心的收费略有差异。对于中国用户,通常使用新加坡的数据中心可以获得最好的速度。因此下文的具体费用也以新加坡数据中心的收费为主,这个数据中心的具体收费情况如下:

Amazon S3的收费情况

涉及到的数据量和流量越高,单位容量的费用越便宜。通常情况下,我觉得对于普通个人来说,每月1TB左右的数据和流量已经很了不起了。因此以这一档资费(也就是第一行)为例进行说明。

由于是个人用户,往往没必要使用可靠性那么多9的标准服务,去冗余服务99.99%的可靠性已经可以满足需求了。在1TB档位下,该服务每GB数据每月的存储费用为$0.093,数据传入S3的费用为每GB每月$0.1。数据传出费用则需要分档计费,但由于我们是将S3充当备份空间,通常只需要传入,只有在自己文件丢失后,才需要执行传出操作,从S3将数据下载回来,因此传出操作的使用并不频繁,该操作的头1 GB是免费的,随后在低于10 TB传出流量的情况下,每GB的费用为$0.19。

另外还需要考虑各种请求的数量,请求主要分为两类:Put、Copy、Post,及List请求属于同一类,费用为每1000个请求$0.01;而Get以及其他所有请求为另一类,费用为每10000个请求$0.01。这些请求的含义及用途,通常是开发人员比较关注的,对于最终用户并不需要过多考虑。至于具体数量的计算方式,目前我没有找到一种比较准确的方法。这主要取决于要传输的文件的数量和网络情况。不过反正对于请求的收费比较便宜,最贵的第一类请求,也要十万个请求才收费1美元,相信在这方面的费用不会过高。

为了让大家心中有数,Amazon还提供了在线计算器,只要输入必要的数据,就能算出使用云服务的成本。

对于首次注册的新用户,因为有免费的12个月优惠额度,因此首先请在最上方选中这个选项。接着在Services选项卡下的下拉菜单中选择要使用的数据中心,例如选择亚太地区的新加坡中心。随后在左侧选择要使用的云服务,例如S3云存储服务。接着设置数据量信息,这些数据量都是以每月为单位的,同时费用也是每月的费用。

  • Storage:标准版服务,可靠性一堆“9”,但作为个人,可以不用考虑,因此输入“0”。
  • Reduced Redundancy Storage:去冗余存储服务,可靠性依然高达99.99%,对于个人用户已经足够。随后需要选择数据量,这里设置的是每月要存储的数据量,此处选择每月存储25 GB数据。
  • Data Transfer In:数据传入流量。对于首次使用的用户,由于需要首先将所有数据都传输到S3中,因此第一个月的数据传入量应等同于存储容量,即25GB。
  • Data Transfer Out:数据传出流量。由于我们是将其当作备份空间,只要本地数据不丢失,就不需要从云中下载数据,因此这里可以指定一个非常小的值,例如每天10MB。
  • 请求数:由于不知道具体会产生多少请求,因此我设置了这两类请求每月各十万个。

通过在线计算器计算费用

随后计算的费用额度就会出现在Services选项卡右侧。以上图为例,在使用该服务的第一个月,我需要付出4.38美元。

随后计算第一年内额外十一个月的费用。这里需要注意两个问题:首先,因为可能每天都会产生新文件,因此存储的数据量是每月递增的,具体增加多少则取决于您自己的文件添加和修改情况,没有什么统一的标准。因此这里假设以后每月产生1 GB数据,11个月共产生11GB数据。为了简化计算,作为折衷,可以取平均数11GB/2=5.5GB,因此等于接下来的11个月,除了第一个月上传的25GB数据外,还要连同额外产生的5.5 GB数据,总共30.5GB数据,保存11个月。

其次是传入的数据量,在做好首次同步后,以后每个月只需要将新增的数据传入即可,因此这种的11个月的数据传入总量也是5.5GB,平均每个月为0.5 GB。请求数则保持不变。

因此随后11个月中,每月费用的计算方式为3.89美元:

随后十一个月平均每月的费用

因此第一年的总费用是3.89*11+4.38=46.84美元,折合人民币约等于308元,呵呵,汇率的变化总算能给我带来点好处了。平摊下来每天不到一元钱,99.99%可靠性的网络备份服务,存储空间总量30.5GB,并且随着数据的增多,有再多文件也存地下,只要为此付费即可。

作为对比,目前已撞墙的DropBox,其收费服务50 GB容量的版本为每月$9.99,因此一年费用为$119.88。SugerSync提供的收费服务有30GB空间版本,每月$4.99,包年优惠价$49.99,和直接使用S3的费用接近,并且SugerSync目前尚未撞墙,但未来怎样谁都不好说。某些人做事并不需要理由。

如果要计算第二年开始的费用,只要把那个12个月免费额度的选项反选即可。对于上图所示的后十一个月的每月费用,取消这个选项后,每月的费用增加0.1美元。

相信通过这些信息,您已经可以大致计算出使用S3存储和备份自己文件需要付出的费用。注意,S3属于一种后付费服务,是在您使用该服务之后,才按照上一个月的用量记账并收费的。因此这就要求您有一张可以进行美元支付的信用卡,并要将信用卡与您的帐户绑定。

安全性和隐私问题

对于云服务,很多人首先想到的可能就是这两个问题。那么Amazon S3在这方面是如何规定的?

首先考虑数据安全性。在选择需要的数据存储等级后,数据会被分散在数据中心内不同的设施中保存,并且Amazon还会在后台对这些内容进行定期备份。因此就算一个设施故障,也可以从其他设施中直接恢复数据。这一点上,无论怎么说都要比我们使用普通的SATA硬盘保存数据要安全得多。而且这可能也算是云计算的最主要卖点。

另外,在将数据传入S3的同时,服务器会对数据进行校验,并将校验信息保存起来。因此就算文件在保存过程中出错,通过自动化的教研机制很容易发现这一点,并且一旦遇到这种问题,还可以自动从后台其他副本或备份中找回正确的文件。这一系列过程是完全自动化的,并不需要用户干预。

相反,数据隐私问题则是很多人更为关注的。毕竟我们可能需要将机密数据保存在网络中,会不会导致数据外泄?

首先,我们可以自行决定自己的数据是否允许他人访问,是允许指定的人访问,还是公开允许整个互联网上所有人访问。

其次,在使用前端软件将数据传输到S3云之前,可以首先对其进行加密,因此传输到S3中的数据本身已经是在本地加密过的,只要加密机制足够强大,他人根本看不到数据的具体内容。

选择合适的前端软件

动心了吗?也想用S3作为您重要文件的异地备份仓库?先别急着去注册,您还需要一个前端软件。

S3只是一种后端网络服务,其本身只提供文件存储和访问这一最基本的职能。对于文件的备份,则需要通过专门的前端软件实现。其实也可以理解,很多人将云计算比喻成自来水或者电力,打开开关就能用,用多少付多少钱。因此S3也可以这样理解,光有自来水厂或者电厂还不够,还需要有水管和电线将产生这些服务的设施与我们自己的电脑连接在一起,这就需要用到专用的前端软件。

目前网上已经有很多此类软件,其中有免费的,也有收费的,提供了各种各样的功能,因此我们可以根据自己的实际需要和预算,选择一个最适合自己的软件。

基本上,此类软件主要有两种工作方式:

  • 文件同步类:这一种类似于上文曾经提到过的DropBox、SugerSync,以及Windows Live Mesh,直接将制定位置的文件传输到S3中,并对本地内容进行监控,一旦本地内容有变动,就可以将变化的内容自动传输到S3中。
  • 文件备份类:这一种则类似于普通的文件备份软件,只不过可以将备份的内容保存到S3中。

基本上,常见的S3前端软件就这两种类型。对此我目前正在进行评估和考察,还没确定我自己要用的软件,不过在确定后,还会单独撰文介绍S3服务的开通方法,以及我所用软件的具体用法。但在选择适合您自己的软件的时候,还有这些问题需要注意:

  • 是否支持块级传输:这一点非常重要,因为S3是按照使用情况收费的,而传入的数据也需要按照流量收费,因此首选支持块级传输的程序。什么是块级传输?假设本地有一个大小为10 MB的Docx文件,已经传输到S3中。随后对这个文件进行了修改,在末尾添加了两个汉字。如果您使用的同步软件不支持块级传输,就需要将这个10 MB的文件通过网络重新传输一遍,这将产生大量数据;但如果您用的软件支持块级传输,传输的数据量就会小很多,虽然不至于就两个汉字的数据量,但取决于具体的算法,通常可能不会超过50 KB。这个问题真的非常重要,尤其是如果您希望同步某些比较大,并且频繁改动的文件,例如Outlook的PST文件,或者Onenote的ONE文件时,尤其需要注意。另外,这一功能仅适用于同步类软件,因为这类软件需要直接将有变动的文件保存到S3中;对于备份类软件,本身并不这样做,而是根据所选备份机制,例如差异备份方式,将自从上一次备份之后被修改的文件统一创建一个备份,然后传输到S3。因此相对来说,建议首选同步类软件,而不是备份类软件。因为同步类软件更节约数据流量可空间数。但备份软件可以支持版本控制,也就是说,每次备份时,都可以对有变动的文件创建一个副本,并可随时还原为不同时间的状态。但现在很多同步类软件业支持版本控制。因此总的来说,还是建议首选同步类软件。
  • 是否支持加密:如果您要传输的数据比较敏感,或者真的对目前的云服务安全性还不够放心,那么也可以使用前端软件将要传输的文件首先进行加密,然后再传输。这样文件在通过网络传输的过程中,以及在S3云中存储的过程中,都处于加密状态,至于具体的解密方法,则只有您使用的软件知道,而解密所需的密码或密钥,则只掌握在您自己的手中。
  • 是否支持余量提醒和预警功能:由于S3是按照使用情况收费的,因此支持这一方式的绝大部分软件都会通过谨慎的设计,尽量避免产生过多费用。然而万一遇到特殊情况,导致流量或请求数激增,也有可能导致您在月底收到一个足以让人晕倒的账单。因此建议选择能够提供余量提醒和预警的软件。首先您可以设定您所能接受的每月最高费用,或最高数据量/请求数。随后软件就会根据自身设置,对最终使用情况进行测算,并在可能导致超标的情况下发出警报。

目前想到的就是这些内容,如果以后还有新的方法,我将随时补充。希望大家的云计算旅途过得愉快。

简单预告:目前我看中了一款可使用S3的文件备份/同步软件,并且负责了该软件的汉化工作。很快这个软件将包含简体中文界面,并且我将针对这个软件写一篇比较详细的文章,届时欢迎拍砖。

分享:

《将Amazon S3云存储服务用作私人文件网络同步的可行性》有27个想法

  1. 这几篇文章讲的都非常详细,学习了很多,谢谢!

    CloudBerry刚刚试用了一下,还是英文版,随便用了一下,细节的设置还不会用,希望早日集成中文语言,并有中文教程。

    1. 汉化工作已经完成,但还没有正式发布呢。截图时候用的是作者提供的测试版,包含中文界面的新版本应该很快就发布了

  2. 我用joomla,有一个插件是jomCDN,和wordpress的插件原理一样。

    jomCDN插件中设置中主要有Amazon access key、Amazon S3 secret key、Bucket Name、CloudFront Domain Name,这几项都可以设置,另外就是一些时间相关设置了。

    在S3中,也创建了buckets,并将站点中的文件长传了。

    还有一些不明白,就是在S3该和我的joomla的文件怎样同步起来,起到CDN的效果?

    谢谢!

    1. 从内容源到S3的文件复制,这应该是你所用插件实现的,我在WP下用的那个CDN Sync Tool就能实现这个功能,不过因为主机对PHP的支持问题,我暂时没法使用。你用的这个jomCDN难道不支持自动复制吗?实在不行就换一个同类的其他插件吧

  3. 回复真快,谢谢!

    关于插件,我再找找看,还有几个专门针对Amazon S3的,应该能找到自动复制的功能的插件。

    还有,我看到你设置了http://cdn.xieyidian.com为buckets名称,那么,得到一个http://xxxxx.cloudfront.net地址后,只是在插件中添加就行了还是需要在自己的主机或域名服务商添加CNAME记录呢?

  4. joe :

    回复真快,谢谢!

    关于插件,我再找找看,还有几个专门针对Amazon S3的,应该能找到自动复制的功能的插件。

    还有,我看到你设置了http://cdn.xieyidian.com为buckets名称,那么,得到一个http://xxxxx.cloudfront.net地址后,只是在插件中添加就行了还是需要在自己的主机或域名服务商添加CNAME记录呢?

    这要看情况,还是以CDN Sync Tool为例吧(因为我没有用过其他的)。使用这个插件后,该插件会调用重写函数,把保存到CF中的内容所对应的链接,自动从原始域名改为CF的域名。因此在浏览网页时,就可以直接通过CF的域名下载所需内容。

    但我目前用的Dreamhost直接提供的方法,并不需要要重写URL,他们是在DNS上执行的操作,并且可能并不需要更改DNS服务器设置,因为我的域名不是在Dreamhost注册的,是在其他地方,他们也没办法修改。之举这种方法具体是如何生效的我还不太清楚呢

  5. 昨天晚上没有同步完,刚才又同步了一次,速度有些慢,这确实是意料之外的。

    在我用的另一个插件JoomlArt Amazon S3当中,各个参数都填好,可以设置同步的文件类型,同步时间等,还可以在joomla的后台管理Amazon S3中对应buckets的文件,挺方便的。

    刚刚在源代码中查看,已经开始调用cloudfront.net的文件,凡是js,css,jpg,gif,png,bmp,doc,pdf文件都调用。

    就是还不知道从哪里看同步占用的空间大小和流量多少?

  6. 仔细看了下账单,你这些开销里大部分都是数据库以及计算资源方面的费用,单纯存储费用甚至没有超过$0.5啊。

    仔细看账单,7.57这个价格里就包含了3.82的Elastic Compute Cloud费用,以及3.44的Relation Database Service费用了。这些费用都不是S3产生的啊.

    另外,还可以在这个页面左侧点击那个Useage链接,下载详细记录信息看看

  7. 谢谢!我也仔细看了一下账单,确实是EC2产生的较多。

    其实以前看到有EC2 750小时和S3服务的前12个月,每月免费提供5 GB存储空间这样的优惠,但我不知怎么搞的,这两个免费服务好像都没有享受到。

    我目前的HostGator空间速度还比较理想,S3只是学习一下,如果持续产生较多费用的话就停用了。

    来你这儿也就一天时间,却学了很多东西,还是非常感谢!以后会常来关注。

    1. 那个Free Tire的免费额度是同一个帐号下的所有服务共用的,也就是说,如果你同时使用S3和CloudFront,那么只要这两个服务的使用情况综合达到免费额度,后面的使用就开始计费了。不过对于EC2这种主要与计算有关的资源如何使用的,这我没需求,也就没有了解过了

  8. 感谢你写下的关于S3的资料。
    有一些问题,希望能得到你的指点。
    有一个网站,调用S3的数据(全是MP3文件),
    网站采用会员制,
    如何才能做到,
    收费会员才能下载S3里的MP3文件,而非收费会员则无法下载S3里的MP3文件?
    感谢·

  9. gmlin :你好,想请教你些问题。

    要讲升级用的数据包放到S3上,使用云服务进行下载。一般一个月更新一次数据,但是CloudFront须24小时后数据才会更新。如何实现实时更新?是否有免费的工具?或Delphi/java的api?谢谢。

    [WORDPRESS HASHCASH] The poster sent us ‘0 which is not a hashcash value.

  10. 我把在线升级包存到S3中并开通CloudFront服务。一般每个月会更新一次数据包。但是CloudFront有24小时的延时。有没有免费的工具可以实时更新CloudFront服务上的数据?或者java/delphi的API。谢谢

  11. @gmlin

    如果你只是想要用CF对你的文件进行加速的话,其实并不需要专门开通S3的,因为之前CF在一次升级之后已经可以不需要S3,直接从原始URL读取文件,你可以看看我这里的介绍:

    https://www.xieyidian.com/3028

    因此实际使用中,根本不需要手工进行更新,也不需要使用S3,只要设置正确,原始服务器上的内容更新后,用户使用客户端软件进行在线升级,访问CF的地址,就可以自动获得最新文件,而且这个过程并没有24小时的延时,基本上是实时的

发表评论

电子邮件地址不会被公开。 必填项已用*标注

发表评论前,先做个简单的数学题吧: * Time limit is exhausted. Please reload CAPTCHA.