SQS Lambda ESM Scaling Behaviour - Experiment ESM vs Lambda Concurrency Uploads

#Test

Important

This page only contains the experiments that have been done for the: SQS Lambda ESM Scaling Behaviour blog post.

We keep the processing time at 50ms and vary ESM concurrency. We then reduce the ESM concurrency in steps below the recomended (observed unbound concurrency), which was recorded as 100. An SQS generator function is called locally to send messages to the queue at a constant rate. For these we update the Lambda source code every 3 minutes while generating SQS traffic locally. We are using small Lambda function with some added non JS files to inflate the package size to ~30MB.

#Results

ConditionLambda Concurrent Steady StateLambda Concurrent MaxLogged Cold Start MaxLambda Throttle Max
50ms1001731390
50ms 120 ESM1001201170
50ms 90 ESM9090900
50ms 50 ESM5050500
50ms 25 ESM2550500
400ms5001941870
400ms 120 ESM1201281270
400ms 90 ESM9091900
400ms 60 ESM6060600
50ms 60 ESM Lambda 7060705856
  • All of these are taken over 1 minute intervals

#Processing 50ms

#Processing 50ms, no limits

Loading..
50ms no limits

#Processing 50ms, ESM 120

Loading..
50ms ESM 120

#Processing 50ms, ESM 90

Loading..
50ms ESM 90

#Processing 50ms, ESM 50

Loading..
50ms ESM 50

#Processing 50ms, ESM 25

  • The first datapoint here is not correct. I did not wait long enough between experiments I believe.
  • We did have a queue backlog of about 1m and 20k messages at the 15 mins mark.
Loading..
50ms ESM 25

#Processing 400ms

#Processing 400ms, no limits

Loading..
400ms no limits

#Processing 400ms, ESM 120

Loading..
400ms ESM 120

#Processing 400ms, ESM 90

This experiment did form a queue backlog.

Loading..
400ms ESM 90

#Processing 400ms, ESM 60

Loading..
400ms ESM 60

#Processing 50m, ESM 60, Lambda 70 - Throttles

Loading..
50ms ESM 60 Lambda 70