-
Notifications
You must be signed in to change notification settings - Fork 1
Assignment 3
Sbf Firodiya edited this page Apr 3, 2019
·
14 revisions
- 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 without having to visit multiple sites to do so.
- You can access the website here:
http://149.165.170.230:30002/
- Dockerize the services.
- Jenkins CI/CD for deploying the Docker containers.
- Kubernetes for load balancing and scaling.
- Load testing using Jmeter.
- Added a date picker to select a date on the search page.
- Added a loading animation on all the web pages.
- Developed a new microservice to return the nearest airport from a given location.
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 are 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.
- 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 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/
.