用最专业的眼光看待互联网
立即咨询在数据主权和隐私法规日益严格的背景下,组织希望找到灵活的解决方案,以平衡合规与云的敏捷性。使用 AWS Outposts 的 S3 解决方案,通过本地缓存 AWS IAM 权限,大幅减少请求的延迟,从而改善应用性能并提升用户体验。本文将展示如何配置 S3 on Outposts 的本地缓存,验证缓存的有效性,并衡量所带来的延迟改善效果。

随着数据主权和隐私法规的增多,许多组织正在寻找灵活的解决方案,以在遵守数据主权法规的同时,实现云的灵活性。例如,金融和医疗行业的用户需要在本地部署应用并存储数据,以确保符合相关法规。为了提供最佳用户体验,这些组织希望在所有位置实现一致的延迟,以确保全球范围内的应用表现可预测。
AWS Outposts 提供了一种无缝的混合解决方案,将 AWS 的能力扩展到任何本地或边缘位置,帮助满足数据主权的法规要求。使用 S3 on Outposts 的 Amazon Simple Storage Service (S3) API,能够提供一致的本地对象存储,以满足数据驻留及合规的需求。
在 2024 年 AWS Pi 日宣布的 S3 on Outposts 现已提供本地缓存的 AWS 身份与访问管理 (IAM) 权限,显著提高了在 Outposts 上运行的应用性能。这种本地缓存消除了来自父级 AWS 区域 的认证和授权操作所引起的首次字节延迟的波动,从而提升了对象 API 请求的性能。
本文将向您展示如何配置 S3 on Outposts 的 AWS IAM 权限的本地缓存,验证缓存是否正常使用,并衡量由此产生的延迟改善。本地缓存通过减少延迟和工作负载执行时间,提升了 S3 on Outposts 的性能,并且一致的延迟使用户在 Outposts 机架部署的任何位置都能获得一致和可预测的体验。借助本地缓存,您可以加速使用 S3 on Outposts 的应用的上市时间,而无需设计和测试 Outposts 和父 AWS 区域之间延迟的波动。
在您向 S3 on Outposts 发出 API 请求后,S3 on Outposts 的认证和授权数据会安全地本地缓存于 Outpost 中。您的后续 S3 对象 API 请求将凭借缓存的数据进行认证和授权,从而消除往返地区造成的延迟。当 Outpost 连接到区域时,缓存的有效期最长可达十分钟,并在您发起 S3 on Outposts API 请求时异步刷新,以确保使用最新的策略。S3 on Outposts 仅在请求使用 签名版本 4A (SigV4A) 进行签名时缓存认证和授权数据。
要部署此解决方案,您需要一个连接到选定区域的 Outposts 架,以及具有 S3 on Outposts 能力的环境。您必须创建一个 Amazon 虚拟私有云 (Amazon VPC)、一个 S3 on Outposts 端点、一个 S3 on Outposts 存储桶 和一个 S3 on Outposts 访问点。您还需要使用最新版本的 AWS boto3 SDK,并安装 AWS 通用运行时 (AWS CRT) 库,以便使用 SigV4A 算法对请求进行签名。
在这个实践指南中,我们使用 Boto3 Python SDK 向 S3 on Outposts 存储桶发出请求,并比较有无认证和授权缓存 (auth cache) 的性能。我们将向您展示如何进行 S3 on Outposts 的性能基准测试,并展示使用 S3 on Outposts auth cache 的性能优势。步骤如下:
配置所需的基础设施配置客户端编写性能基准测试的 Python 脚本运行含有本地缓存的脚本运行不含本地缓存的脚本要开始 S3 on Outposts 性能基准测试所需的基础设施的配置,您需要在 Outposts 创建一个 S3 on Outposts 存储桶 和 访问点。接着,在 Outposts 架上启动一个 EC2 实例。在这个实践指南中,我们使用一个 m5large 实例,并将其连接至 useast1 区域的 Boston Outpost,但您可以使用您 Outposts 架上可用的任何实例。
安装最新版本的 AWS 命令行界面 (AWS CLI)。执行以下命令以验证您可以访问您 S3 on Outposts 的存储桶:
bashaws s3api listobjectsv2 bucket lts3outpostaccesspointarngt
在您的 Amazon Elastic Compute Cloud (Amazon EC2) 实例上安装最新版本的 boto3,例如最新版本的 AWS CRT:
bashpip install boto3[crt]
如果您已经安装了 boto3,则可以通过以下命令升级至最新版本:
bashpip install boto3 upgrade
魔戒梯子使用教程默认情况下,最新版本的 boto3 与 AWS CRT 一起使用 SigV4A 对所有 API 请求进行签名。如果未安装 AWS CRT,boto3 将回退至使用签名版本 4 (SigV4) 对 API 请求进行签名。
接下来,我们将逐步演示一个脚本,该脚本向 S3 on Outpost 发出对象 API 请求,测量每个请求的延迟,并将指标发布到 Amazon CloudWatch 中。
首先,我们创建新的 Amazon S3 和 CloudWatch 客户端:
pythonimport boto3from botocoreclient import Configimport timefrom datetime import datetimeimport threading
session = boto3sessionSession()s3client = sessionclient(servicename=s3)cwclient = boto3client(cloudwatch)
接下来,我们定义两个方法,用于向 S3 on Outposts 存储桶执行 HEAD 和 PUT 对象请求:
python
def headobject(bucketId key) nowtime = datetimenow() starttime = timeperfcounterns() s3clientheadobject(Bucket=bucketId Key=key) endtime = timeperfcounterns() millisecondlatency = (endtime starttime) / 1000000 return { MetricName S3RequestLatency Timestamp nowtime Value millisecondlatency Unit Milliseconds }
def putobject(bucketId key) data = b 4096 # 4KB 的数据 nowtime = datetimenow() starttime = timeperfcounterns() s3clientputobject(Bucket=bucketId Key=key Body=data) endtime = timeperfcounterns() millisecondlatency = (endtime starttime) / 1000000 return { MetricName S3RequestLatency Timestamp nowtime Value millisecondlatency Unit Milliseconds }
接下来,我们创建一个方法来执行向 S3 on Outposts 存储桶的 PUT 和 HEAD 请求,并将延迟指标发布到 CloudWatch:
pythondef treadworker(jobId requestCount) requestmetrics = [] bucketname = # 发送 PUT 请求 for x in range(requestCount) requestmetricsappend(putobject(bucketname f{jobId}/{x})) requestmetricsappend(headobject(bucketname f{jobId}/{x})) limit = min(len(requestmetrics) 1000) for i in range(0 len(requestmetrics) 1000) cwclientputmetricdata( Namespace=Sigv4aTest MetricData=requestmetrics[i i limit] )
def sendrequests(threadCount requestCount) threads = [] for x in range(threadCount) thread = threadingThread(target=treadworker args=(fjob{x} requestCount)) threadsappend(thread) threadstart() for thread in threads threadjoin()
现在我们可以配置测试参数并启动工作负载。THREADCOUNT 决定要启动的线程数量,REQUESTCOUNT 决定要发出的请求数量。我们选择启动五个线程,每个线程发送 10K 次 PUT 和 10K 次 HEAD 请求。
pythonTHREADCOUNT = 5 REQUESTCOUNT = 10000sendrequests(THREADCOUNT REQUESTCOUNT)
通过此脚本,我们现在可以比较有和没有授权及认证缓存的 S3 on Outposts 的性能。首先,我们使用 SigV4A 运行脚本。使用 time 命令来测量脚本执行所需的时间。
bashtime python3 s3workloadpy
此脚本将在 Sigv4aTest 命名空间下生成 CloudWatch 指标。您可以导航到 CloudWatch 控制台,查看 Sigv4aTest Metrics with no dimensions S3RequestLatency。您可以利用 CloudWatch 功能对统计数据进行图表绘制和可视化。
要运行不含 S3 on Outposts 缓存的脚本,必须显式配置 Amazon S3 使用 SigV4。
pythons3client = sessionclient(servicename=s3 config=Config(signatureversion=v4))
再运行一次脚本,使用以下命令:
bashtime python3 s3workloadpy
您可以使用 AWS CloudTrail 验证 S3 on Outposts 的 auth cache 是否有效,方法是检查 API 请求是否使用 SigV4A 签名。您可以为 S3 on Outposts 启用 CloudTrail 日志,并通过访问 CloudTrail 日志的 additionalEventData 来验证请求的签名算法。使用 SigV4A 签名的请求其 SignatureVersion 设置为 AWS4ECDSAP256SHA256,而使用 SigV4 签名的请求其 SignatureVersion 设置为 AWS4HMACSHA256。
例如,以下 CloudTrail 日志显示 PUT 请求是使用 SigV4A 签名的:
json{ eventVersion 109 userIdentity {} eventTime 20240212T235848Z eventSource s3outpostsamazonawscom eventName PutObject awsRegion useast1 sourceIPAddress userAgent requestParameters {} responseElements {} additionalEventData { CipherSuite ECDHERSAAES128GCMSHA256 bytesTransferredIn 4096 xamzid2 SignatureVersion AWS4ECDSAP256SHA256 bytesTransferredOut 0 AuthenticationMethod AuthHeader } requestID eventID readOnly false resources [] eventType AwsApiCall managementEvent false recipientAccountId edgeDeviceDetails {} eventCategory Data}
一旦脚本执行完毕,我们可以比较有无 S3 on Outposts auth cache 的延迟情况。下图展示了在 S3 on Outposts 上进行 50000 次 PUT 和 HEAD 请求时,带缓存 (绿色部分) 和不带缓存 (红色部分) 的延迟概况。图中的红色部分显示了未使用 auth cache 的 S3 on Outposts 请求在 P25、P50、P75 和 P99 延迟指标,在未使用缓存的情况下,P99 延迟从超过 100 毫秒降至 50 毫秒以下。
如 图 1 所示,auth cache 显著降低了 S3 on Outposts 的延迟,从而消除了因认证和授权操作在区域内造成的往返延迟。此外,我们对 P25、P50 和 P75 延迟进行了详细分析。使用 auth cache 后,P50 延迟从约 50 毫秒降低至 20 毫秒,下降幅度达到 60。
最后,使用 auth cache 的工作负载执行总时间减少了 40。在没有缓存的情况下,工作负载完成需要 12 分钟,而使用缓存后,工作负载时间降至七分钟。
完成测试后,为了避免产生额外费用,您可以删除创建的所有 S3 on Outposts 资源和对象。有关删除 S3 on Outposts 对象的详细信息,请参见 Amazon S3 用户指南。您还需要 终止 用于运行脚本的 EC2 实例。
在本文中,我们展示了 S3 on Outposts 的本地缓存如何通过减少延迟和工作负载执行时间来改善搭载 S3 on Outposts 的应用性能。我们演示了如何配置 S3 on Outposts 的 AWS IAM 权限本地缓存,验证缓存的活跃性,并衡量由此带来的延迟改善效果。
通过本地缓存,您可以加速使用 S3 on Outposts 的应用市场时间,而无需设计和测试 Outposts 与父 AWS 区域之间延迟的波动。在我们的示例工作负载中,本地缓存将 S3 on Outposts 的 P50 延迟降低了 50,从而使整体执行时间降低了 40。一致的延迟使您能够为所有部署 Outposts 机架的位置的最终用户提供一致且可预测的体验。
为了让您的用户受益于这些优势,我们鼓励您将现有的使用 S3 on Outposts 的应用迁移至本地缓存,并测量性能改善。有关更多信息,请访问 S3 on Outposts 文档。
标签 Amazon Simple Storage Service (Amazon S3) AWS 云存储 AWS Outposts
![Boris Alexandrov](https//d2908