【问题标题】:State machine in AWS (step function?)AWS 中的状态机(步进函数?)
【发布时间】:2022-01-17 18:56:04
【问题描述】:

我想得到一些建议,看看步进函数是否适合我的用例。

我有一堆随机生成的用户记录。在将它们放入池之前,我需要进行一些预处理和验证。我有一个阶段,它会定期运行(1-5 分钟)以从池中收集记录并合并它们,然后发布它们。

我需要对每条记录进行实时可追溯性/监控,并且我需要在记录发布后通知用户。

这是一个说明流程的图表。

阶梯函数是否适合我的用例?如果没有,是否有任何替代方法可以帮助我简化解决方案?谢谢

【问题讨论】:

  • 传入记录必须在到达时尽快进行预处理/验证吗?或者预处理可以等到收集阶段每 1-5 分钟运行一次?
  • 它们不必尽快处理。预处理和验证步骤不小(每条记录约 5-15 分钟)。记录合并服务和发布大约需要一个小时。
  • 记录收集器只是收集任何消息,或者对它们有特殊的顺序,带有特定的第一条消息和明确的结束消息?
  • 没有具体的顺序。

标签: amazon-web-services aws-lambda aws-step-functions


【解决方案1】:

是的,Step Functions 是一个选项。当场景涉及复杂的分支/重试逻辑和可观察性要求时,Step Function "State Machines" 与其他 AWS 无服务器工作流模式(例如 event-driven or pub/sub)相比,具有最大价值。 SM 逻辑是明确和可视的,这使得推理工作流变得简单。对于每个状态机 (SM) 执行,您可以轻松跟踪执行所采用的确切路径以及失败的位置。这种增加的功能反映在其较高的成本上。

在任何情况下,您都需要在收集记录之前收集记录。这种批处理要求意味着您的架构将需要更多的元素,而不仅仅是状态机。以下是一些想法:

(1) 一个 SM 在记录到达时一个接一个地对其进行预处理

一种选择是仅使用状态机来编排预处理和验证。每个arriving event record 都会启动一个 SM 执行。预处理的记录进入一个队列,定期从队列中轮询并发送以进行合并。

[Records EventBrige event] -> [preprocessing SM] -> [Record queue] -> [polling lambda] -> [Combining Service]

(2) 在端到端状态机中预处理和处理 bached 记录

在记录到达时将它们收集到队列中。 lambda 定期轮询队列并开始对一批记录执行 SM。 SM Map Task 并行预处理和验证记录,然后调用组合服务,所有这些都在一次执行中完成。此设置为您提供最大的可见性,但更复杂,因为您必须处理单个记录导致批处理执行失败的情况。

[Records arrive] -> [Record source queue] -> [polling lambda gets batch] -> [SM for preprocessing, collecting and combining]

其他

还有很多其他组合,包括必要时将 SM 链接在一起。或者完全避免SM。哪个选项最适合您将取决于哪些痛点对您最重要:可观察性、错误处理、简单性、成本。

【讨论】:

    猜你喜欢
    • 2019-08-18
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 2019-09-07
    • 2016-10-30
    相关资源
    最近更新 更多