Asoslar
Arxitektura
Modular monolit, servis chegaralari, dependencylar va data ownership.
Runtime topologiyasi
So‘rov va ma’lumot oqimi
Browser / CLI
│ HTTPS
Caddy ─────────────── public edge
│
┌───┴────┐
│ Web │ Next.js
│ Go API │ auth · policy · inference · persistence
└───┬────┘
├──────── PostgreSQL + pgvector (source of truth)
├──────── Redis (limits / coordination)
├──────── Private S3 (file bytes)
└──────── AI providers (egress)
Go Worker ─── DB job leases ─── S3 / extractionAPI va worker alohida jarayonlar, lekin bitta domen va PostgreSQL sxemasini ulashadi. Caddy yagona public edge; database, Redis, metrics va object storage private tarmoqlarda qoladi.
Komponent chegaralari
| Komponent | Javobgarlik | Doimiy holat |
|---|---|---|
| Web | UI, route state, streaming rendering | Server API orqali |
| HTTP API | Auth, RBAC, validation, policy, inference | PostgreSQL transactionlari |
| Worker | Job claim, extraction, cleanup, retry | Lease/fencing yozuvlari |
| PostgreSQL | Users, chats, models, usage, audit, jobs | Authoritative |
| Redis | Rate-limit va qisqa coordination | Authoritative emas |
| S3 | Fayl baytlari | Metadata DB’da, bytes bucket’da |
Asosiy tamoyillar
- PostgreSQL — yakuniy haqiqat manbasi; kritik holat faqat Redis’da saqlanmaydi.
- Provider implementatsiyalari yagona adapter interfeysiga normalizatsiya qilinadi.
- Narxlar floating point emas, integer micros ko‘rinishida hisoblanadi.
- Background job ownership lease va fencing token bilan himoyalanadi.
- Upload bayti verified bo‘lmaguncha extraction navbatiga qo‘yilmaydi.
- Production noto‘g‘ri konfiguratsiyada fail closed qiladi.
Compose tarmoqlari
Compose stack frontend, backend va egress chegaralarini ajratadi. Faqat Caddy host portlariga publish qilinadi. API provider/S3 tomon egress oladi, data servislar esa public interfacega chiqarilmaydi.