Skip to content

Leo7Deng/ChatApp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

113 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Introduction

Chat App is a real time chat application designed for performance and scalability.

Motivation

The motivation behind this project was to learn distributed system design and build a scalable architecture that can handle a large number of users and messages. I wanted to explore new technologies like Go, WebSockets, and Apache Kafka, and develop a real-time data pipeline that supports machine learning (ML) training.

Tech Stack

Component Technology Used
Frontend (React/Next.js, TypeScript)
Backend Go
Database PostgreSQL (relational) + Redis (NoSQL) + xxx (NoSQL)
Caching Redis
Real-Time WebSockets (gorilla/websocket for Go)
Message Queue Apache Kafka
Deployment Docker Compose

Design

Authentication

I chose to not use third-party authentication libraries. Instead, I designed a refresh token and JWT-based access token system:

  • The refresh token is securely stored in an httpOnly cookie and managed as a key in Redis for fast retrieval and easy revocation.
  • The access token is a JWT that includes the user ID as a claim. It is stored in memory and has a short lifespan for improved security.
  • Using authContext in React, I share the access token across all child components and centralize the token refresh logic.

Websockets

I used the gorilla/websocket library for Go to manage WebSocket connections:

  • Created a hub that manages all WebSocket connections and broadcasts messages.
  • Mapped user IDs to each WebSocket client to support direct messaging.
  • To scale horizontally, I plan to use Kafka consumers to broadcast messages across multiple WebSocket servers.

Kafka

I chose Apache Kafka because of its high throughput and fault-tolerant design. It also supports multiple consumers, which is ideal for adding new features in the future.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors