亚马逊云科技精选博客
我们使用机器学习技术将英文博客翻译为简体中文。您可以点击导航栏中的“中文(简体)”切换到英文版本。
为亚马逊 SQS 实施 亚马逊云科技 架构完善的最佳实践 — 第 1 部分
本博客由高级解决方案架构师Chetan Makvana和高级解决方案架构师Hardik Vasa撰写。
为了帮助您识别和实施这些最佳实践,亚马逊云科技 提供了 AW
这个由三部分组成的博客系列涵盖了实施 SQS 最佳实践的 亚马逊云科技 架构完善框架的每个支柱。这篇博客文章是该系列的第 1 部分,讨论了使用 亚马逊云科技 架构完善框架 的
另请参见该系列的其他两个部分:
-
为 Amazon SQS 实施 亚马逊云科技 架构完善的最佳实践 — 第 2 部分:安全性和可靠性 -
为 Amazon SQS 实施 亚马逊云科技 架构完善的最佳实践 — 第 3 部分:性能效率、成本优化和可持续性
解决方案概述
该解决方案架构显示了库存管理系统的示例。该系统利用
然后,这些 CSV 文件被上传到 S3 存储桶,整合和保护库存数据以供库存管理系统访问。系统使用 Lambda 函数读取和解析 CSV 文件,提取单个库存更新记录。后端 Lambda 函数将每条库存更新记录转换为消息并将其发送到 SQS 队列。另一个 Lambda 函数持续轮询 SQS 队列中是否有新消息。收到消息后,它会检索库存更新详细信息并相应地更新 DynamoDB 中的库存水平。
这可确保每种产品的库存数量准确无误并反映最新的变化。通过这种方式,库存管理系统可以实时了解不同地点和供应商的库存水平,使公司能够精确地监控产品的可用性。在
此示例贯穿本博客系列,重点介绍如何基于 亚马逊云科技 架构完善的框架实施 SQS 最佳实践。
卓越运营支柱
卓越运营支柱包括支持开发和有效运行工作负载、深入了解其运营情况以及持续改进支持流程和程序以创造业务价值的能力。为了实现卓越运营,该支柱推荐了最佳实践,例如定义工作量指标和实现交易可追溯性。这使组织能够获得有关其运营的宝贵见解,发现潜在问题,并相应地优化服务以改善客户体验。此外,了解应用程序的运行状况对于确保其按预期运行至关重要。
最佳实践:使用基础架构即代码部署 SQS
要管理 SQS 资源,您可以使用不同的 IaC 工具,例如
本博客系列介绍如何使用带有 Python 的 亚马逊云科技 CDK 来演示使用 SQS 的最佳实践。例如,以下 亚马逊云科技 CDK 代码创建了一个新的 SQS 队列:
from aws_cdk import (
Duration,
Stack,
aws_sqs as sqs,
)
from constructs import Construct
class SqsCdBlogStack(Stack):
def __init__(self, scope: Construct, construct_id: str, **kwargs) -> None:
super().__init__(scope, construct_id, **kwargs)
# The code that defines your stack goes here
# example resource
queue = sqs.Queue(
self,
"InventoryUpdatesQueue",
visibility_timeout=Duration.seconds(300),
)
最佳实践:配置 CloudWatch 警报,获取大致年龄最旧的消息
必须了解
SQS 提供的关键指标之一是 Aproxim ateAgeofoldestMessag
e 指标。通过监控此指标,您可以确定队列中最早的消息的使用年限,并采取适当的措施来确保消息得到及时处理。要为 Aproxim ateAgeofoldestMessage
指标设置警报,你可以使用 CloudWatch 警报。您可以将这些警报配置为在消息长时间留在队列中时发出警报。您可以使用这些警报来采取行动,例如,扩大使用者的规模,使其更快地处理消息,或者调查消息处理中的潜在问题。
在库存管理示例中,利用 Approx mateAgeofoldestMessage
指标可以提供对 SQS 队列运行状况和性能的宝贵见解。通过监控该指标,您可以检测处理延迟、优化性能并确保在所需时间范围内处理库存更新。这可确保您的库存水平保持准确和最新。以下代码创建警报,如果最早的库存更新请求在队列中超过 30 秒,则会触发该警报。
# Create a CloudWatch alarm for ApproximateAgeOfOldestMessage metric
alarm = cloudwatch.Alarm(
self,
"OldInventoryUpdatesAlarm",
alarm_name="OldInventoryUpdatesAlarm",
metric=queue.metric_approximate_age_of_oldest_message(),
threshold=600, # Specify your desired threshold value in seconds
evaluation_periods=1,
comparison_operator=cloudwatch.ComparisonOperator.GREATER_THAN_OR_EQUAL_TO_THRESHOLD,
)
最佳实践:在向队列发送消息时添加跟踪标头,以提供分布式跟踪功能,从而更快地进行故障排除
通过实施分布式跟踪,您可以清楚地了解 SQS 队列中的消息流,识别任何瓶颈或潜在问题,并主动对任何表明不健康状态的信号做出反应。跟踪提供了更广阔的应用程序连续视图,并有助于跟踪用户在应用程序中的旅程或交易。
awstrace
Header 系统属性跟踪标头。 即使无法通过 X@@ -Ray SDK 进行自动插入,例如,在为新语言构建跟踪 SDK 时,也可以使用 AwstraceHeader
。如果您使用的是 Lambda 下游使用者,则跟踪上下文传播是自动的。
在库存管理示例中,通过使用带有 X-Ray for SQS 的分布式跟踪,您可以深入了解库存管理系统的性能、行为和依赖关系。这种可见性使您能够优化性能,更有效地解决问题,并确保系统的平稳高效运行。以下代码设置了 CSV 处理 Lambda 函数和启用主动跟踪的后端处理 Lambda 函数。Lambda 函数会自动从 SQS 接收 X- Ray TraceID。
# Create pre-processing Lambda function
csv_processing_to_sqs_function = _lambda.Function(
self,
"CSVProcessingToSQSFunction",
runtime=_lambda.Runtime.PYTHON_3_8,
code=_lambda.Code.from_asset("sqs_blog/lambda"),
handler="CSVProcessingToSQSFunction.lambda_handler",
role=role,
tracing=Tracing.ACTIVE, # Enable active tracing with X-Ray
)
# Create a post-processing Lambda function with the specified role
sqs_to_dynamodb_function = _lambda.Function(
self,
"SQSToDynamoDBFunction",
runtime=_lambda.Runtime.PYTHON_3_8,
code=_lambda.Code.from_asset("sqs_blog/lambda"),
handler="SQSToDynamoDBFunction.lambda_handler",
role=role,
tracing=Tracing.ACTIVE, # Enable active tracing with X-Ray
)
结论
这篇博文探讨了 SQS 的最佳实践,重点是 亚马逊云科技 架构完善的框架的卓越运营支柱。我们探讨了确保使用 SQS 的应用程序平稳运行和最佳性能的关键注意事项。此外,我们还探讨了基础设施即代码在简化基础设施管理方面的优势,并展示了如何使用 亚马逊云科技 CDK 来预置和管理 SQS 资源。
如需更多无服务器学习资源,请访问