brunopiaui / file_sharing_KAFKA_MONGO

Online file sharing using MERN stack with Apache Kafka, Passport.js and MongoDB

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Online File Sharing

A web application imitating features of dropbox with Apache Kafka for distributed message streaming, MongoDB as datastore and PassportJS as authentication middleware.

Individual academic project for Graduate software engineering course 273 - Enterprise Distributed Systems.

Goal

  • The goal is to build a distributed enterprise web application which enables the user not only to upload , star/unstar or delete files/folders but also share files/folders to other users, create groups, add/edit/delete members and view their own activity timeline.

  • We were tasked with this project requirement so that we can learn and develop enterprise service application with the use of non-relational databases.

System Design

Applications uses a simple Client-Server architecture where there are as many as 13 React components, 17 API’s and 20+ kafka topics to support different functionalities.

My application includes 20+ kafka topics responsible to perform different activities. There are different consumers for each topic so that no one consumer gets overloaded with large number of requests on multiple topics. The system architecture is divided into 3 parts,

  • dropbox_react
  • dropbox-kafka-client
  • dropbox-kafka-server

Here, the kafka-client part only does the part of producing messages and on response from kafka-server forward it to react side. It also includes implementation of passportjs’s local strategy for authentication. Sessions are stored in MongoDB and I have used express-sessions for session management.

Implemented a personal version of connection pooling for the application.

Technology stack

Area Technology
Front-End React, Redux, React Router, Bootstrap, HTML5, CSS3, Javascript ( ES6 )
Back-End Express, Node.js
Message Streaming Apache Kafka
Authentication Middleware PassportJS
API Testing Mocha, Postman
Session Management express-sessions and MongoDB
Database MongoDB
Performance Testing JMeter

About

Online file sharing using MERN stack with Apache Kafka, Passport.js and MongoDB


Languages

Language:JavaScript 91.9%Language:HTML 7.1%Language:Shell 0.8%Language:CSS 0.2%