微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我应该如何处理在AWS中调用API之后发生的异步流程?

如何解决我应该如何处理在AWS中调用API之后发生的异步流程?

我正在为使用API​​网关和Lambda来处理API请求的网站设计后端,其中许多请求针对RDS上的MysqL DB。有些过程需要异步发生,但是我正在争论哪种方法最好或更清洁。

在给定的情况下,每次用户在某个表中创建新行时,假设电子邮件也需要异步发送。还有许多其他类似的情况,但这将树立先例。

选项1:在处理API请求的lambda中,首先写入MysqL实例以添加新行。当来自MysqL的响应成功返回时,写入SQS之类的内容,稍后再从发送电子邮件的另一个lambda中读取。如果SQS的响应成功,即已将记录添加到队列中,则发送201响应,表明REST API调用成功。

选项2:在处理API请求的lambda中,写入MysqL实例以添加新行。当来自MysqL的响应返回成功时,发送201响应,说明REST API调用成功。然后设置无限期运行的DMS(数据迁移服务)任务,以将数据库修改二进制日志发送到kinesis流,这将触发处理所有数据库更改的lambda,将更改作为特定表中的新行读取,并发送电子邮件

选项1:

  • 基础设施较少
  • 通过API调用更直接地跟踪逻辑
  • 1个额外的http调用(至sqs)会延迟网页api的响应时间

选项2:

  • 更多基础架构(dms任务,复制实例)
  • 如果需要排序,则在处理二进制日志事件时
  • 扩展碎片可能意味着失去排序
    • 旁边的问题:您是否可以从MysqL中为dms任务选择运动学的哈希键?
  • 用于对数据库中的所有修改做出反应的单个代码库实际上可能会使代码中的以下逻辑变得更简单

这是权衡还是我缺少什么?在这种情况下最佳做法是什么?

解决方法

我认为选项1最合乎逻辑,但我会用SNS替换SQS和第二个lambda 。因此,修改后的选项1可能是:

选项1:在处理API请求的lambda中,首先写入MySQL实例以添加新行。当MySQL的响应成功返回时,向发送电子邮件的SNS发布确认消息 SNS 的响应成功后,发送201响应,表明REST API调用成功。

与使用SQS和第二个lambda发送电子邮件相比,这应该更快,更便宜且更容易实现。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。