Skip to content

Explore thundering web requests with different web serving technologies

License

Notifications You must be signed in to change notification settings

rvprasad/thundering-web-requests

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Thundering Web Requests

Implementations of a simple web service and client using different programming languages and technologies. The purpose of the implementations is to explore the support for web service in different technologies and see how well they handle thundering web requests.

The web service (http://127.0.0.1:1234/random) generates as collection of random numbers as strings. By default, the service generates a collection of 10 random numbers between 0 to 999,999, both inclusive. The number of random numbers can be controlled via num query parameter, e.g., http://127.0.0.1:1234/random?num=5.

The client is a CLI program used to simulate a thundering herd by concurrently (as permitted by the system) issuing n HTTP GET requests to a URL. Both the URL and n are specified via the command line.

Web Client Technologies

  1. HTTPoison (Elixir v1.8.1)
  2. Erlang v22.0.4
  3. Go v1.13.4
  4. Vert.x v3.8.3 (Kotlin v1.3.50)

Web Service Technologies

  1. Actix-Web v1.0.0 (Rust v1.39.0)
  2. Cowboy v2.6.3 (Erlang v22.0.4)
  3. Flask v1.0.3 + uWSGI v2.0.18 (Python v3.7.3)
  4. Kemal v0.25.2 (Crystal v0.28.0)
  5. Ktor v1.2.2 (Kotlin v1.3.41)
  6. Go v1.13.4
  7. Micronaut 1.2.6 (Kotlin v1.3.50)
  8. NodeJS v10.16 (JavaScript)
  9. NodeJS v10.16 + Express v4.17.1 (JavaScript)
  10. Phoenix v1.4.0 (Elixir v1.8.1)
  11. Ratpack v1.6.1 (Kotlin v1.3.41)
  12. Tornado v6.0.2 (Python v3.7.3)
  13. Trot v0.7.0 (Elixir v1.8.1)
  14. Vert.x v3.8.3 (Kotlin v1.3.50)
  15. Yaws v2.0.6 (Erlang v22.0.4)

Notes

The implementations was created for a very specific purpose -- experimentation. So, they are intentionally light on use of good software engineering practices. Specifically,

  • there are no automated tests. Servers were manually tested using curl and ab. Clients were tested against the servers with debug print statements.
  • minimal error checking is done in conjunction with internal logic.
  • n provided as part of the URL is assumed to be a valid positive integer and is not checked for validity.

That said, suggestions to improve other aspects of the implementations are welcome. Also, implementations covering other HTTP-based microservice-related operations as well as other languages/technologies are welcome.

Attribution

Copyright (c) 2019, Venkatesh-Prasad Ranganath

Licensed under BSD 3-clause "New" or "Revised" License

Authors: Venkatesh-Prasad Ranganath