Servis All File Converter je dizajniran kao skalabilni distribuirani SaaS sistem baziran na modernom asinhronom Python 3.12 steku. Arhitektura je podijeljena na nezavisne slojeve: prijem mrežnih događaja, orkestracija zadataka, izolovano izvršavanje teških binarnih procesa i analitička kontura.
1. Opšti stek tehnologija i sistemska arhitektura
U osnovu platforme su ugrađeni principi visokih performansi (high-throughput), minimalne potrošnje memorije i zaštite od grešaka:
- Telegram Bot Framework:
Aiogram 3.13, koji radi u Webhook režimu sa validacijom tajnih tokena i prilagođenim filterima životnog ciklusa poruka. - Web gateway i REST API:
FastAPIbaziran na ASGI serveru Uvicorn sa asinhronom striming isporukom binarnih fajlova (FileResponse) i pozadinskim čišćenjem prekoBackgroundTasks. - Broker reda čekanja i keš:
Redis 7(upravljanje Celery zadacima, zaključavanja protiv stanja trke - race condition, zaštita od brute-force napada, keširanje sesija). - Pozadinski izvršilac (Task Queue):
Celery 5.4sa izdvojenim pool-om radnika u izolovanom kontejneruconverter_worker. - Baza podataka:
PostgreSQL 16sa ORM slojemSQLAlchemy 2.0 (asyncpg), pool-om trajnih konekcija (20+10 overflow) i automatskim ponovnim pokušajem neuspjelih transakcija (@db_retry). - Mrežna kontura: Tuneliranje preko
Cloudflare Zero Trustsa blokiranjem direktnog IP pristupa serveru putem Middleware-a.
2. Asinhroni redovi čekanja i izolacija teških izračunavanja (Celery + Redis)
Konverzija medijskih fajlova i paketa kancelarijskih dokumenata stvara vršna opterećenja na CPU i RAM. Da se proces obrade dolaznih poruka u Telegramu ne bi blokirao tokom teških operacija, implementirana je stroga izolacija:
- Delegiranje zadataka u Redis: Prilikom izbora formata, Telegram obrađivač registruje zadatak u bazi podataka sa statusom
PROCESSINGi stavlja zadatak u red čekanjatasks.execute_conversionpreko Celery-ja. - Izolovani kontejner radnika: Izvršavanje uslužnih programa za konverziju dešava se u zasebnom Linux kontejneru sa sopstvenim ograničenjem procesorskog vremena i memorije.
- Kontrola zastoja i vremenska ograničenja (Timeouts): Pozivi spoljnih uslužnih programa su upakovani u asinhroni kontekst sa striktnom kontrolom vremena (
conversion_timeout_sec = 180). U slučaju prekoračenja limita, proces se primarno prekida prekoproc.kill(), čime se oslobađaju resursi. - Rezervna opcija (Fallback) otporna na greške: U slučaju privremene nedostupnosti Redis brokera, zadatak automatski preuzima lokalni asinhroni dispečer i izvršava se direktno bez prekida za korisnika.
3. Pipeline specijalizovanih mašina za konverziju
Za svaki tip podataka koriste se usko specijalizovani izvorni uslužni programi i biblioteke:
- Dokumenti i tabele (LibreOffice): Kancelarijski paket bez grafičkog okruženja (headless) (
soffice --headless) za precizno renderovanje DOCX, XLSX, PPTX, RTF, ODT u PDF format ili tekstualne fajlove. - Audio i video streaming (FFmpeg): Višenitno prekodiranje video kodeka (H.264), audio kodeka (MP3, OGG Opus), ekstrakcija zvučnih zapisa, generisanje GIF-ova (Lanczos filter) i kvadratno kadriranje (1:1) Telegram video poruka.
- Visokoučinska obrada PDF-a (Poppler Utils): Uslužni programi
pdftotext(trenutna ekstrakcija formatiranog teksta u UTF-8) ipdftoppm(stranpočno renderovanje PDF-a u rasterske slike bez dodatnih troškova LibreOffice-a). - Optičko prepoznavanje znakova (Tesseract OCR): Neuronsko izvlačenje štampanog teksta sa skeniranih dokumenata i fotografija na preko 40 jezika.
- Rasterska i vektorska grafika: Biblioteke
Pillow(uključujući podršku za HEIC i AVIF formate),CairoSVGza vektorske slike ilottieza animirane Telegram stikere (.TGS). - Knjige, titlovi i fontovi:
Calibremašina (ebook-convert), parser titlovapysubs2(SRT, VTT, ASS, SSA) i kompajler fontovafonttools(Brotli kompresija u WOFF2).
4. Preventivna zaštita resursa (System Guard)
Radi zaštite od pada servera usljed nedostatka memorije (OOM Killer), implementiran je servis preventivne dijagnostike System Guard. Prije prihvatanja fajla na obradu, sistem provjerava ključne metrike hosta:
- Slobodna RAM memorija: Minimum 500 MB slobodnog kapaciteta (
guard_min_free_ram_mb). - Prostor na disku: Minimum 2 GB slobodnog prostora u direktorijumu
/tmp(guard_min_free_disk_mb). - Red čekanja zadataka: Ograničenje dužine Celery reda (ne više od 20 zadataka na čekanju).
U slučaju prekoračenja limita, servis privremeno uključuje zaštitu (HTTP 503 / poruka u čet-u), sprečavajući preopterećenje servera i šaljući trenutno obavještenje (alert) administratorima u Telegram.
5. Životni ciklus fajlova i bezbjednost (GDPR)
Arhitektura je projektovana po modelu Zero-Data-Footprint:
- Korisnički fajlovi se učitavaju u zaštićeni volumen
tmp/conversions/sa jedinstvenim prefiksima baziranim na identifikatorima zadataka. - Fajlovi ostaju dostupni striktno u okviru radne sesije — ne duže od 15 minuta (900 sekundi).
- Automatski sakupljač smeća briše izvorne i gotove fajlove odmah nakon potvrde uspješnog slanja u čet ili po isteku tajmauta sesije.
- PostgreSQL baza podataka ne čuva binarne fajlove niti lične tekstove dokumenata — u tabelama se evidentiraju samo anonimizovani tehnički metapodaci (formati, veličine u bajtovima, vrijeme rada, statusi).
6. Univerzalni REST API za spoljne web servise
Servis je od početka dizajniran kao multiplatformska pozadina (backend). Pored bota, funkcioniše i potpuno zaštićeni programski interfejs za web stranice (na primjer, na Django-u) i botove trećih strana:
GET /api/v1/formats— dinamička JSON matrica dostupnih pravaca konverzije, sinhronizovana sa podešavanjima Google tabela.POST /api/v1/convert— univerzalni krajnji tačka (endpoint) koja prihvatamultipart/form-data(fajl, ciljni format, ID spoljnog klijenta) i vraća spreman protok bajtova u vidu direktnog preuzimanja.- Autorizacija preko Bearer tokena (
WEBHOOK_REFRESH_TOKEN) sa zaštitom od napada zasnovanih na vremenu (timing attacks) krozsecrets.compare_digest.
7. Upravljačka ploča i Observability (NiceGUI + AG Grid)
Praćenje poslovnih pokazatelja i stanja sistema prebačeno je u izvornu Single-Page upravljačku ploču zasnovanu na NiceGUI 2.x:
- Interaktivne tabele
AG Grid (v32+)sa prilagođenim Excel-style filterima sa poljima za potvrdu (aggrid_filters.js). - Praćenje redova čekanja, kašnjenja API provajdera i PostgreSQL / Redis pinga u realnom vremenu.
- Sveobuhvatno filtriranje po datumima sa besprekornom integracijom
MetabaseBI komandne table putem potpisanih JWT tokena.