Skip to content

Assignment 3

Varun Vinod Machingal edited this page Apr 3, 2019 · 14 revisions

Travel Guide

  • The application takes in just the source address i.e. your home address and the destination address i.e. not the airport but your last endpoint of the travel (hotel, university etc)
  • You will be displayed
    • source address to nearest source airport (Uber)
    • nearest source airport to nearest airport from the destination (Flight)
    • destination airport to the destination address (Uber)
  • As an end result you will be displayed the cheapest option on the top and if available alternate options below.
  • This web app is an effort to automate the process of getting from one place from another with put having to visit multiple sites to do so.
  • You can access the website here: http://149.165.170.230:30002/

Milestones and features

  1. Dockerize the services.
  2. Jenkins CI/CD for deploying the Docker containers.
  3. Kubernetes for load balancing and scaling.
  4. Load testing using Jmeter.
  5. Added a date picker to select a date on the search page.
  6. Added a loading animation on all the web pages.
  7. Developed a new microservice to return the nearest airport from a given location.

Kubernetes

JMeter testing results

The throughput/minute for 3 replicas

Requests UI Login API Search API Airports API Display API
3000 7549 7254 1772 7586 1812
6000 9472 9846 2917 10728 10818
9000 1040 8797 1091 7849 20676

The throughput/minute for 5 replicas

Requests UI Login API Search API Airports API Display API
3000 5159 6259 4303 6685 6807
6000 9478 10340 2381 10575 3024
9000 3464 3575 4714 6071 7851
  • We could mainly see 'connection reset' errors in most of our logs due to which the throughputs a low for some of the services even when the replicas were increased.
  • Another reason was most of the services were dependent on at least 2 other services which were the bottleneck in our case.
  • The database access also caused a lot of throughputs hindering as all of our services to need to access the database for each user request.
  • We can solve a few of these requests by making the services more decoupled from each other and reducing the database access by storing as much in the cache as possible. Another option for long running process is to run asynchronously without blocking other functions.

Issues faced during this milestone.

  • Building docker image didn't take as much time but understanding kubernetes and the architecture took some time.
  • We use 2 public 'unreliable API's' i.e. for getting flights and getting the nearest airports from the current location. During load testing, the nearest airports public API stopped responding.
  • We had no other choice but to develop a new micro service to return the nearest airport for a given location.
  • We now only have one public API which when fails, we generate random output to compensate.

Jenkins

  • Jenkins URL http://149.165.168.73:8080/
  • Login/Signup service and Airports service are on node-backend-docker branch http://149.165.168.73:8080/job/piplineNode/
  • UI is on ui-docker branch http://149.165.168.73:8080/job/Pipleline2/
  • Search service is on java-docker branch http://149.165.168.73:8080/job/pipleineJava/
  • Display cheapest service is on python-docker branch http://149.165.168.73:8080/job/piplinepython/.

JMeter Screenshots of the graphs

The graph for 3 replicas and 3000 requests

The graph for 3 replicas and 6000 requests

The graph for 3 replicas and 9000 requests

The graph for 5 replicas and 3000 requests

The graph for 5 replicas and 6000 requests

The graph for 5 replicas and 9000 requests

Clone this wiki locally