design-patterns - 使用Step Function同步Primay Data Source和Secondary Data Sources并根据数据更新触发Actions

标签 design-patterns redis architecture aws-lambda aws-step-functions

我有一个充当数据层的应用程序,负责对数据库执行所有 CRUD 操作。由于可用性问题,我们在其上维护 Redis 缓存,最终将充当辅助数据源。频繁访问主要数据源会导致节流和延迟问题。

某些操作也会根据发布到数据库的更新而触发。

我试图将辅助数据源更新和基于这些更新触发的操作从数据访问层抽象到 serverless architecture .

步进函数是否最适合上述用例?或者我应该考虑不同的架构?

Current Architecture

最佳答案

根据您提出的如下所示的架构,我认为步骤功能不是必需的。

Proposed Architecture

我会使用 SNS 将更新分散到多个 SQS 队列:

  • 队列 #1 触发一个 lambda 函数,更新您在 Redis 中的数据
  • 队列 #2 用于客户端更新(无论这在您的情况下意味着什么)

我看不出在这里使用 Step Functions 的原因,因为 SQS 确保每条消息都被至少处理一次。

          +----------+
     +---->Primary DB|
     |    +----------+      +----------------+      +------------+    +-----+
     +                      |                |      |            |    |     |
Change                +----->  SQS-Queue #1  +------>   Lambda   +---->Redis|
     +                |     |                |      |            |    |     |
     |                |     +----------------+      +------------+    +-----+
     |    +-----------+
     |    |           |
     +---->   SNS     |
          |           |
          +-----------+
                      |     +----------------+
                      |     |                |
                      +-----> SQS-Queue #2   | <------ Clients
                            |                |
                            +----------------+

我认为 SNS 可能也更适合向您的客户推送更新,因为 SQS 是基于拉取的。

关于design-patterns - 使用Step Function同步Primay Data Source和Secondary Data Sources并根据数据更新触发Actions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54004230/

相关文章:

java - 为整个服务中使用的数据对象设计通用接口(interface)

c++ - 这是一种设计模式——从 setter 返回这个吗?

mysql - 合并数据库记录的推荐技术

spring - 多对多关系的 Redis 数据建模

Scala-Redis 库不包含在 fat jar 文件中

c# - MVC4+EntityFramework架构

java - 包装责任链功能是否比直接将其放在类中更好?

java - 将哪些方法实现到 "correct"DAO 类中?

javascript - 通过 Javascript 不断查询服务器 - 好主意?

php - 如何使用 Homebrew 软件或 pecl 在 macos high sierra 上的 php 7.0 上安装 php-redis?