[SEO 副标题]
本指南可以帮助您将 Amazon DynamoDB 与 Amazon OpenSearch Service 集成,以实现实时搜索。大多数应用程序应该使用 Amazon DynamoDB 与 Amazon OpenSearch Service 的零 ETL 集成。对于要求与零 ETL 集成不一致的应用程序,本指南演示了如何通过并行函数将 DynamoDB 中的初始数据加载到 OpenSearch Service,以及如何将新数据复制到 OpenSearch Service。通过将数据保存在两个位置,您可以将查询定位到最适合您要求的数据库:DynamoDB 可以支持任何对性能和可扩展性有需求的固定访问模式,OpenSearch Service 则可以支持对搜索和筛选灵活性有要求的访问模式。
请注意:[免责声明]
架构图
[架构图描述]
初始加载
第 1 步
为了处理现有数据,将调用 AWS Lambda 函数来描述 Amazon DynamoDB 表,并根据返回的项目数将其拆分为多个段。该函数会为每个段号向 Amazon Simple Queue Service(Amazon SQS)队列写入一条消息。
第 2 步
Amazon SQS 充当 Lambda 的事件来源。Lambda 将从队列中的消息调用函数,同时并行处理 DynamoDB 表的段。
第 3 步
Lambda 函数使用并行扫描,从 Amazon SQS 读取源事件中列出的 DynamoDB 表的段。
第 4 步
然后,该函数通过批量创建操作,将从 DynamoDB 检索到的数据批量写入 Amazon OpenSearch Service。
流式传输变更
第 5 步
在 DynamoDB 中插入或更新项目以调用 DynamoDB 流的捕获。
第 6 步
DynamoDB 流将从 DynamoDB 捕获的项目级修改发送到 Lambda 流式更新函数。
第 7 步
Lambda 函数通过批量索引操作将这些数据批量写入 OpenSearch Service。使用 Amazon CloudWatch 中的 SearchableDocuments 指标跟踪摄取的文档。
开始使用
Well-Architected 支柱
当您在云中构建系统时,AWS Well-Architected Framework 可以帮助您了解所做决策的利弊。框架的六大支柱使您能够学习设计和操作可靠、安全、高效、经济高效且可持续的系统的架构最佳实践。使用 AWS 管理控制台中免费提供的 AWS Well-Architected Tool,您可以通过回答每个支柱的一组问题,根据这些最佳实践来检查您的工作负载。
上面的架构图是按照 Well-Architected 最佳实践创建的解决方案示例。要做到完全的良好架构,您应该遵循尽可能多的 Well-Architected 最佳实践。
-
卓越运营
AWS Cloud Development Kit(AWS CDK)将解决方案的基础设施定义为代码,帮助您实现一致的部署。Lambda 将工作划分为较小的工作单元,每个工作单元负责不同的应用程序功函数。这些单一任务函数可减少人为错误,并支持小规模的增量更改,执行失败时更容易回滚。
-
安全性
在适用情况下,本指南优先在专用 Amazon Virtual Private Cloud(Amazon VPC)网络中,而不是公共网络中启动服务。通过 Amazon VPC 建立的专用网络可以控制数据的访问方式,从而保障各层的安全性。此外,使用单一用途、最低权限的 AWS Identity and Access Management(IAM)策略有助于防止权限更改产生更广泛的、意想不到的后果,并降低用户错误处理敏感数据的风险。AWS Secrets Manager 生成并安全地存储管理员机密,防止用户将凭证存储在有泄露风险的代码或环境变量中。
-
可靠性
如果部分导入失败,Amazon SQS 会提供自动重试机制,帮助您快速从失败中恢复。作为记录系统,DynamoDB 使用时间点恢复进行持续备份,可以恢复到过去 35 天内的任何一秒钟。OpenSearch Service 通过使用“创建”操作进行初始数据加载,防止旧数据覆盖新数据,从而帮助您防止两个数据库之间出现偏差。OpenSearch Service 设置为使用单节点集群,但您可以将其更改为多可用区集群以保持生产中的可用性。
-
性能效率
Lambda 支持并行化工作负载:从 DynamoDB 进行读取会经过分段并行扫描,这些扫描分布在多个 Lambda 函数调用中。这种并行化可实现比单个线程管理的吞吐量高得多的吞吐量。
-
成本优化
Lambda 批量读取 DynamoDB 项目,而不是将其作为单个 GetItem 请求读取。因此,本指南消耗的读取容量单位较少。通过减少在初始化连接等任务上的工作量,使用批处理可以缩短计算时间并减少 Lambda 调用次数,从而降低计算成本。此外,OpenSearch Service 批处理操作非常高效,可帮助您降低计算资源的总体成本。
-
可持续性
Lambda 仅在需要将数据移入 OpenSearch Service 时调用函数,不会在空闲时运行。这可以帮助您最大限度地利用计算资源。此外,作为一项无服务器的托管服务,DynamoDB 有助于减少效率低下的情况并降低工作负载消耗的总功率。
相关内容
Amazon DynamoDB 与 Amazon OpenSearch Service 的零 ETL 集成现已可用
免责声明
示例代码;软件库;命令行工具;概念验证;模板;或其他相关技术(包括由我方人员提供的任何前述项)作为 AWS 内容按照《AWS 客户协议》或您与 AWS 之间的相关书面协议(以适用者为准)向您提供。您不应将这些 AWS 内容用在您的生产账户中,或用于生产或其他关键数据。您负责根据特定质量控制规程和标准测试、保护和优化 AWS 内容,例如示例代码,以使其适合生产级应用。部署 AWS 内容可能会因创建或使用 AWS 可收费资源(例如,运行 Amazon EC2 实例或使用 Amazon S3 存储)而产生 AWS 费用。
本指南中提及第三方服务或组织并不意味着 Amazon 或 AWS 与第三方之间存在认可、赞助或从属关系。AWS 的指导是一个技术起点,您可以在部署架构时自定义与第三方服务的集成。