Teenus All File Converter on kavandatud skaleeritava ja hajutatud SaaS-süsteemina, mis põhineb kaasaegsel asünkroonisel Python 3.12 stackil. Arhitektuur on jagatud sõltumatuteks kihtideks: võrgusündmuste vastuvõtt, ülesannete orkestreerimine, mahukate binaarprotsesside isoleeritud täitmine ja analüütiline ring.

1. Üldine tehnoloogiate stack ja süsteemi arhitektuur

Platvormi aluseks on suure läbilaskevõime (high-throughput), minimaalse mälukasutuse ja tõrkekindluse põhimõtted:

  • Telegram Bot Framework: Aiogram 3.13, mis töötab Webhook režiimis salajaste tokenite valideerimise ja kohandatud sõnumite elutsükli filtritega.
  • Veebilüüs ja REST API: FastAPI Uvicorn ASGI-serveri baasil, mis tagab binaarfailide asünkroonse voogedastuse (FileResponse) ja taustal puhastuse BackgroundTasks kaudu.
  • Järjekordade vahendaja ja vahemälu: Redis 7 (Celery tööde haldus, võistlusseisundi lukkude kaitse, kaitse brute-force rünnakute eest, sessioonide vahemällu salvestamine).
  • Taustatäitja (Task Queue): Celery 5.4 eraldatud töörühmade basseiniga isoleeritud konteineris converter_worker.
  • Andmebaas: PostgreSQL 16 ORM-kihiga SQLAlchemy 2.0 (asyncpg), püsivate ühenduste basseiniga (20+10 overflow) ja ebaõnnestunud tehingute automaatse kordamisega (@db_retry).
  • Võrguring: Tunneldamine Cloudflare Zero Trust kaudu koos otsese IP-ligipääsu blokeerimisega serverile Middleware'i abil.

2. Asünkronsed järjekorrad ja mahukate arvutuste isolatsioon (Celery + Redis)

Meediafailide ja kontoripakettide konverteerimine tekitab CPU-le ja RAM-ile tippkoormusi. Selleks, et sissetulevate Telegrami sõnumite töötlemine rasketes operatsioonides ei blokeeruks, on rakendatud range isolatsioon:

  • Ülesannete delegeerimine Redisesse: Formadi valimisel registreerib Telegrami töötleja ülesande andmebaasis staatusega PROCESSING ja lisab ülesande järjekorda tasks.execute_conversion Celery kaudu.
  • Töötleja isoleeritud konteiner: Konverteerimisutiliitide täitmine toimub eraldi Linuxi konteineris, millel on oma protsessori aja ja mälu limiit.
  • Külmumiste kontroll ja ajalimiidid: Väliste utiliitide väljakutsed on mähitud asünkroonsesse konteksti range ajakontrolliga (conversion_timeout_sec = 180). Limiidi ületamisel peatatakse protsess sunniviisiliselt käsu proc.kill() abil, vabastades ressursid.
  • Tõrkekindel Fallback: Redisi vahendaja ajutisel kättesaamatusel püüab ülesande automaatselt kinni kohalik asünkroonne dispetšer ja see täidetakse otse ilma kasutajat häirimata.

3. Spetsiaalsete konverteerimismootorite konveier

Iga andmetüübi jaoks kasutatakse kitsalt spetsialiseeritud natiivseid utiliite ja teeke:

  • Dokumendid ja tabelid (LibreOffice): Peata kontoripakett (soffice --headless) DOCX, XLSX, PPTX, RTF, ODT täpseks renderdamiseks PDF-iks või tekstifailideks.
  • Voogedastuslik heli ja video (FFmpeg): Videokoodekite (H.264), audiokoodekite (MP3, OGG Opus) mitmelõimeline ümberkodeerimine, heliradade eraldamine, GIF-ide genereerimine (Lanczos-filter) ja Telegrami videosõnumite ruutkärpimine (1:1).
  • Kiire PDF-töötlus (Poppler Utils): Utiliidid pdftotext (vormindatud teksti kohene eraldamine UTF-8-s) ja pdftoppm (PDF-i leheküljepõhine renderdamine rasterpiltideks ilma LibreOffice'i lisakuludeta).
  • Optiline tuvastamine (Tesseract OCR): Trükitud teksti neuraalvõrgupõhine eraldamine skannitud dokumentidelt ja fotodelt 40+ keeles.
  • Raster- ja vektorgraafika: Teegid Pillow (sh HEIC ja AVIF formaatide tugi), CairoSVG vektoroomandite jaoks ja lottie Telegrami animeeritud kleebiste (.TGS) jaoks.
  • Raamatud, subtiitrid ja fondid: Mootor Calibre (ebook-convert), subtiitrite parser pysubs2 (SRT, VTT, ASS, SSA) ja fontide kompilaator fonttools (Brotli-kompressioon WOFF2-s).

4. Ressursside ennetav kaitse (System Guard)

Serveri kokkuvarisemise vältimiseks mälupuuduse tõttu (OOM Killer) on rakendatud ennetava diagnostika teenus System Guard. Enne faili töötlemisse vastuvõtmist kontrollib süsteem hosti põhinäitajaid:

  • Vaba muutmälu (RAM): Vähemalt 500 MB vaba mahtu (guard_min_free_ram_mb).
  • Kettaruum: Vähemalt 2 GB vaba ruumi kataloogis /tmp (guard_min_free_disk_mb).
  • Ülesannete järjekord: Celery järjekorra pikkuse piirang (mitte üle 20 ootava ülesande).

Limiitide ületamisel lülitab teenus ajutiselt sisse kaitse (HTTP 503 / sõnum vestluses), vältides serveri ülekoormust ja saates administraatoritele Telegramis kohese hoiatuse.

5. Failide elutsükkel ja turvalisus (GDPR)

Arhitektuur on kujundatud Zero-Data-Footprint mudeli järgi:

  • Kasutajate failid laaditakse üles kaitstud köitesse tmp/conversions/ unikaalsete eesliidetega, mis põhinevad ülesannete identifikaatoritel.
  • Failid jäävad kättesaadavaks rangelt töösessiooni raames — mitte kauem kui 15 minutit (900 sekundit).
  • Automaatne prügikorjaja kustutab algsed ja valmis failid kohe pärast eduka vestlusesse saatmise kinnitamist või sessiooni ajalõpu möödumisel.
  • PostgreSQL andmebaas ei salvesta binaarfaile ega dokumentide isiklikke tekste — tabelites fikseeritakse ainult anonümiseeritud tehnilised metaandmed (formaadid, suurused baitides, tööaeg, staatused).

6. Universaalne REST API väliste veebiteenuste jaoks

Teenus on algusest peale kavandatud mitmeplatvormse taustsüsteemina. Botiga paralleelselt töötab täisväärtuslik turvaline tarkvaraliides veebisaitide (näiteks Django baasil) ja kolmandate osapoolte bottide jaoks:

  • GET /api/v1/formats — saadaolevate konverteerimissuundade dünaamiline JSON-maatriks, mis on sünkroonitud Google'i tabelite sätetega.
  • POST /api/v1/convert — universaalne lõpp-punkt, mis võtab vastu parameetri multipart/form-data (fail, sihtformaat, välise kliendi ID) ja väljastab valmis baidivoo otsese allalaadimisena.
  • Autentimine Bearer-tokenite abil (WEBHOOK_REFRESH_TOKEN) koos kaitsega ajapõhiste rünnakute eest funktsiooni secrets.compare_digest kaudu.

7. Juhtpaneel ja Observability (NiceGUI + AG Grid)

Ärinäitajate ja süsteemi oleku seire on toodud natiivsele Single-Page juhtpaneelile, mis põhineb raamistikul NiceGUI 2.x:

  • Interaktiivsed tabelid AG Grid (v32+) kohandatud Exceli-stiilis märkeruudufiltritega (aggrid_filters.js).
  • Järjekordade, API-pakkujate viivituste ja PostgreSQL / Redisi pingi reaalajas seire.
  • Läbiv filtreerimine kuupäevade järgi koos BI-juhtpaneeli Metabase sujuva integreerimisega allkirjastatud JWT-tokenite kaudu.