Sign inSign up

sungsu7437/goad

By sungsu7437

•Updated over 7 years ago

https://github.com/sungsu7437/goad

Image
0

156

sungsu7437/goad repository overview

⁠Goad

https://goad.io⁠

Goad is an AWS Lambda powered, highly distributed, load testing tool built in Go for the 2016 Gopher Gala⁠.

⁠Docker

Goad can also be run as a Docker container which exposes the web API:

    docker run --name goad --rm -dit -e AWS_ACCESS_KEY_ID=<your key ID> -e AWS_SECRET_ACCESS_KEY=<your key> goad /bin/bash

Access into the container

    docker exec -it goad bash
    goad -n 1000 -c 5 https://example.com

⁠How it works

Goad takes full advantage of the power of Amazon Lambdas and Go's concurrency for distributed load testing. You can use Goad to launch HTTP loads from up to four AWS regions at once. Each lambda can handle hundreds of concurrent connections, we estimate that Goad should be able to achieve peak loads of up to 100,000 concurrent requests.

Goad diagram

Running Goad will create the following AWS resources:

  • An IAM Role for the lambda function.
  • An IAM Role Policy that allows the lambda function to send messages to SQS, to publish logs and to spawn new lambda in case an individual lambda times out on a long running test.
  • A lambda function.
  • An SQS queue for the test.

A new SQS queue is created for each test run, and automatically deleted after the test is completed. The other AWS resources are reused in subsequent tests.

⁠How it was built

⁠Go CLI and server
⁠Goad executable

Written in pure Go, Goad takes care of instantiating all the AWS resources, collecting results and displaying them. Interestingly, it contains the executable of the Lambda worker, which is also written in Go.

There is also a webapi version, which can be used to serve Goad as a web service. This streams the results using WebSockets.

⁠Lambda workers

AWS Lambda instances are bootstrapped using node.js but the actual work on the Lambda instances is performed by a Go process. The HTTP requests are distributed among multiple Lambda instances each running multiple concurrent goroutines, in order to achieve the desired concurrency level with high throughput.

MIT License.
Copyright 2016 Joao Cardoso⁠, Matias Korhonen⁠, Rasmus Sten⁠, and Stephen Sykes⁠.
Copyright 2016 Guido Serra OLX, a Naspers company⁠.
Copyright 2017 Walter Marta, Clemens Wältken Edrans/OLX⁠.

See the LICENSE file for more details.

Tag summary

Content type

Image

Digest

Size

329.7 MB

Last updated

over 7 years ago

docker pull sungsu7437/goad