aws lambda 之间的同步

Synchronization between aws lambdas

我正在使用多个 AWS lambda 函数(以及相同函数的多个实例)来访问 AWS 中的对象。有关 lambda 线程安全的任何信息?虽然书写顺序并不重要(在我的例子中),但读-修改-写的原子性很重要。 有人遇到过 proper/intended 解决方案吗?

严格的读-修改-写原子性需要序列化处理(可能使用锁等)。这对于 Lambda 是不可能的。

您可以做的是:将您的请求写入 SQS 队列,然后在单个 EC2 实例上使用单线程(或正确同步)的软件来处理队列条目。

CAP 定理 (https://en.wikipedia.org/wiki/CAP_theorem) 表明这会影响您的可用性,因为在设计上单个 EC2 实例上的这个过程会成为您的单点故障。

您还可以使用带有事务的 RDS 数据库(甚至可以使用带有条件 writes/consistent 读取的 DynamoDB)。

我遇到这个问题是因为我正在尝试实现同样的目标。

问题:我在 EC2 实例中有一个状态机集群 运行ning。每个异步调用 Lambda (InvocationType.Event)。我想每次都 运行 lambda 代码,但只从 lambda 内部执行一次下游网络调用。

解决方案:使用具有相对较低 TTL 的 DynamoDB table,我对具有从事件数据生成的唯一 ID 的项目执行条件放置,该唯一 ID 在该唯一事件的所有 lambda 调用中都是相同的。然后,如果条件放置成功,我只执行下游网络调用。

这是一种分布式同步技术,通常用于 "fail-fast" 系统的分布式系统,仅通过 lambda。