Thundering Web Requests
Part 0: What and Why
A friend of mine mentioned using Tornado and Python to implement microservices. Out of curiosity, I asked “why Tornado?” and I did not get a definitive reply.
This got me digging into web service-related technologies that I had heard about but I did not know and had not used. Interestingly, while reading about these technologies, I stumbled on the C10K problem, the web incarnation of the thundering herd problem common in concurrent systems.
At this point, I figured what better way to learn about different web-serving technologies than to explore them in the context of thundering herd problem. The plan was to
Implement a simple web service using different technologies and see how they fare against thundering herd of web requests.
Since the exercise required the simulation of a thundering herd, I decided to
Implement web clients to simulate thundering herd of web requests.
Since I like trying out different programming languages, I figured it would be fun to implement the clients in at least two different languages.
Finally, since I had been itching to use my small cluster of Raspberry Pis for experimentation, I decided to use the cluster to evaluate the technologies in a constrained yet truly distributed setting.
Given the above context, I have documented this exercise in the following blog posts.
- Observations from Implementing Web Clients
- Observations from Implementing Web Services
- Client-side Observations about Web Service Technologies: Using Apache Bench
- Server-side Observations about Web Service Technologies: Using Apache Bench
- Server-side Observations about Web Service Technologies: Using Custom Web Clients
- Observations about Web Client Technologies
Besides describing the experiment and reporting various results, I have tried to describe my experience with and observations about differing languages and technologies that I used to implement clients and servers.
All of the code and artifacts from the experiment is available on GitHub.
I hope you will find these posts and the code artifacts both interesting and useful. If you have any feedback or suggestions, then please leave a comment.