如何使用 Amazon S3 多区域访问点提高多区域应用程序的性能速度和可用性

构建多区域应用程序使您能够提高终端用户的延迟时间,在发生意外灾难时实现更高的可用性和弹性,并遵守与数据持久性和数据保留相关的业务要求。例如,您可能希望减少后端服务的动态 API 调用的总体延迟。或者,您可能希望延长单区域部署以处理互联网路由问题、海底电缆故障或区域连接问题,从而避免成本高昂的停机时间。今天,得益于多区域数据复制功能,例如 Amazon DynamoDB 全局表、Amazon Aurora 全球数据库、 Amazon ElastiCache全局数据存储和 Amazon Simple Storage Service (Amazon S3) 跨区域复制,您可以跨全球 25 个亚马逊云科技区域构建多区域应用程序。

但是,在实施多区域应用程序时,您通常必须让代码区域感知,并处理与正确的区域资源(无论是最接近还是最可用的资源)进行迁移的繁重工作。例如,您可能有三个 Amazon S3 存储桶,对象复制跨越三个亚马逊云科技区域。您的应用程序代码需要知道存在多少存储桶副本以及它们所在的位置、哪个存储桶与来电人最近,以及在出现问题时如何回退到其它存储桶。当您向多区域架构中添加新区域,并在全球配置发生变化后在每个区域中重新部署堆栈时,复杂性就会增加。

近期,我们很高兴地宣布 Amazon S3 多区域访问点正式发布,这是一项新的 Amazon S3 功能,允许您定义跨越多个亚马逊云科技区域中存储桶的全球端点。借助 Amazon S3 多区域访问点,您可以利用单个区域中的相同简单架构构建多区域应用程序。

Amazon S3 多区域访问点提供内置的网络恢复能力,基于构建Amazon Global Accelerator通过亚马逊云科技全球网络路由 Amazon S3 请求。这对于最大限度地减少网络拥塞和总体延迟,同时保持简单的应用程序架构尤为重要。Amazon Global Accelerator 会持续监控区域可用性,并可以在几秒钟内将请求转移到另一个区。通过动态将请求路由到最低延迟的数据副本,Amazon S3 多区域访问点可将上载和下载性能提高 60%。这不仅适合依赖 Amazon S3 读取配置文件或应用程序数据的服务器端应用程序,而且对于需要高性能和可靠的只写端点的边缘应用程序来说,例如 loT 设备或自驾车,这也是很棒的。

操作 Amazon S3 多区域访问点

要开始开启,您可以在 Amazon S3 控制台中,通过 API 或使用 Amazon CloudFormation 创建 Amazon S3 多区域访问点。

让我向您展示如何使用 Amazon S3 控制台进行创建。每个访问点都需要一个账户级别唯一的名称。

创建之后,您可以通过其别名来访问,该别名是自动生成且全球唯一的。别名看起来像一个以 .mrap 结尾的随机字符串 — 例如 mmqdt41e4bf6x.mrap 。也可以通过https://mmqdt41e4bf6x.mrap.s3... 、VPC或使用Amazon PrivateLink 在本地部署访问。

如何使用 Amazon S3 多区域访问点提高多区域应用程序的性能速度和可用性_第1张图片

然后,您将多个存储桶(新存储桶或现有存储桶)与访问点关联,每个区域一个。如果您需要数据复制,则还需要启用存储桶版本控制。

如何使用 Amazon S3 多区域访问点提高多区域应用程序的性能速度和可用性_第2张图片

最后,您为访问点配置公共访问数据块设置。原定设置下,所有公共访问都被阻止,这在大多数情况下都能正常运行。

创建过程是异步的,您可以在控制台中查看创建状态,也可以通过 Amazon CLI 列出 Amazon S3 多区域访问点来查看创建状态。当它变为就绪后,您可以为访问点策略和对象复制配置可选设置。

如何使用 Amazon S3 多区域访问点提高多区域应用程序的性能速度和可用性_第3张图片

与常规访问点类似,您可以自定义访问控制策略,以限制与存储桶权限相关的访问点的使用。请记住,访问点和底层存储桶都必须允许请求。Amazon S3 多区域访问点无法扩展权限,只是限制(或等于)权限。您还可以使用 Amazon IAM Access Analyzer 验证使用 Amazon S3 多区域访问点的存储桶的公有和跨账户访问权限,并在部署权限更改之前预览对存储桶的访问。

Amazon IAM Access Analyzer:

https://aws.amazon.com/iam/fe...

您的 Amazon S3 多区域访问点访问策略可能如下所示:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Default",
      "Effect": "Allow",
      "Principal": {
        "AWS": "YOUR_ACCOUNT_ID" 
      },
      "Action": ["s3:GetObject", "s3:PutObject"],
      "Resource": "arn:aws:s3::YOUR_ACCOUNT_ID:accesspoint/YOUR_ALIAS/object/*"
    }
   ]
}

要在与 Amazon S3 多区域访问点一起使用的存储桶之间复制数据,您可以配置 Amazon S3 复制。在某些情况下,您可能希望在每个存储桶中存储不同的内容,或者有一部分区域存储桶用于全球端点,其他未被复制和被使用的部分仅用于区域访问点或直接存储桶访问。例如,loT 设备配置可能包括对其他区域 API 端点或区域资源的引用,这对于每个存储桶而言都不同。

新的 Amazon S3 控制台提供了两个基本模板,您可以使用这些模板轻松集中地创建复制规则:

  • 将对象从一个或多个源存储桶复制到一个或多个源存储桶:这非常适合只读使用案例,其中数据始终在特定亚马逊云科技区域中生成,而且您希望在所有其他区域中也可使用。
  • 在所有指定存储桶之间复制对象:这对于我提到的 loT 场景来说非常理想,在这种情况下,您将定义一个只写访问点,用于设备将数据上载到最近的区域,并且此数据在所有区域都可用。

当然,由于筛选器和条件,您可以创建更复杂的复制设置。例如,您可能希望基于前缀或标签仅复制某些对象。

如何使用 Amazon S3 多区域访问点提高多区域应用程序的性能速度和可用性_第4张图片

请记住,必须为跨区域复制启用存储桶版本控制。

如何使用 Amazon S3 多区域访问点提高多区域应用程序的性能速度和可用性_第5张图片

控制台将负责创建和配置复制规则及 Amazon IAM 角色。请注意,要添加或移除存储桶,您需要使用修订后的列表创建一个新的 Amazon S3 多区域访问点。

除了复制规则之外,还可以在这里配置复制选项,例如复制时间控制 (RTC)复制指标和通知,以及双向同步。对于复制速度很重要的使用案例,RTC 允许您在几秒钟内复制大多数新对象,并在 15 分钟内复制 99.99% 的对象;复制指标允许您监控存储桶在对象和字节数方面的同步程度;双向同步允许您实现双活配置,适用于需要跨存储桶复制对象元数据的大量使用案例。

如何使用 Amazon S3 多区域访问点提高多区域应用程序的性能速度和可用性_第6张图片

配置复制后,您将获得非常有用的视觉和交互式摘要,允许您验证哪些亚马逊云科技区域已启用。您将看到它们在地图上的位置、区域存储桶的名称以及正在应用哪些复制规则。

如何使用 Amazon S3 多区域访问点提高多区域应用程序的性能速度和可用性_第7张图片

定义并正确配置 Amazon S3 多区域访问点后,您可以通过 Amazon S3 API、Amazon CLI 或亚马逊云科技软件开发工具包开启交互。例如,这就是你使用 Amazon CLI 编写和读取新对象的方式(不要忘记升级到最新的 Amazon CLI 版本):

# 创建一个新对象
aws s3api put-object --bucket arn:aws:s3::YOUR_ACCOUNT_ID:accesspoint/YOUR_ALIAS --key test.png --body test.png
# 检索同一个对象
aws s3api get-object --bucket arn:aws:s3::YOUR_ACCOUNT_ID:accesspoint/YOUR_ALIAS --key test.png test.png

最后但并非最不重要的是,您可以使用 Amazon CloudWatch 中的存储桶指标来跟踪用户请求是如何在多个亚马逊云科技区域的存储桶之间分发的。

启动时的 Amazon CloudFormation 支持

今天,您可以开始使用两种新的 Amazon CloudFormation 资源轻松定义 Amazon S3 多区域访问点:AWS::S3::MultiRegionAccessPoint 和 AWS::S3::MultiRegionAccessPointPolicy。

示例如下:

BlockPublicAcls: true
        IgnorePublicAcls: true
        BlockPublicPolicy: true
        RestrictPublicBuckets: true
  MyMultiRegionAccessPointPolicy:
    Type: AWS::S3::MultiRegionAccessPointPolicy
    Properties:
      MrapName: !Ref MyS3MultiRegionAccessPoint
      Policy:
        Version: 2012-10-17
        Statement:
          - Action: '*'
            Effect: Allow
            Resource: !Sub
              - 'arn:aws:s3::${AWS::AccountId}:accesspoint/${mrapalias}/object/*'
              - mrapalias: !GetAtt
                  - MyS3MultiRegionAccessPoint
                  - Alias
            Principal: {"AWS": !Ref "AWS::AccountId"}

AWS::S3::MultiRegionAccessPoint资源仅取决于 Amazon S3 存储桶名称。您无需引用其它区域堆栈,而且可以轻松地将 Amazon S3 多区域访问点集中定义到自己的堆栈中。另一方面,需要在每个 Amazon S3 存储桶上配置跨区域复制。

成本注意事项

当您使用 Amazon S3 多区域访问点在亚马逊云科技全球网络中路由请求时,除了 Amazon S3 请求、存储、数据传输和复制的标准费用外,还需支付 0.0033 美元/GB 的数据路由费用。如果您的应用程序通过互联网访问 Amazon S3 多区域访问点,则还需支付每 GB 的互联网加速成本。此费用取决于传输类型(上载或下载),以及客户端和存储桶位于相同还是不同的位置。有关详细信息,请访问 Amazon S3 定价页面并选择数据传输选项卡。

让我分享一些实例:

  • 亚马逊云科技区域内的所有流量:在这个简单的情况下,您的应用程序在美国东部(弗吉尼亚北部)运行,并在美国东部(弗吉尼亚北部)和美国西部(俄勒冈)配置两个 Amazon S3 存储桶。应用程序上载 100GB 的数据,最低延迟的存储桶位于美国东部(弗吉尼亚北部)。所有数据都由同一地区的 Amazon S3 多区域访问点路由,总成本为 0.33 美元。
  • 跨两个亚马逊云科技区域的所有流量:在这种情况下,您的应用程序在美国东部(弗吉尼亚北部)运行,并在美国东部(俄亥俄)和美国西部(俄勒冈)配置两个 Amazon S3 存储桶。该应用程序上载 100GB 的数据,最低延迟的存储桶位于美国东部(俄亥俄)。所有数据都由 Amazon S3 多区域访问点在两个亚马逊云科技区域进行路由。100GB 的数据路由成本与前面的示例(0.33 美元)相同,加上 Amazon S3 数据传输成本为 0.01 美元/GB,总成本为 1.33 美元。
  • 北美、欧洲和亚太地区互联网上的所有流量(下载和上载):在这种情况下,您的应用程序在北美、欧洲和亚洲的客户设备上运行,并在美国东部(弗吉尼亚北部)和欧洲(爱尔兰)配置两个 Amazon S3 存储桶。北美的一个客户上载 50GB 的数据,将其路由到美国东部(弗吉尼亚北部)的存储桶;欧洲的第二个客户从欧洲(爱尔兰)的存储桶下载 50GB 的数据;亚洲的第三个客户从欧洲(爱尔兰)的存储桶下载 50GB 的数据。150GB 的数据路由成本为 0.495 美元。此外,从 Amazon S3 传输到欧洲的数据为 0.09 美元/GB(9 美元),从北美到美国东部(弗吉尼亚北部)Amazon S3 存储桶的互联网加速成本为 0.0025 美元/GB(0.125 美元),从欧洲(爱尔兰)Amazon S3 存储桶到欧洲的互联网加速成本为 0.005 美元/GB(0.25 美元),互联网加速成本为 0.005 美元/GB(0.25 美元)从欧洲(爱尔兰)的 Amazon S3 存储桶到亚洲的加速成本为 0.05 美元/GB(2.5 美元)。总成本为 12.37 美元。请注意,此示例旨在展示互联网加速成本在各大洲的运作方式。另请注意,如果在亚洲增加一个 Amazon S3 存储桶,亚洲的互联网加速成本可能会降低一个数量级(请参阅下一个示例)。
  • 北美、欧洲和亚太地区的所有互联网流量(仅上载):在这种情况下,我们考虑与前面示例相同的条件。唯一的区别在于,所有客户只上载数据,而且您在亚太地区(新加坡)配置了额外的存储桶。数据路由成本相同(0.495 美元)。此外,从北美到美国东部(弗吉尼亚北部)Amazon S3 存储桶的互联网加速成本为 0.0025 美元/GB(0.125 美元),从欧洲到欧洲(爱尔兰)Amazon S3 存储桶的互联网加速成本为 0.0025 美元/GB(0.125 美元),以及从亚洲到亚太地区(新加坡) Amazon S3 存储桶的互联网加速成本为 0.01 美元/GB(0.5 美元)。总成本为 1.24 美元。

换句话说,路由成本很容易估计,不取决于应用程序类型或数据访问模式。互联网加速成本取决于访问模式(下载比上载更昂贵)、以及相对于最近的亚马逊云科技区域的客户端位置。对于通过互联网上载或下载数据的全球应用程序,您可以通过在每个大洲至少配置一个 Amazon S3 存储桶来最大限度地降低互联网加速成本。

现已推出

Amazon S3 多区域访问点允许您在跨多个亚马逊云科技区域访问数据时增加弹性并将应用程序性能提高高达 60%。我们期待收到有关您的使用案例的反馈,以便我们能够快速迭代并简化设计和实施多区域应用程序的方式。

您可以开始使用 Amazon S3 API、Amazon CLI、Amazon SDK、Amazon CloudFormation 或 Amazon S3 控制台。此项新增功能在全球 17 个亚马逊云科技区域提供(请参阅受支持的亚马逊云科技区域的完整列表)。

查看 Amazon S3 多区域访问点的技术文档。

本篇作者

Alex Casalboni

你可能感兴趣的