- A completely horizontally scalable system is implemented.
- n number of instances can be run simultanously on different ports thus mimicking the existence of different servers.
- each client is allotted a specific server on sticky server strategy and load is horizontally distributed.
- The independence of the servers is overcome by using i Publisher Subscriber model using a Redis server and node js servers modelled as redis clients.
- Also Redis key value store is being used to keep the current state of room in cache to make data available at all times.
- Loadbalancer.js-> For setting up a sticky server.
- Express->HTTP server setup
- bcrypt,jwt
- Redis
- socket.io
- Materialize CSS
- Login Sign-up with maintainenence of session
- Different colors and size of pens and Erasers
- Saving the whiteboards locally as images.
- Share room using a link.
- Room management (Custom generation and random)
- ReadOnly->limit the writing privileges on the board
- Ability to add text(Pannable).
- Ability to add Shapes (Pnnable).
- Realtime Group Chats.
- Realtime occupants status independent of servers.
- Undo/redo operations are Supported.
- Fully Horizontally Scalable backend design.
- REDIS caching to store state of the rooms at small intervals of time.
- Load balanced distributed architecture.
- Create a table users with fields "username","email" and "password"(to store hash) and username as primary key in a mysql database.
- Create a .env file with the following content:
PORT1
PORT2
PORT3
db_url
db_user
db_pass
db_name
REDIS_HOST
REDIS_PORT
REDIS_PASS
SECRET_KEY
config.json can be edited to maintain load balancing parameters.
- enter "Node path/to/handler.js" in the terminal.
- enter npm start to start the load balancer at port 8080.
- The website is accessible on the "localhost:8080".
- npm stop will stop the load balancer.
1.Mention your issue or comment on an already on-board issue and start working on it by forking it in your repository.
2.Create a pull request.If appropriately done, Will be merged or you might be asked to improve upon it.
3.Try to make your solution scalable as it is the essence of this project.
1.Create an issue for the same.