Code Monkey home page Code Monkey logo

thundering-web-requests's Introduction

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

thundering-web-requests's People

Contributors

rvprasad avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.