写点什么

借助 Lambda,结合使用 DynamoDB 和 Amazon Elasticsearch

  • 2019-10-08
  • 本文字数:1543 字

    阅读完需:约 5 分钟

借助 Lambda,结合使用 DynamoDB 和 Amazon Elasticsearch


在 Fender Digital,我们于 2016 年年中开始使用 Lambda,并在 2017 年 1 月全面为所有新服务采用了这种语言。在迁移到 Lambda 的同时,我们也希望停止使用 RDBMS,除非我们确实需要关系型数据存储,而事实也证明,我们的大多数用例并非必须使用关系型数据存储。DynamoDB 采用基于用量的成本模式,是数据存储的理想之选;但它的不足之处在于不支持全文查询。Amazon Elasticsearch 提供了我们需要的搜索功能,但此前我们并不习惯在主要数据存储中使用这种语言。由于这两种选项都不能满足我们的需求,因此我们的工程团队提出了一种方法,该方法同时使用 DynamoDB 和 Elasticsearch,通过使用由 DynamoDB Stream 事件在表上调用的 Lambda 函数使集群保持最新状态。通过这种方式,我们可以根据流事件中的数据确定何时需要在集群中添加、删除或更新项目。


DynamoDB 和 AWS Elasticsearch 服务的这种组合非常适合我们的 Fender Play 课程内容,能够很好地支持包含教学内容的曲目的全文查询。在 Fender Play 管理员创建课程内容时,会将其写入 DynamoDB,使用新项目触发流事件,而新项目会将其插入到 Elasticsearch 集群之中,允许用户查询他们所查找的课程内容。



我们不使用 Elasticsearch 作为主要数据存储的原因在于,除了集群快照以外,我们没有来自事实来源的灾难恢复解决方案。我们使用 Elasticsearch 的每项基于 Lambda 的服务都有一个 Lambda 函数,可以通过执行 DynamoDB 表扫描来重新填充索引。对于大型表,重新填充操作必然会超过 Lambda 调用的五分钟时间限制,因此我们使用 AWS Step Functions 执行重新填充过程。调用 Step Function 时,它会调用以一个空白 JSON 文档作为输入的重新填充函数。在调用过程中,重新填充函数内的扫描进程会跟踪时间,在扫描停止的四分钟后,任何剩余的项目都会刷入集群之中,扫描中最后一个评估的关键字会返回给状态机。状态机进入选择状态,并在这种状态下检查重新填充函数的返回值。如果返回值包含最后一个评估的关键字,则状态机使用最后一个评估的关键字调用重新填充函数,以便从上次停止的位置处继续扫描。这样,只要最后一个评估的关键字返回到状态机,系统就会继续调用重新填充函数。在重新填充函数完成扫描时,它会将一个空白的 JSON 文档返回到状态机,表示集群重新填充完成。



今年,随着我们继续扩展对 Lambda 的应用,我们制定了宏大的目标。我们会将基于 EC2 的服务迁移到 Lambda,在多个区域进行这样的设置,以便根据用户位置提供更迅捷的响应,并在某个区域不可用时提高应用程序的恢复能力。我们将使用 Route 53 的地理位置路由功能,根据用户所在的位置将 API 流量定向到特定区域。我们的服务将以“主动-主动”配置模式部署到多个区域,在区域之间实现近乎实时的数据复制。我们的初步计划是通过表流实现我们自己的跨区域 DynamoDB 表复制。但是,在 re:Invent 2017 大会上公布全局表之后,跨区域表同步现已成为 DynamoDB 的一项功能。我们部署应用程序的每个区域都有自己的 DynamoDB 表和 Elasticsearch 集群,在表中的项目发生修改时,表流会调用 Lambda 函数,让集群与表保持同步。通过这种方式,我们就能确保所有区域中的 Elasticsearch 集群几乎实时地保持更新,这样即便某个受支持的区域发生服务中断,用户体验也丝毫不会受到影响。


作者介绍:


Michelle Kung


Michelle Kung 目前负责 AWS 的初创公司相关内容,先前曾担任 Index Ventures 公司的内容主管。在加入企业界之前,Michelle 曾任《华尔街日报》的记者和编辑、《赫芬顿邮报》的初创业务编辑、《波士顿环球报》的记者、《出版人周刊》的专栏作家和《娱乐周刊》的撰稿人。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/combining-dynamodb-amazon-elasticsearch-lambda/


2019-10-08 14:09894
用户头像

发布了 1964 篇内容, 共 168.6 次阅读, 收获喜欢 83 次。

关注

评论

发布
暂无评论
发现更多内容

C/C++编译命令捕获机制及实现

maijun

编译命令捕获

千万不要忽略PCB设计中线宽线距的重要性

华秋电子

PCB

用友Fast by BIP&阿里云联合产品发布!助力企业快速实现数智化

用友BIP

Fast by BIP

如何找到一款合适的低代码开发平台?

YonBuilder低代码开发平台

R语言之数值型描述分析

timerring

R 语言

大数据计算引擎 EasyMR 如何简单高效管理 Yarn 资源队列

袋鼠云数栈

YARN

[BitSail] Connector开发详解系列四:Sink、Writer

字节跳动数据平台

大数据 数据中台 数据治理 数据安全 企业号9月PK榜

杰哥教你面试之一百问系列:java多线程

程序那些事

程序那些事 面试秘籍 杰哥教你面试

方案选择、落地与改进,企业如何突破阻力,打造全新ITSM体系?Atlassian白金合作伙伴——龙智专家解读

龙智—DevSecOps解决方案

ITSM devops国际峰会

什么是渗透测试?

小魏写代码

一文看懂研发效能提升 | 京东云技术团队

京东科技开发者

研发效能

用了这么久SpringBoot却还不知道的一个小技巧

java易二三

Java 程序员 计算机

活动预告 | 龙智、紫龙游戏与JFrog专家将出席龙智DevSecOps研讨会,探讨企业大规模开发创新

龙智—DevSecOps解决方案

Atlassian 大规模开发 JFrog

如何设计一个高质量的 API 接口?

java易二三

Java 编程 程序员 计算机 API

字节跳动云原生成本优化实践开源项目 Katalyst |社区编程挑战启动!

字节跳动开源

开源 编码 社区 社区活动

海量用户IM聊天室的架构设计与实践

JackJiang

网络编程 即时通讯 IM

DataWorks增强分析发布,一站式数据查询分析与可视化

阿里云大数据AI技术

大数据

稳定性建设框架 | 京东物流技术团队

京东科技开发者

超时管理 稳定性治理 企业号 8 月 PK 榜 稳定性建设

用ChatGPT做一个Chrome扩展 | 京东云技术团队

京东科技开发者

chrome ChatGPT Chrome Extension

王文京:构建企业服务大生态,共同服务企业数智化

用友BIP

企业服务

【YonBuilder 课堂】“入职申请单” 的创建流程

YonBuilder低代码开发平台

直播平台源码弹性云托管技术:稳定直播与降低成本的利器

山东布谷科技

软件开发 源码搭建 直播平台源码 弹性云托管

芯片开发之难如何破解?龙智诚邀您前往D&R IP-SoC China 2023 Day

龙智—DevSecOps解决方案

芯片 芯片开发

安全可信|权威认证!天翼云边缘安全加速平台AccessOne护航企业行稳致远!

天翼云开发者社区

云计算 软件安全

PCB工艺制程能力介绍及解析(下)

华秋电子

PCB

软通咨询:引领制造业数字化转型新路径

软通咨询

数字化转型 制造业数字化

租赁LED显示屏需要注意什么问题

Dylan

活动 项目 LED显示屏

开发指导—利用CSS动画实现HarmonyOS动效(一)

HarmonyOS开发者

HarmonyOS

借助 Lambda,结合使用 DynamoDB 和 Amazon Elasticsearch_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章