3.8 KiB
3.8 KiB
Messaging Platform Architecture
1) Backend Architecture (FastAPI)
High-Level Components
- API Gateway (
FastAPIREST + WebSocket entrypoint) - Auth Service (JWT, refresh token, email verification, password reset)
- User Service (profile, avatar metadata, user lookup)
- Chat Service (private/group/channel lifecycle and membership)
- Message Service (create/list/edit/delete messages with pagination)
- Realtime Gateway (WebSocket session management, typing/read events)
- Media Service (presigned upload URL + attachment metadata)
- Notification Service (mention and offline notifications)
- Email Service (verification and reset email delivery abstraction)
- Worker Layer (
Celery) for async tasks (email, push, cleanup)
Runtime Topology
- Stateless API instances behind a load balancer
- PostgreSQL for source-of-truth data
- Redis for cache, rate-limit counters, and pub/sub fan-out
- MinIO (S3-compatible) for media blobs
- Celery workers + Redis broker for background jobs
Realtime Scaling
- Each WebSocket node subscribes to Redis channels by chat/user scope.
- Incoming
send_messagepersists to PostgreSQL first. - Message event is published to Redis; all nodes broadcast to online members.
- Offline recipients are queued for notifications.
Security Layers
- JWT access + refresh tokens (short-lived access, longer refresh)
bcryptpassword hashing- Email verification required before login
- Tokenized password reset flow
- DB indexes on auth and chat/message lookup paths
- Ready extension points for rate limiting and anti-spam middleware
Suggested Backend Tree
backend/
app/
main.py
config/
settings.py
database/
base.py
session.py
models.py
auth/
models.py
schemas.py
repository.py
service.py
router.py
users/
models.py
schemas.py
repository.py
service.py
router.py
chats/
models.py
schemas.py
repository.py
service.py
router.py
messages/
models.py
schemas.py
repository.py
service.py
router.py
media/
models.py
schemas.py
repository.py
service.py
router.py
realtime/
models.py
schemas.py
repository.py
service.py
router.py
notifications/
models.py
schemas.py
repository.py
service.py
router.py
email/
models.py
schemas.py
repository.py
service.py
router.py
utils/
security.py
2) Web Client Architecture (React + TypeScript)
Layers
src/api: typed Axios clients (auth, users, chats, messages, media)src/store: Zustand stores (session, chat list, active chat, realtime state)src/chat: domain logic (message normalization, optimistic updates)src/hooks: composable hooks (useAuth,useChatMessages,useWebSocket)src/components: reusable UI units (message bubble, composer, media picker)src/pages: route-level pages (Login,Register,Chats,ChatDetail)
Data Flow
- HTTP for CRUD and pagination
- WebSocket for realtime events (
receive_message, typing, read receipts) - Optimistic UI on send, rollback on failure
- Local cache keyed by chat id + pagination cursor
3) Android Architecture (Kotlin + Compose)
Layers (MVVM)
network: Retrofit API + WebSocket clientdata: DTOs + Room entities + DAOsrepository: sync strategy between remote and local cacheviewmodel: state, intents, side-effectsui/screens: Compose screens (Auth,ChatList,ChatRoom,Profile)ui/components: reusable composables
Realtime Strategy
- WebSocket manager as singleton service (Hilt)
- ChatViewModel subscribes to events by selected chat
- Persist inbound messages to Room first, then render state from DB flows
- Push notifications bridged to deep links into chat screens