使用步进功能将Primay数据源与辅助数据源同步,并基于数据更新触发操作

时间:2019-01-02 09:53:27

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

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

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

我正在尝试从数据访问层到serverless architecture提取辅助数据源更新和基于这些更新触发的操作。

步进功能最适合上述用例吗?还是我应该考虑不同的体系结构?

Current Architecture

1 个答案:

答案 0 :(得分:0)

基于您提出的架构,如下所示,我认为没有必要使用步进功能。

Proposed Architecture

我将使用SNS向多个SQS队列散发更新:

  • 队列1触发一个lambda函数,该函数会在Redis中更新您的数据
  • 队列2用于客户端更新(这对您而言意味着什么)

我看不到在这里使用“步骤功能”的原因,因为SQS确保每个消息至少被处理一次

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

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