如何使用 Amazon EventBridge 存档和重播事件

2020 年 11 月 22 日

如何使用 Amazon EventBridge 存档和重播事件

事件驱动型架构使用事件在一个或多个应用程序的组件之间共享信息。事件告诉我们“发生了什么事情”,可能是您收到了 API 请求、文件已上传到存储平台或数据库记录已更新。业务事件描述了与您的活动相关的内容,例如已创建新客户账户或付款已成功。


要使用您自己的应用程序、集成的软件即服务 (SaaS) 应用程序和 AWS 服务中的事件将应用程序连接在一起,您可以使用 Amazon EventBridge,它是一个无服务器事件总线,可从事件源中交付实时数据流,然后将该数据路由到 AWS Lambda 之类的目标中。


事件告诉我们,可以与对该信息感兴趣的任何人共享信息。创建新的客户账户后,新添加的服务可以使用此信息,而无需更改现有界面。例如,新的欺诈检测系统可以了解为执行安全检查和评估可能的欺诈活动而创建的所有新客户账户。


有时候您可能需要 重新处理 过去的事件。在很多使用案例中,重新处理很有用,例如:


  • 修复错误后,您可以重新处理受影响的事件以获得正确的结果。此方法假定您的应用程序可以多次处理同一事件。

  • 发布新功能时,您可以重新处理之前的事件,以将该功能的覆盖范围扩展到过去的数据。例如,添加到您的应用程序中的欺诈检测系统不仅可以访问新账户,还可以访问过去几周或几个月创建的账户。


为了使其操作更方便,我很高兴地分享一个消息,EventBridge 现在可以存档和重播事件:


  • 现在,您可以为发布到事件总线的事件创建加密 存档 。您可以存档所有事件或使用 EventBridge 规则所用的模式匹配语法对事件进行筛选。您可以无限期地存储事件,也可以设置 保留期 ,在保留期之后,旧事件将自动从存档中删除。

  • 您还可以 重播 存储在档案中的事件。事件将根据为事件总线定义的所有规则(但不是其他 AWS 服务所创建的托管规则)或您指定的规则重播。重播的事件包含一个额外的 replay-name 字段,以防您需要识别它们。开始重播时,您需要定义一个时间范围,并且只重播该时间范围内的事件。目前,您只能在存档事件的事件总线中重播事件。


可以对 EventBridge 的所有事件流程进行存档和重播,包括来自 AWS 平台、SaaS 集成的事件以及您自己的自定义事件。


重播期间,您当前的事件吞吐量不受影响,因为 EventBridge 为重播保留了单独的配额。就每秒发布的事件而言,重播的速度与您 当前在该区域的 PutEvents 限制相同。如果您要求提高 PutEvents 服务配额,重播速度将更快。这样,您的正常操作不会受到重播的影响。但是,您应检查处理重播的下游服务的性能和限制,以确保它们能够处理额外的工作负载。


您可以停止正在进行的重播。您无法继续已停止的重播,但您可以从以前停止的重播创建一个新的重播,并将开始时间设置为 lastReplayedEvent 时间戳。


让我们来看看存档和重播在实际中是如何运作的。


创建事件存档


EventBridge 控制台中,我为我的应用程序创建了一个 事件总线



然后,我使用简单的事件匹配模式为事件总线创建了一个 规则 ,以便将其收到的所有 DetailType 等于 customerCreated 的事件发送到将 Lambda 函数中,以将事件中的客户数据存储到数据库中。



现在,我选择事件总线,然后在 Actions (操作)菜单中选择 Archive events (存档事件)。



我给存档提供名称和描述,然后仔细检查来源是否是我的事件总线。我选择无限保留期,但是您可以选择要保留的天数,之后事件将自动从存档中删除。



选择 Next (下一步)。我可以选择使用类似于创建规则时使用的模式匹配语法筛选要存档的事件。我决定不添加任何筛选条件,并存档来自源的所有事件。



现在,我使用这个简单的 Python 代码将一些事件放入总线中:


import jsonimport boto3
EVENT_BUS = 'my-event-bus'
# Create EventBridge client
events = boto3.client('events')
eventDetail = { 'customerId': '123', 'customerName': 'Danilo', 'customerData': 'More info...'}
# Put an eventresponse = events.put_events( Entries=[ { 'EventBusName': EVENT_BUS, 'Detail': json.dumps(eventDetail), 'DetailType': 'customerCreated', 'Source': 'com.mycompany.myapp' } ])print(response['Entries'])
复制代码


我多次运行前面的代码。几分钟后,我看到我发布的活动已存档:



重播事件


过了一段时间,我在 Lambda 函数的代码中发现了一个错误… 当地址超过预期时,该函数不会存储所有数据(是的,这是常有的事 😉)。我修复了代码,以便正确处理新事件。使用 EventBridge,我还可以重播更老的事件来修复我已经处理的事件的结果。


我可以放心地这样做,因为我的应用程序为幂等形式。这意味着它可以在不改变结果的情况下使用相同的输入多次执行。在这种情况下,它会用正确的客户数据覆盖数据库项目。为了构建弹性应用程序,我总是建议设计幂等界面。通过这种方式,您可以轻松地从这样的错误中恢复,也可以放心地忽略重复的输入。


请注意,EventBridge 不提供排序保证,并且重播是以多线程方式执行的,这可能导致事件按照与原始排序顺序不同的顺序交付。


选择我的存档后,我点击 Start new replay (开始新的重播),然后为重播提供名称和描述。



我检查重播的来源是否是我的存档。我选择只重播触发修复错误的 Lambda 函数的规则。



我定义了重播的开始和结束时间(我可以使用本地时间或 UTC)并选择 Start Replay (开始重播)。



好吧,我的存档没那么大。重播开始时,只需几秒钟即可完成。我查看我的数据库,发现客户数据现在是正确的。错误修复了!


现已推出


事件存档和重播现已在除中国大陆和大阪之外的所有商业区域推出。有关更多信息,请参阅 AWS 区域服务列表。您可以通过控制台、AWS 命令行界面 (CLI)AWS 开发工具包AWS CloudFormation 使用这些新功能。


使用 Amazon EventBridge,您只需为您的使用量付费。对于存档和重播,您需要按存档的事件数量、存档使用的存储空间以及重播的消息数量付费。有关成本的更多信息和示例,请参阅 EventBridge 定价页面


要了解更多信息,请参阅文档。快告诉我您打算将这些新功能用在哪些方面吧!


Danilo


本文转载自亚马逊 AWS 官方博客。


原文链接


如何使用 Amazon EventBridge 存档和重播事件


2020 年 11 月 22 日 10:00576

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

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

劫持Chrome浏览器“获利”8000万元 | 法庭上的CTO(13)

赵新龙

CTO 法庭上的CTO

深入浅出 ZooKeeper

vivo互联网技术

zookeeper 分布式 ZAB

业务架构设计迭代演进思路

程序员架构进阶

架构 中台 业务架构

大佬带你看源码!阿里内部Android笔记火爆IT圈,3面直接拿到offer

欢喜学安卓

android 程序员 面试 移动开发

“有点技术之外,基本什么都没有”的CTO | 法庭上的CTO(15)

赵新龙

CTO 法庭上的CTO

股东变员工,所以不发工资?| 法庭上的CTO(18)

赵新龙

CTO 法庭上的CTO

为什么要TDD(测试驱动开发)

sherlockq

敏捷开发 TDD 极限编程

anonymous匿名者场外交易系统APP软件开发

开發I852946OIIO

系统开发

程序员开发指南!1-3年的Android开发工程师看过来,经典好文

欢喜学安卓

android 程序员 面试 移动开发

阿里P8大牛手把手教你!高级Android晋升之View渲染机制,先收藏了

欢喜学安卓

android 程序员 面试 移动开发

为新基建按下加速键:从openEuler看中国操作系统的产业生态未来

脑极体

(经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路

Java鱼仔

Java 程序员 面试 大学生

未签订劳动合同的CTO | 法庭上的 CTO(17)

赵新龙

CTO 法庭上的CTO

“盗窃”公司源代码被开除的CTO | 法庭上的CTO(20)

赵新龙

CTO 法庭上的CTO

重学JS | 数组遍历的7种方法及兼容性处理(polyfill)

梁龙先森

前端 编程语言

工具词典:精力管理

lidaobing

精力管理 28天写作营 张遇升

这个问题值得讨论吗?

Alan

沟通 团队文化 28天写作营 七日更

犯“走私罪”的CTO | 法庭上的CTO(19)

赵新龙

CTO 法庭上的CTO

像用户一样测试:打破知识的诅咒

QualityFocus

测试 软件质量 可用性 用户体验

生产环境全链路压测建设历程 21:某快递 A 股上市公司的生产压测案例之基于测试流量的混沌工程(故障演练)

数列科技杨德华

全链路压测 七日更

英特尔赵宏:从硬件创新到平台突破,PC的未来非常值得期待

intel001

第八课性能优化作业-判断合并链表

Geek_michael

极客大学架构师训练营

ZooX首发双向电动无人车,会成为自动驾驶出行的主流吗?

脑极体

创建493个测试账户,被公司索赔527万 | 法庭上的 CTO(14)

赵新龙

CTO 法庭上的CTO

混合用工、被拖欠工资的 CTO | 法庭上的 CTO(16)

赵新龙

CTO 法庭上的CTO

人工智能不过尔尔,基于Python3深度学习库Keras/TensorFlow打造属于自己的聊天机器人(ChatRobot)

刘悦的技术博客

人工智能 tensorflow chatbot 聊天机器人 keras

计算机网络简述

lee

计算机网络 网络协议 网络

腾讯大牛亲自带你学:Java安全weblogic T3协议漏洞!

比伯

Java 编程 架构 面试 计算机

甲方日常 75

句子

工作 随笔杂谈 日常

大作业一

黄立

Spring 源码学习 11:invokeBeanFactoryPostProcessors

程序员小航

Java spring 源码 源码阅读

如何使用 Amazon EventBridge 存档和重播事件-InfoQ