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:
FastAPIUvicorn ASGI-serveri baasil, mis tagab binaarfailide asünkroonse voogedastuse (FileResponse) ja taustal puhastuseBackgroundTaskskaudu. - 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.4eraldatud töörühmade basseiniga isoleeritud konteinerisconverter_worker. - Andmebaas:
PostgreSQL 16ORM-kihigaSQLAlchemy 2.0 (asyncpg), püsivate ühenduste basseiniga (20+10 overflow) ja ebaõnnestunud tehingute automaatse kordamisega (@db_retry). - Võrguring: Tunneldamine
Cloudflare Zero Trustkaudu 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
PROCESSINGja lisab ülesande järjekordatasks.execute_conversionCelery 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äsuproc.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) japdftoppm(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),CairoSVGvektoroomandite jaoks jalottieTelegrami animeeritud kleebiste (.TGS) jaoks. - Raamatud, subtiitrid ja fondid: Mootor
Calibre(ebook-convert), subtiitrite parserpysubs2(SRT, VTT, ASS, SSA) ja fontide kompilaatorfonttools(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 parameetrimultipart/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 funktsioonisecrets.compare_digestkaudu.
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
Metabasesujuva integreerimisega allkirjastatud JWT-tokenite kaudu.