Pulse
Real vaqt chat va ijtimoiy platforma. Yetkazish uchun WebSocket, jarayonlar orasida tarqatish uchun Redis Pub/Sub, ostida esa asinxron FastAPI.
Nega Pub/Sub, faqat WebSocket emas
Bitta server barcha ochiq soketlarni xotirada saqlab, qabul qiluvchini topib xabar yetkaza oladi. Bu ikkinchi server paydo bo‘lguncha ishlaydi. Yuboruvchi bittasiga, qabul qiluvchi boshqasiga ulangan bo‘ladi va xabar hech qayerga bormaydi.
Redis Pub/Sub buni hal qiladi: server kanalga e’lon qiladi, o‘sha kanalga obuna bo‘lgan har bir server uni oladi va o‘zi ushlab turgan soketlarga yetkazadi. Ilova foydalanuvchi qaysi jarayonga tushganini bilishi shart emas — bittadan ortiq jarayon ishlatishdan oldin aynan shu xossa kerak.
Qolgan stek
Backend — FastAPI, asinxron SQLAlchemy 2 va Alembic migratsiyalari bilan: bazaga murojaat soketlar yashayotgan event loop’ni bloklamasin. Yuklamalar S3 API orqali MinIO’ga ketadi, ya’ni bir xil kod production’da S3 bilan qayta yozmasdan ishlaydi. Uzoq davom etadigan vazifalar so‘rov ichida emas, ARQ ishchisida bajariladi.
Frontend — Vite va TypeScript ustida React 19, server holati uchun TanStack Query, lokal holat uchun Zustand.
Butun stek Docker Compose bilan ko‘tariladi — Postgres, Redis, MinIO va lokal pochta tutgichi bilan birga, — shuning uchun yangi klon bitta buyruq bilan ishga tushadi.