时隔16年Jeff Barr重返10.23-25 QCon上海站,带你看透AI如何重塑软件开发! 了解详情
写点什么

借助 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:09863
用户头像

发布了 1932 篇内容, 共 160.7 次阅读, 收获喜欢 81 次。

关注

评论

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

android开发教程!写给安卓软件工程师的3条建议,一线互联网公司面经总结

欢喜学安卓

android 程序员 面试 移动开发

Linux C/C++ 学习路线(已拿腾讯、百度等)

赖猫

c++ Linux服务器开发 LinuxC/C++

还不懂云数据库Redis是什么?快上车,一张图带你了解!

云数据库

大厂社招Java面经:蚂蚁金服、拼多多、字节跳动(现已入职蚂蚁)

Java架构之路

Java 程序员 架构 面试 编程语言

Yarn日志聚合优化—摆脱HDFS依赖

kwang

大数据 YARN

【20万大奖】参加APICloud3.0案例与AVM组件大赛,赢现金大奖

YonBuilder低代码开发平台

开发者 大前端 APP开发 APICloud

守护网络安全不是问题,iptables的四表五链为你开启“八卦阵”

华为云开发者联盟

网络安全 iptables 虚拟私有云 安全组 网络ACL

Redis 如何存储上亿级别的用户状态?

薇薇

数据库 redis 存储

Mysql是怎么运行的-读书笔记1

一个大红包

3月日更

华为云PB级数据库GaussDB(for Redis)介绍第四期:高斯 Geo的介绍与应用

华为云开发者联盟

数据库 redis 华为云 geo Gauss DB

世纪联华的 Serverless 之路

Serverless Devs

Java Serverless 架构 运维 云原生

Nacos配置安全最佳实践

Robert Lu

nacos 配置中心

Linux 查询 OS、CPU、内存、硬盘信息

薇薇

Linux cpu 内存

一个三本生的Java进阶之路:6年时间,从菜鸟到阿里P7!

Java架构之路

Java 程序员 架构 面试 编程语言

滚雪球学 Python 之内置函数:filter、map、reduce、zip、enumerate

梦想橡皮擦

28天写作 3月日更

身份和访问管理(IAM)

龙归科技

iam 身份和访问管理

“看得见 摸不着”的数字货币 助推数字经济强国建设

CECBC

数字经济

大作业(二)

cc

#开工新姿势#开启一年新征程,云社区叫你来充电啦!

华为云开发者联盟

内容 技术人 华为云 文章 云社区

如何破解区块链人才的结构性问题?

CECBC

区块链

震荡的比特币:区块链的“照妖镜”

CECBC

数字货币

项目截图

赝品

四年Java开发,面试核心知识点(腾讯+阿里+快手面经)附答案

Java架构之路

Java 程序员 架构 面试 编程语言

HashData携手中国移动 共筑通信技术数字化之路

酷克数据HashData

数据库 解决方案

【笔记】第七周 第1课

Geek_娴子

数字货币持币生息钱包系统开发搭建

薇電13242772558

区块链 数字货币

2021年爆锤39K月薪Offer!阿里巴巴Java面试(知识点)整理

Java架构追梦

Java 阿里巴巴 架构 面试 全栈知识点

开课啦 dubbo-go 微服务升级实战

阿里巴巴云原生

容器 微服务 云原生 k8s dubbo

音乐api接入HIFIVE音乐开放平台,获取百万正版音乐,最快30分钟集成上线!

曲多多(嗨翻屋)版权音乐

API sdk 音乐 物联网,API,sdk

【动态规划/路径问题】强化 DP 分析方法练习题 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

终于有人把 "高可用" 说清楚了

架构精进之路

3月日更

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