Tjänsten All File Converter är utformad som ett skalbart, distribuerat SaaS-system baserat på en modern asynkron Python 3.12-stack. Arkitekturen är uppdelad i oberoende skikt: nätverkshändelsemottagning, aktivitetsorkestrering, isolerat utförande av tunga binära processer och analyskretsen.
1. Övergripande teknikstack och systemarkitektur
Plattformen bygger på principer om hög genomströmning (high-throughput), minimal minnesförbrukning och felkrysskydd:
- Telegram Bot Framework:
Aiogram 3.13, som körs i Webhook-läge med validering av hemliga token och anpassade filter för meddelandets livscykel. - Webb-gateway och REST API:
FastAPIbaserat på ASGI-servern Uvicorn med asynkron strömmande leverans av binärfiler (FileResponse) och bakgrundsrensning viaBackgroundTasks. - Kö-mäklare och cache:
Redis 7(hantering av Celery-uppgifter, lås mot race conditions, skydd mot brute force, sessionscachdning). - Bakgrundsexekutor (Task Queue):
Celery 5.4med en dedikerad pool av workers i en isoleradconverter_worker-container. - Databas:
PostgreSQL 16med ORM-lagretSQLAlchemy 2.0 (asyncpg), en pool med permanenta anslutningar (20+10 overflow) och automatisk omstart av misslyckade transaktioner (@db_retry). - Nätverkskrets: Tunnelering via
Cloudflare Zero Trustmed blockering av direkt IP-åtkomst till servern via Middleware.
2. Asynkrona köer och isolering av tunga beräkningar (Celery + Redis)
Konvertering av mediefiler och kontorspaket skapar toppbelastningar på CPU och RAM. För att säkerställa att bearbetningen av inkommande meddelanden i Telegram inte blockeras vid tunga åtgärder har strikt isolering implementerats:
- Delegering av uppgifter till Redis: Vid val av format registrerar Telegram-hanteraren uppgiften i databasen med statusen
PROCESSINGoch placerar jobbet i köntasks.execute_conversionvia Celery. - Isolerad worker-container: Körningen av konverteringsverktyg sker i en separat Linux-container med en egen gräns för processtid och minne.
- Hängningskontroll och tidsgränser: Anrop till externa verktyg är inneslutna i en asynkron kontext med strikt tidsstyrning (
conversion_timeout_sec = 180). Om gränsen överskrids avbryts processen tvångsvis viaproc.kill(), vilket frigör resurser. - Tålig Fallback: Vid tillfällig otillgänglighet för Redis-mäklaren fångas uppgiften automatiskt upp av den lokala asynkrona disponenten och utförs direkt utan avbrott för användaren.
3. Pipeline för specialiserade konverteringsmotorer
För varje datatyp används hårt specialiserade inbyggda verktyg och bibliotek:
- Dokument och kalkylblad (LibreOffice): Ett headless-kontorspaket (
soffice --headless) för exaktrendering av DOCX, XLSX, PPTX, RTF, ODT till PDF-format eller textfiler. - Strömmande ljud och video (FFmpeg): Multitrådad omkodning av videocodec (H.264), audiocodec (MP3, OGG Opus), extrahering av ljudspår, generering av GIF (Lanczos-filter) och kvadratisk beskärning (1:1) av Telegram-videomeddelanden.
- Höghastighetshantering av PDF (Poppler Utils): Verktygen
pdftotext(omedelbar extrahering av formaterad text till UTF-8) ochpdftoppm(sidvis rendering av PDF till rasterbilder utan LibreOffices overhead). - Optisk teckenläsning (Tesseract OCR): Neural nätverksbaserad extrahering av tryckt text från scannade dokument och foton på 40+ språk.
- Raster- och vektorgrafik: Biblioteken
Pillow(inklusive stöd för HEIC- och AVIF-format),CairoSVGför vektorbilder ochlottieför animerade Telegram-klistermärken (.TGS). - Böcker, undertexter och typsnitt: Motorn
Calibre(ebook-convert), undertextparsernpysubs2(SRT, VTT, ASS, SSA) och typsnittskompilatornfonttools(Brotli-komprimering i WOFF2).
4. Preventivt resursskydd (System Guard)
För att skydda mot serverkrascher på grund av minnesbrist (OOM Killer) har diagnostiktjänsten System Guard implementerats. Innan en fil tas emot för bearbetning kontrollerar systemet värdens nyckeltal:
- Ledigt primärminne (RAM): Minst 500 MB ledig volym (
guard_min_free_ram_mb). - Utrymme på hårddisk: Minst 2 GB ledigt utrymme i katalogen
/tmp(guard_min_free_disk_mb). - Aktivitetskö: Begränsning av Celery-köns längd (högst 20 väntande uppgifter).
Om gränserna överskrids aktiverar tjänsten tillfälligt skydd (HTTP 503 / meddelande i chatten), vilket förhindrar överbelastning av servern och skickar en omedelbar varning till administratörer i Telegram.
5. Filens livscykel och säkerhet (GDPR)
Arkitekturen är utformad enligt Zero-Data-Footprint-modellen:
- Användarfiler laddas upp till en skyddad volym
tmp/conversions/med unika prefix baserade på uppgiftsidentifierare. - Filer förblir tillgängliga strikt inom ramen för arbetssessionen — högst 15 minuter (900 sekunder).
- En automatisk skräpsamlare raderar käll- och färdiga filer omedelbart efter bekräftelse på att de har skickats till chatten eller när sessionstiden har löpt ut.
- PostgreSQL-databasen lagrar inte binära filer eller personliga dokumenttexter — tabellerna sparar endast anonymiserade tekniska metadata (format, storlek i byte, körtid, statusar).
6. Universellt REST API för externa webbtjänster
Tjänsten är ursprungligen utformad som en multiplattforms-backend. Vid sidan av boten finns ett fullt fungerande och skyddat programmeringsgränssnitt för webbplatser (till exempel på Django) och tredjepartsbotar:
GET /api/v1/formats— en dynamisk JSON-matris med tillgängliga konverteringsriktningar, synkroniserad med Google Sheets-inställningar.POST /api/v1/convert— en universell endpoint som tar emotmultipart/form-data(fil, målformat, extern klient-ID) och returnerar en färdig byte-ström för direkt nedladdning.- Auktorisering via Bearer-tokens (
WEBHOOK_REFRESH_TOKEN) med skydd mot tidsattacker viasecrets.compare_digest.
7. Kontrollpanel och Observability (NiceGUI + AG Grid)
Övervakning av affärsmått och systemstatus har flyttats till en inhemsk Single-Page-kontrollpanel baserad på NiceGUI 2.x:
- Interaktiva tabeller
AG Grid (v32+)med anpassade kryssruta-filter i Excel-stil (aggrid_filters.js). - Övervakning i realtid av köer, fördröjningar från API-leverantörer samt ping till PostgreSQL / Redis.
- Genomgående datumfiltrering med sömlös integration av BI-dashboarden
Metabasevia signerade JWT-tokens.