Exp*_*ing 1 aws-lambda serverless-framework serverless-architecture serverless aws-serverless
我正在使用 AWS 并使用无服务器框架。我的无服务器 lambda 函数被事件触发。然后我与数据库交谈,我可以用数据库打开的连接数量有限制。
所以我只想一次运行 5 个 lambda 函数并将其他事件排入队列。我知道有:
provisionedConcurrency: 3 # optional, Count of provisioned lambda instances
reservedConcurrency: 5 # optional, reserved concurrency limit for this function. By default, AWS uses account concurrency limit
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,指定数量的长时间运行的作业将在那里,它们将为事件提供服务。
但我想要的不是事件排队,而是触发函数,以便一次最多运行 5 个函数。
我想知道 AWS 是否支持这种事件排队的概念?
在 AWS Lambda 中,并发限制决定了在一个区域中可以同时运行多少个函数调用。您可以通过 AWS Lambda 控制台或无服务器框架设置此限制。
如果您的帐户限制为 1000,并且您为特定函数保留了 100 个并发执行,并为另一个函数保留了 100 个并发执行,则该区域中的其余函数将共享剩余的 800 个执行。
如果您为特定函数保留并发执行,AWS Lambda 假定您知道保留多少以避免性能问题。具有分配并发性的函数无法访问非保留并发性。
在 Serverless Framework 中设置保留并发限制的正确方法是您分享的一种:
functions:
hello:
handler: handler.hello # required, handler set in AWS Lambda
reservedConcurrency: 5 # optional, reserved concurrency limit for this function. By default, AWS uses account concurrency limit
Run Code Online (Sandbox Code Playgroud)
我建议使用 SQS 来管理您的队列。使用队列的常见架构原因之一是限制对架构不同部分的压力。这可能意味着在处理大量消息时防止数据库过载或避免第三方 API 的速率限制。
例如,让我们考虑一下您的 SQS 处理逻辑需要连接到数据库的情况。您想限制您的工作人员一次不超过 5 个打开的数据库连接,通过并发控制,您可以设置适当的限制以保持您的架构。
在你的情况下,你可以有一个函数,hello,它接收你的请求并将它们放在 SQS 队列中。另一方面,该函数compute将获取这些 SQS 消息并计算它们,将并发调用的数量限制为 5。
您甚至可以设置批处理大小,即可以包含在单个 lambda 中的 SQS 消息的数量。
functions:
hello:
handler: handler.hello
compute:
handler: handler.compute
reservedConcurrency: 5
events:
- sqs:
arn: arn:aws:sqs:region:XXXXXX:myQueue
batchSize: 10 # how many SQS messages can be included in a single Lambda invocation
maximumBatchingWindow: 60 # maximum amount of time in seconds to gather records before invoking the function
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1230 次 |
| 最近记录: |