使用 BitTorrent 检索 Amazon S3 对象 - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

欢迎使用新的 Amazon S3 用户指南! Amazon S3 用户指南结合了以下三个已停用的指南中的信息和说明:Amazon S3 开发人员指南Amazon S3 控制台用户指南Amazon S3 入门指南

使用 BitTorrent 检索 Amazon S3 对象

BitTorrent 是开放对等的文件分发协议。您可以使用 BitTorrent 协议检索 Amazon S3 中任何可公开访问的对象。本节描述了您可能会使用 BitTorrent 将您的数据分发至 Amazon S3 之外的原因以及应如何执行此操作。

Amazon S3 支持 BitTorrent 协议,因此开发人员可以在分发大规模内容时节约成本。Amazon S3 可用于简单可靠地存储任何数据。用于 Amazon S3 数据的默认分发机制是通过客户端/服务器下载。在客户端/服务器分发中,整个对象将以点对点的方式从 Amazon S3 传输到所有请求该对象的授权用户。尽管客户端/服务器传输适用于各种使用案例,但它并非对每个人都是最优的。尤其是,随着下载对象的用户数的增加,客户端/服务器分发的成本将直线上升。这使得分发受欢迎的对象的成本非常昂贵。

BitTorrent 通过将正在下载对象的客户端用作分发服务器来解决此问题:每个客户端从 Amazon S3 和其他客户端下载对象的某些部分,同时将相同部分的对象上传到其他关注的“对等方”。 发布者可以获得的好处是:对于受欢迎的大型文件,Amazon S3 实际提供的数据量要显著少于通过客户端/服务器下载时需要为同一客户端提供的数量。传输的数据越少,对对象的发布者而言就意味着成本更低。

注意
  • 在 2016 年 5 月 30 日以后发布的 AWS 区域中,Amazon S3 不支持 BitTorrent 协议。

  • 您只能得到大小小于 5 GB 的对象的 torrent 文件。

有关更多信息,请参阅以下主题。

BitTorrent 传输的收费方式

在 Amazon S3 中使用 BitTorrent 不会产生额外的费用。通过 BitTorrent 协议传输数据的计费费率与客户端/服务器传输相同。确切地讲,每次下载 BitTorrent 时,客户端都会从 Amazon S3“seeder”请求“piece”对象,如同使用了 REST 或 SOAP 协议为该部分创建了匿名请求一样,费用将逐渐增加。这些费用将以相同的方式出现在您的 Amazon S3 账单和使用报告上。区别在于,如果大量客户端同时通过 BitTorrent 请求相同的对象,则 Amazon S3 为满足这些客户端需求而必须提供的数据量要低于客户端/服务器传输的数据量。这是因为 BitTorrent 客户端可在它们中间同时进行上传和下载。

注意

HTTP 上的 SOAP 支持已弃用,但是仍可在 HTTPS 上使用。不支持将新 Amazon S3 功能用于 SOAP。我们建议您使用 REST API 或 AWS 开发工具包。

通过使用 BitTorrent 而实现的数据传输节省可能会有很大的差异,具体取决于您的对象受欢迎程度。不受欢迎的对象需要更多地使用“seeder”来为客户端提供服务,因此对于这些对象而言,BitTorrent 分发成本和客户端/服务器分发成本之间的差异很小。特别是,如果只有一个客户端并且该客户端一次仅下载一个特殊的对象,那么 BitTorrent 传输的成本与直接下载的成本相同。

使用 BitTorrent 来检索存储在 Amazon S3 中的对象

Amazon S3 中任何可以匿名读取的对象也可以通过 BitTorrent 进行下载。需要使用 BitTorrent 客户端应用程序才能执行此操作。Amazon 不会分发 BitTorrent 客户端应用程序,但是会提供许多免费的客户端。已对 Amazon S3 BitTorrent 执行进行了测试,可以与正式 BitTorrent 客户端结合使用(请访问 http://www.bittorrent.com/)。

BitTorrent 下载将从 .torrent 文件开始。这个小型文件向 BitTorrent 客户端描述了要下载的数据和开始查找该数据的位置。.torrent 文件是要下载的实际对象大小的一小部分。一旦您为 BitTorrent 客户端应用程序中添加了 Amazon S3 生成的 .torrent 文件,它将立即从 Amazon S3 和任意的“对等”BitTorrent 客户端开始下载。

可以轻松地为任何公开可用的对象检索 .torrent 文件。只需将“?torrent”查询字符串参数添加到对象的 REST GET 请求的末尾即可。无需进行身份验证。安装 BitTorrent 客户端后,使用 BitTorrent 下载来下载对象可能和您在 Web 浏览器中打开此 URL 一样简单。

不存在使用 SOAP API 为 Amazon S3 对象取回 .torrent 的机制。

注意

HTTP 上的 SOAP 支持已弃用,但是仍可在 HTTPS 上使用。不支持将新 Amazon S3 功能用于 SOAP。我们建议您使用 REST API 或 AWS 开发工具包。

本示例将为“quotes”存储桶中的“Nelson”对象检索 Torrent 文件。

Sample Request

GET /quotes/Nelson?torrent HTTP/1.0 Date: Wed, 25 Nov 2009 12:00:00 GMT

Sample Response

HTTP/1.1 200 OK x-amz-request-id: 7CD745EBB7AB5ED9 Date: Wed, 25 Nov 2009 12:00:00 GMT Content-Disposition: attachment; filename=Nelson.torrent; Content-Type: application/x-bittorrent Content-Length: 537 Server: AmazonS3 <body: a Bencoded dictionary as defined by the BitTorrent specification>

使用 Amazon S3 和 BitTorrent 发布内容

使用 BitTorrent 时,存储在 Amazon S3 中的所有匿名可读的对象将自动可供下载。将对象上的 ACL 更改为允许匿名 READ 操作的过程在 Amazon S3 中的 Identity and Access Management 中进行了描述。

您可以将客户端定向至您的 BitTorrent 可访问对象,方法是直接向它们提供 .torrent 文件或发布一个指向对象的 ?torrent URL 的链接,如《Amazon Simple Storage Service API 参考》中的 GetObjectTorrent 所述。需要特别注意的是,第一次请求时(通过 REST ?torrent 资源),描述 Amazon S3 对象的 .torrent 文件是按需生成的。为对象生成 .torrent 所需的时间与对象的大小成正比。对于大型对象,此时间可能会很长。因此,在发布 ?torrent 链接之前,建议为其本身创建首个请求。在生成 .torrent 文件时,Amazon S3 可能需要几分钟的时间才能响应此首个请求。除非您更新了所涉及的对象,否则 .torrent 的后续请求将会很快。在分发 ?torrent 链接之前遵循此步骤,可确保客户拥有流畅的 BitTorrent 下载体验。

要停止使用 BitTorrent 分发文件,只需移除对文件的匿名访问权限即可。可以通过从 Amazon S3 删除该文件,或将您的访问控制策略修改为禁止匿名读取来完成此操作。完成此操作后,Amazon S3 不再是文件的 BitTorrent 网络中的“seeder”,并且也不会再通过 ?torrent REST API 提供 .torrent 文件。但是在为您的文件发布了 .torrent 后,此操作可能不会停止对象的公共下载 (仅在使用 BitTorrent 对等网络时发生)。