AWS 中的状态机(步进函数?)

State machine in AWS (step function?)

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

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

我需要每条记录的实时 traceability/monitor,并且我需要在记录发布后通知用户。

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

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

是的,Step Functions 是一个选项。 Step Function "State Machines" add the greatest value vs other AWS serverless workflow patterns such as event-driven or pub/sub 当场景涉及复杂的 branching/retry 逻辑和可观察性要求时。 SM 逻辑是明确的和可视化的,这使得对工作流的推理变得简单。对于每个状态机 (SM) 执行,您可以轻松跟踪执行所采用的确切路径以及失败的位置。这种增加的功能反映在其更高的成本上。

无论如何,您需要收集记录,直到收集记录为止。这种批处理要求意味着您的架构将需要更多的元素,而不仅仅是状态机。以下是一些想法:

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

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

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

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

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

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

其他

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