文章图片
构建多区域应用程序使您能够提高终端用户的延迟时间,在发生意外灾难时实现更高的可用性和弹性,并遵守与数据持久性和数据保留相关的业务要求。例如,您可能希望减少后端服务的动态 API 调用的总体延迟。或者,您可能希望延长单区域部署以处理互联网路由问题、海底电缆故障或区域连接问题,从而避免成本高昂的停机时间。今天,得益于多区域数据复制功能,例如 Amazon DynamoDB 全局表、Amazon Aurora 全球数据库、 Amazon ElastiCache全局数据存储和 Amazon Simple Storage Service (Amazon S3) 跨区域复制,您可以跨全球 25 个亚马逊云科技区域构建多区域应用程序。
- Amazon DynamoDB:
https://aws.amazon.com/dynamodb/ - Amazon Aurora:
https://aws.amazon.com/rds/au... - Amazon ElastiCache
https://aws.amazon.com/elasti... - Amazon Simple Storage Service (Amazon S3)
https://aws.amazon.com/s3/
近期,我们很高兴地宣布 Amazon S3 多区域访问点正式发布,这是一项新的 Amazon S3 功能,允许您定义跨越多个亚马逊云科技区域中存储桶的全球端点。借助 Amazon S3 多区域访问点,您可以利用单个区域中的相同简单架构构建多区域应用程序。
- Amazon S3 多区域访问点:
https://aws.amazon.com/s3/fea...
- Amazon Global Accelerator:
https://aws.amazon.com/de/glo...
让我向您展示如何使用 Amazon S3 控制台进行创建。每个访问点都需要一个账户级别唯一的名称。
创建之后,您可以通过其别名来访问,该别名是自动生成且全球唯一的。别名看起来像一个以 .mrap 结尾的随机字符串 — 例如 mmqdt41e4bf6x.mrap 。也可以通过https://mmqdt41e4bf6x.mrap.s3... 、VPC或使用Amazon PrivateLink 在本地部署访问。
- Amazon PrivateLink:
https://aws.amazon.com/privat...
文章图片
然后,您将多个存储桶(新存储桶或现有存储桶)与访问点关联,每个区域一个。如果您需要数据复制,则还需要启用存储桶版本控制。
文章图片
最后,您为访问点配置公共访问数据块设置。原定设置下,所有公共访问都被阻止,这在大多数情况下都能正常运行。
创建过程是异步的,您可以在控制台中查看创建状态,也可以通过 Amazon CLI 列出 Amazon S3 多区域访问点来查看创建状态。当它变为就绪后,您可以为访问点策略和对象复制配置可选设置。
文章图片
与常规访问点类似,您可以自定义访问控制策略,以限制与存储桶权限相关的访问点的使用。请记住,访问点和底层存储桶都必须允许请求。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 IAM 角色。请注意,要添加或移除存储桶,您需要使用修订后的列表创建一个新的 Amazon S3 多区域访问点。
除了复制规则之外,还可以在这里配置复制选项,例如复制时间控制 (RTC)、复制指标和通知,以及双向同步。对于复制速度很重要的使用案例,RTC 允许您在几秒钟内复制大多数新对象,并在 15 分钟内复制 99.99% 的对象;复制指标允许您监控存储桶在对象和字节数方面的同步程度;双向同步允许您实现双活配置,适用于需要跨存储桶复制对象元数据的大量使用案例。
- 复制时间控制 (RTC):
https://docs.aws.amazon.com/A... - 复制指标和通知:
https://docs.aws.amazon.com/A... - 双向同步:
https://docs.aws.amazon.com/A...
文章图片
配置复制后,您将获得非常有用的视觉和交互式摘要,允许您验证哪些亚马逊云科技区域已启用。您将看到它们在地图上的位置、区域存储桶的名称以及正在应用哪些复制规则。
文章图片
定义并正确配置 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 CloudWatch:
https://aws.amazon.com/cloudw...
示例如下:
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 多区域访问点允许您在跨多个亚马逊云科技区域访问数据时增加弹性并将应用程序性能提高高达 60%。我们期待收到有关您的使用案例的反馈,以便我们能够快速迭代并简化设计和实施多区域应用程序的方式。
您可以开始使用 Amazon S3 API、Amazon CLI、Amazon SDK、Amazon CloudFormation 或 Amazon S3 控制台。此项新增功能在全球 17 个亚马逊云科技区域提供(请参阅受支持的亚马逊云科技区域的完整列表)。
- Amazon S3 控制台:
https://console.aws.amazon.co... - 完整列表:
https://docs.aws.amazon.com/A...
- 技术文档:
https://docs.aws.amazon.com/A...
Alex Casalboni
【如何使用 Amazon S3 多区域访问点提高多区域应用程序的性能速度和可用性】
推荐阅读
- 基于Amazon ECS Fargate构建Apache Superset
- Apache Atlas 数据血缘
- 面向未来,我们来聊一聊什么是现代化数据架构
- Amazon DynamoDB 在智能湖仓架构中的实践
- Amazon Redshift 表设计优化 – 优化已有数据表中的列大小
- 呼叫医生云! Amazon HealthLake 正式推出
- 在Amazon SageMaker中灵活使用多种存储服务