Talks, Presentations & Events

Demo: Serverless Microservices vs Monolithic Beanstalk App: Who Dies First during Load Tests? @ AWS Summit Berlin 2016

Intro

The demo validates improvements of the application "AWS Feature Roll" on lambda coming from findings out of a load test against the application deployed on Beanstalk.

The App: AWS Feature Roll

The AWS Feature Roll app is basically a JSON representation of the "What's new?" RSS feed from https://aws.amazon.com/de/new/

Endpoints

  • /feature – get a JSON Document with features
  • /slides – get a reveal.js Slidedeck, ZIPed

You can filter both endpoints with cat, startdate and enddate

The application code is available at GitHub

AWS Feature Roll on Beanstalk

The first version is deployed on Beanstalk using a classic Beanstalk stack:

  • Elastic Load Balancer
  • Autoscaling Group
  • EC2 T2.micro instances running the NodeJS / Express application
  • RDS

You can find the application here: http://awsfeatureroll.elasticbeanstalk.com/

Load Test & Test Case

Watch the video of the Load Test against Beanstalk here:

The StormForger JavaScript TestCase for the version on Beanstalk is available at: https://gist.github.com/larsvegas/a920660b2a03cf015228e314ebee8ba6

Results

  • Screenshot and or Link to Results

Findings

  • autoscaling is not triggered, configuration is maybe wrong
  • very slow /slides

AWS Feature Roll Serverless on Lambda

Improvements

  • async /slides
  • /slides now checks if the requested slide deck is already available on S3, if not a third function createSlideDeck will create it
  • nevertheless /slides will know the future url of the slide deck asap and can respond to the user.

Load Test & Test Case

The StormForger JavaScript Test Case for the version on Lambda is available here: https://gist.github.com/larsvegas/9677f80193436dd12484c6c6775d9987

Results

  • Screenshot and or Link to Results

Findings

  • /features is a lot faster
  • /slides is a lot faster, since the slidedeck creation is async
  • we get HTTP 429 at ~500 requests/second. Throttling?

Conclusion: Who Dies First during Load Tests?

It depends. :)

We can't say that Beanstalk is slower. An async solution for /slides can be implemented on Beanstalk as well. However, a simple app like this is maybe the right use case for Lambda.

Beanstalk

  • go async with /slides
  • check autocaler configuration
  • check instance types

Lambda

  • functional test: does createSlideDeck really deliver to S3?
  • Do we need ~500 requests/second? How to adjust the limits?

Learn about the behavior of your application and infrastructure configuration, for example by using load tests!


Find the slides of #AWSSummit Berlin at the the presentation page.

If you have any questions get in touch, please: support@stormforger.com

Create repeatable Performance & Load Tests easily using our JavaScript DSL to verify your HTTP APIs. StormForger enables you to do continuous performance testing to make the web a faster place. Learn more...

definition.setTarget("API.EXAMPLE.COM");

definition.setArrivalPhases([
  {
    duration: 5 * 60,  // 5min in seconds
    rate: 1.0,         // clients per seconds to launch
  },
]);

definition.session("hello world", function(session) {
  session.get("/", { tag: "root" });
});
:production