All Projects β†’ sunny-udhani β†’ Online_Travel_Reservation

sunny-udhani / Online_Travel_Reservation

Licence: other
A replica of online travel booking site KAYAK(www.kayak.com) for cmpe-273. Visit ->

Programming Languages

CSS
56736 projects
javascript
184084 projects - #8 most used programming language
HTML
75241 projects

Projects that are alternatives of or similar to Online Travel Reservation

Expenses
Keep track of your expenses the smart way πŸ’°
Stars: ✭ 15 (-59.46%)
Mutual labels:  mocha, passportjs
playcode
Online Javascript Editor
Stars: ✭ 127 (+243.24%)
Mutual labels:  online
FC2MPPatcher
A community-made utility for patching Far Cry 2 to yet again support multiplayer online.
Stars: ✭ 25 (-32.43%)
Mutual labels:  online
disaster-crawler
Data sources from Kimono currently unavailable
Stars: ✭ 13 (-64.86%)
Mutual labels:  d3js
skos-play
SKOS-Play allows to print SKOS files in HTML or PDF. It also embeds xls2rdf to generate RDF from Excel.
Stars: ✭ 58 (+56.76%)
Mutual labels:  d3js
mocha-simple-html-reporter
Simple HTML reporter for Mocha
Stars: ✭ 16 (-56.76%)
Mutual labels:  mocha
phyd3
Phylogenetic tree viewer based on D3.js
Stars: ✭ 47 (+27.03%)
Mutual labels:  d3js
mutest
A BDD testing framework for C, inspired by Mocha
Stars: ✭ 22 (-40.54%)
Mutual labels:  mocha
gds-nodejs-boilerplate
A Node.js project boilerplate for production apps
Stars: ✭ 18 (-51.35%)
Mutual labels:  mocha
seedpress-cms
A headless CMS built in Express for PostgresQL using Sequelize. Generally follows the Wordpress post and term schema.
Stars: ✭ 71 (+91.89%)
Mutual labels:  mocha
d3-force-reuse
Faster force-directed graph layouts by reusing force approximations
Stars: ✭ 110 (+197.3%)
Mutual labels:  d3js
appium-tests
Tool to run Titanium mobile tests in Appium
Stars: ✭ 15 (-59.46%)
Mutual labels:  mocha
ts-snippet
A TypeScript snippet compiler for any test framework
Stars: ✭ 29 (-21.62%)
Mutual labels:  mocha
bitlum-front
Lightning Network mainnet custodial wallet. Fast, easy, no node install and synchronisation
Stars: ✭ 16 (-56.76%)
Mutual labels:  online
github-visualization
simple github visualization
Stars: ✭ 106 (+186.49%)
Mutual labels:  d3js
ngx-online-status
πŸ”› Angular 5+ Detect online/offline state
Stars: ✭ 23 (-37.84%)
Mutual labels:  online
Roundtrip
πŸ πŸ›«πŸ›¬πŸ™οΈπŸ›«πŸ›¬πŸ™οΈπŸ›«πŸ›¬πŸ™οΈπŸ›«πŸ›¬ 🏠, minimizeπŸ’°of your🌴
Stars: ✭ 80 (+116.22%)
Mutual labels:  travel
BookingScraper
🌎 🏨 Scrape Booking.com 🏨 🌎
Stars: ✭ 68 (+83.78%)
Mutual labels:  booking
amadeus-python
Python library for the Amadeus Self-Service travel APIs
Stars: ✭ 129 (+248.65%)
Mutual labels:  travel
gcloud-kubectl-helm
Docker image for the quaternity of gcloud, helm, kubectl and SOPS
Stars: ✭ 32 (-13.51%)
Mutual labels:  gcloud

Online Travel Reservation

Team project for Graduate software engineering course Enterprise Distributed Systems.

Goal

  • The goal is to build a distributed enterprise web application which enables the user not only to search for Cars, Hotels and Flights and make a booking but also login/signup along with editing user preferences and viewing travel history. As well as create a Admin side which can be used to add/edit/delete Flights, Cars and Hotels and also be able to delete the user and view the analytics/statistics.

  • We were tasked with this project requirement so that we can learn and develop enterprise MERN stack applications with the use of distributed publish-subscribe messaging system like Apache Kafka along with a variety of other technologies like Elasticsearch, redis, mocha, etc.

System Design

Technology stack


Area Technology
Front-End React, Redux, React Router, Bootstrap, HTML5, CSS3, Javascript ( ES6 )
Analytics Graphs D3.js
Message-oriented middleware Apache Kafka
Authentication Middleware Passport.js
Back-End Express, Node.js
In-Memory Caching / Datastore Redis
Search and Analytics Engine Elasticsearch
API Testing Mocha, Postman
Performance Testing JMeter
Database MySQL (Google Cloud Platform), MongoDB (Mongo Atlas on AWS)
Deployment Google Compute Engine

Database

Tables with large amount of data and which doesn't need transaction support in mongodb, flight car hotel Tables with critical data and information that needs transaction support in mysql, like booking details, payment details and user info

Database design and the data was critical for the project so To maintain consistency within team we deployed both our db on cloud. Also we used mongoose npm module, which is a wrapper for mongodb for creating structure of documents in a collection so that well defined data is inserted which helps in searching.

We used database pl stored procedure for our booking and payment functionality so that we can provide transaction support and if anything goes wrong in between then we can roll back to a point where the database is in a consistent state.

Screenshots

Login/Signup

Home - Hotels

Home - Flights

Home - Cars

Hotel Listing

Car Listing

Flight Listing

Booking page

User Home

Analytics

Admin Flight - Add/Edit/Search

Admin Hotel - Add/Edit/Search

Admin Car - Add/Edit/Search

Performance comparison

This Performance comparison graph for four criterias

  1. Without kafka, connection pooling or redis
  2. With kafka but no connection pooling and redis.
  3. With kafka and connection pooling but no redis.
  4. With kafka, connection pooling and redis.

We believe that this graph is a very realistic representation of how the application would perform when deployed on a Enterprise level because as explained earlier we deployed our db on cloud , so this graph also includes the network latency.

We tested the performance of api called list cars which serves the functionality of getting all cars from our mongodb for the specific city and for each of these cars makes a search in mysql database to verify from booking table that the car is available on those dates.

With kafka we can see the response time is very high.

In our kafka implementation strategy we tried to minimize the bottleneck for performance, so we had two topics for each api , one for request and other for response so there where multiple consumers listening to these topics simultaneously for request and response instead of single consumer with single topic serving all the requests serially eventually resulting into dropping of messages.

Our approach to redis implementation was simple and effective. We used it at places which were database and read intensive like flight search car search. So when a user searches for a listing we create a search string with all criterias for search and use it for listing which is very similar to how kayak does it.we use this search string as key to store entries in redis. So when a user searches for a listing with a search string we see if the search exist in redis, if it does then use it else send a message over kafka, get data from db, set it in the cache and show it to user. Here the user will get the data from cache on subsequent search. On our exploration for redis features we found that we can invalidate the cache after a fixed timeout, so we included that feature and set a time out of 3 sec. Also we invalidate cache entries when user adds a listing so that latest data is available for user. This boosted the application performance so much that i have even seen response times of 1ms. So in a hypothetical situation, when 1000 users search for a car in the same city for same from to date within a frame of 3 sec, they will get the response in 1ms. Average response time falls to 980ms from 11000 ms. Also we used hset instead of set which increases performance of redis by indexing.

Team Members

  • Pritam Meher
  • Rutvik Pensionwar
  • Sunny Udhani
  • Varun Shah
  • Vishweshkumar Patel
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].