当前位置: 首页 > 知识库问答 >
问题:

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

章远航
2023-03-14

我正在为一个网站设计后端,该网站使用应用编程接口网关和Lambda来处理应用编程接口请求,其中许多请求针对RDS上的MySQL数据库。有些过程需要异步进行,但我正在争论哪个是最佳实践还是更干净。

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

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

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

选项1:

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

选项2:

  • 更多基础架构(dms任务、复制实例)
  • 如果需要排序,则在处理binlog事件时,缩小碎片可能意味着失去排序
    • 附带问题:您能够从mysql中为dms任务的kinesis选择哈希键吗

    这是权衡还是我遗漏了什么?这种情况下的最佳做法是什么?

共有1个答案

易修洁
2023-03-14

在我看来,选项1似乎最符合逻辑,但我会用SNS替换SQS和第二个lambda。因此,修改后的选项1可以是:

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

这应该比使用SQS和second lambda发送电子邮件更快、更便宜、更容易实现。

 类似资料:
  • 我有一个用c#编写的AWS lambda函数。此函数负责调用5-6个API调用(Post请求)。 所有这些API调用都是相互独立的。 我不关心这些API调用的响应。 即使我不关心后续响应,每个API调用也需要大约5秒才能完成。 问题:我希望lambda函数在一秒钟内执行并响应。如何异步进行API调用,使lambda函数能够在我的时间限制内完成所有这些操作,而不必等待API调用的响应?理想情况下,我

  • 我有一个AWS Lambda函数,每当新文档上传到S3时,它都会将html文档转换为pdf文档。工作得很好。 生成pdf后,我的应用程序代码(传统的服务器支持web服务)需要向用户发送一封电子邮件,其中包含指向pdf文件的链接。我可以想出几种方法来处理这个问题: 假设pdf转换工作并天真地触发电子邮件 当转换发生时,从lambda函数向我的应用程序代码发送一个网络钩子 在后台作业中,在发送电子邮件

  • 问题内容: 我刚刚安装了Node v7.2.0,并了解了以下代码: 结果消息: 我理解这背后的原因,因为许多程序员可能经历了最终被吞噬的沮丧。但是然后我做了这个实验: 结果是: 我基于 异步处理拒绝的 想法 /可能是一件坏事。 但是为什么呢? 问题答案: “我应该避免异步处理Promise拒绝吗?” 这些警告起着重要的作用,但要查看其工作原理,请参见以下示例: 尝试这个: 或这个: 或这个: 免责

  • 我有一个JavaFX应用程序,可以拍摄节点的屏幕截图/快照。截图的代码如下所示: 其中是一个。通常情况下,这很正常,但是当太大时(我的意思是,在10240x5548像素的顺序上),我得到了这个异常: 这种情况并不常见,但我仍然希望处理这种情况,即使只是告诉用户不支持这种解决方案。问题是堆栈跟踪根本不涉及我的代码。我的代码中没有一行。我猜这是一个由我调用的东西触发的线程,它会在线程崩溃后立即返回。

  • 注意:还有一个类似的问题,如何在task.run中调用异步方法?但是对于C#来说,选择的答案有反对票,并且没有地址configureaWait。

  • 在宝塔的监控面板中发现cpu的占用率曲线,每次到顶峰的时候都有mysqld_safe进程占用100 %的现象。 请问这种情况应该如何处理呢?mysqld_safe脚本在做什么呢?为何会占用100%的cpu?