Amazon web services AWS Lambda-队列的存储状态
我目前的任务是为政府机构和公民之间的通信构建一个无服务器架构,其中一个主要组件是某种形式的队列,它包含指向每个公民请求的某种形式的对象/指针,按优先级排序。然后,政府工作人员可以处理可用的元素。由于Lambda是无状态的,我需要以某种方式将队列保存在外部 为了保存我收集到的状态,您可以使用DynamoDB或S3 bucket,并使用事件触发器调用相关的Lambda方法。有些人还建议使用参数存储来保存一些状态变量。全局存储也出现了,尽管您不能保证Lambda不会终止,但这似乎不是一个好主意 最后,我还读了一些关于SQS的内容,尽管我不知道它是否适用于这种情况Amazon web services AWS Lambda-队列的存储状态,amazon-web-services,amazon-s3,aws-lambda,amazon-dynamodb,state,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Dynamodb,State,我目前的任务是为政府机构和公民之间的通信构建一个无服务器架构,其中一个主要组件是某种形式的队列,它包含指向每个公民请求的某种形式的对象/指针,按优先级排序。然后,政府工作人员可以处理可用的元素。由于Lambda是无状态的,我需要以某种方式将队列保存在外部 为了保存我收集到的状态,您可以使用DynamoDB或S3 bucket,并使用事件触发器调用相关的Lambda方法。有些人还建议使用参数存储来保存一些状态变量。全局存储也出现了,尽管您不能保证Lambda不会终止,但这似乎不是一个好主意 最后,
以这种方式使用Lambda时,最佳实践/建议方法是什么?由于事件触发,我倾向于使用S3存储桶,而不是使用DynamoDB作为我们的DB。如果您需要存储消息,那么SQS不是这里最好的工具,因为您的Lambda函数将需要处理消息并最终将其存储在某个地方,从而使SQS成为一个代理 考虑到您可以将文件(消息)存储在S3存储桶中,然后让一个Lambda使用它的事件,S3方法提供了您所需要的开箱即用。然后,Lambda将处理此事件,文件在S3上将保持安全
如果此消息最终需要多个使用者,那么您可以将S3事件发送给SNS,最后您可以向给定的SNS主题订阅N个Lambda函数。如果您需要存储消息,那么SQS不是这里的最佳工具,因为您的Lambda函数随后需要处理消息并最终将其存储在某个地方,从而使SQS成为一个代理 考虑到您可以将文件(消息)存储在S3存储桶中,然后让一个Lambda使用它的事件,S3方法提供了您所需要的开箱即用。然后,Lambda将处理此事件,文件在S3上将保持安全 如果此消息最终需要多个使用者,则可以将S3事件发送到SNS,最后可以向给定SNS主题订阅N个Lambda函数 全局存储也出现了,尽管您不能保证Lambda不会终止,但这似乎不是一个好主意 正确--这根本不可行。请注意,当您说“Lambda”时,实际上指的是容器内的进程。。。任何时候,当Lambda函数同时处理多个调用时,都可以保证它们不会在同一个容器中运行——因此“全局”变量只对优化有用,而不是对状态有用。同一函数的任意两个并发调用都有两个完全不同的全局环境 暂时忘记Lambda的一切——我不是说不要使用Lambda;我的意思是,无论您是否使用Lambda,都与下面所写的内容无关——我建议,一般来说,并行/并发操作可能是许多开发人员在尝试设计您所描述的东西时往往忽略的最重要的因素之一 如何从这个工作中分配工作“排队”是非常重要的考虑。您不能只是“查找下一项”并将其显示给工作人员 你必须有办法做到所有这些:
- 查找下一个似乎可用的项目
- 确认它确实可用
- 将其分配给特定的工作者
- 将其标记为不可分配