Η υπηρεσία All File Converter έχει σχεδιαστεί ως ένα κλιμακούμενο, κατανεμημένο σύστημα SaaS βασισμένο σε μια σύγχρονη ασύγχρονη στοίβα Python 3.12. Η αρχιτεκτονική χωρίζεται σε ανεξάρτητα επίπεδα: λήψη συμβάντων δικτύου, ερχρχήστρωση εργασιών, απομονωμένη εκτέλεση βαριών δυαδικών διεργασιών και αναλυτικό κύκλωμα.
1. Γενική τεχνολογική στοίβα και αρχιτεκτονική συστήματος
Η πλατφόρμα βασίζεται σε αρχές υψηλής απόδοσης (high-throughput), ελάχιστης κατανάλωσης μνήμης και προστασίας από σφάλματα:
- Telegram Bot Framework:
Aiogram 3.13, το οποίο λειτουργεί σε λειτουργία Webhook με επικύρωση μυστικών διακριτικών (tokens) και προσαρμοσμένα φίλτρα κύκλου ζωής μηνυμάτων. - Πύλη ιστού και REST API:
FastAPIβασισμένο στον διακομιστή ASGI Uvicorn με ασύγχρονη ροή δυαδικών αρχείων (FileResponse) και καθαρισμό στο παρασκήνιο μέσωBackgroundTasks. - Μεσάζων ουρών και κach:
Redis 7(διαχείριція εργασιών Celery, κλείδωμα κατάστασης αγώνα, προστασία από brute force, προσωρινή αποθήκευση συνεδριών). - Εκτελεστής παρασκηνίου (Task Queue):
Celery 5.4με αποκλειστική ομάδα εργαζομένων (workers) σε απομονωμένο δοχείοconverter_worker. - Βάση δεδομένων:
PostgreSQL 16με επίπεδο ORMSQLAlchemy 2.0 (asyncpg), ομάδα μόνιμων συνδέσεων (20+10 overflow) και αυτόματη επανάληψη αποτυχημένων συναλλαγών (@db_retry). - Κύκλωμα δικτύου: Σήραγγα μέσω
Cloudflare Zero Trustμε αποκλεισμό της άμεσης πρόσβασης IP στον διακομιστή μέσω Middleware.
2. Ασύγχρονες ουρές και απομόνωση βαριών υπολογισμών (Celery + Redis)
Η μετατροπή αρχείων πολυμέσων και πακέτων γραφείου δημιουργεί μέγιστο φόρτο σε CPU και RAM. Για να διασφαλιστεί ότι η επεξεργασία των εισερχόμενων μηνυμάτων στο Telegram δεν μπλοκάρεται κατά τη διάρκεια βαριών λειτουργιών, εφαρμόζεται αυστηρή απομόνωση:
- Ανάθεση εργασιών στο Redis: Κατά την επιλογή μιας μορφής, ο χειριστής του Telegram καταχωρεί την εργασία στη βάση δεδομένων με κατάσταση
PROCESSINGκαι τοποθετεί την εργασία στην ουράtasks.execute_conversionμέσω του Celery. - Απομονωμένο δοχείο εργαζομένου: Η εκτέλεση βοηθητικών προγραμμάτων μετατροπής πραγματοποιείται σε ξεχωριστό δοχείο Linux με το δικό του όριο χρόνου επεξεργασίας και μνήμης.
- Έλεγχος κολλημάτων και χρονικά όρια (timeouts): Οι κλήσεις σε εξωτερικά βοηθητικά προγράμματα περιβάλλονται σε ασύγχρονο πλαίσιο με αυστηρό έλεγχο χρόνου (
conversion_timeout_sec = 180). Σε περίπτωση υπέρβασης του ορίου, η διεργασία τερματίζεται αναγκαστικά μέσωproc.kill(), ελευθερώνοντας πόρους. - Ανθεκτικό στα σφάλματα Fallback: Σε περίπτωση προσωρινής μη διαθεσιμότητας του μεσιτίου Redis, η εργασία αναλαμβάνεται αυτόματα από τον τοπικό ασύγχρονο διαχειριστή και εκτελείται απευθείας χωρίς διακοπή για τον χρήστη.
3. Αγωγός εξειδικευμένων μηχανών μετατροπής
Για κάθε τύπο δεδομένων χρησιμοποιούνται εξειδικευμένα εγγενή βοηθητικά προγράμματα και βιβλιοθήκες:
- Έγγραφα και υπολογιστικά φύλλα (LibreOffice): Πακέτο γραφείου χωρίς κεφαλή (headless) (
soffice --headless) για ακριβή απόδοση DOCX, XLSX, PPTX, RTF, ODT σε μορφή PDF ή αρχεία κειμένου. - Ροή ήχου και βίντεο (FFmpeg): Πολυνηματική επανακωδικοποίηση βίντεο (H.264), ήχου (MP3, OGG Opus), εξαγωγή κομματιών ήχου, δημιουργία GIF (φίλτρο Lanczos) και τετραγωνική περικοπή (1:1) μηνυμάτων βίντεο Telegram.
- Επεξεργασία PDF υψηλής ταχύτητας (Poppler Utils): Βοηθητικά προγράμματα
pdftotext(στιγμιαία εξαγωγή μορφοποιημένου κειμένου σε UTF-8) καιpdftoppm(απόδοση PDF ανά σελίδα σε εικόνες raster χωρίς γενικά έξοδα LibreOffice). - Οπτική αναγνώριση χαρακτήρων (Tesseract OCR): Εξαγωγή τυπωμένου κειμένου βασισμένη σε νευρωνικά δίκτυα από σαρώσεις και φωτογραφίες σε 40+ γλώσσες.
- Γραφικά Raster και Vector: Βιβλιοθήκες
Pillow(συμπεριλαμβανομένης της υποστήριξης για μορφές HEIC και AVIF),CairoSVGγια διανυσματικές εικόνες καιlottieγια κινούμενα αυτοκόλλητα Telegram (.TGS). - Βιβλία, υπότιτλοι και γραμματοσειρές: Μηχανή
Calibre(ebook-convert), αναλυτής υποτίτλωνpysubs2(SRT, VTT, ASS, SSA) και μεταγλωττιστής γραμματοσειρώνfonttools(συμπίεση Brotli σε WOFF2).
4. Προληπτική προστασία πόρων (System Guard)
Για την προστασία από τερματισμό του διακομιστή λόγω έλλειψης μνήμης (OOM Killer), έχει εφαρμοστεί η υπηρεσία προληπτικής διάγνωσης System Guard. Πριν από την αποδοχή ενός αρχείου για επεξεργασία, το σύστημα ελέγχει βασικές μετρήσεις του κεντρικού υπολογιστή (host):
- Ελεύθερη μνήμη RAM: Τουλάχιστον 500 MB ελεύθερου χώρου (
guard_min_free_ram_mb). - Χώρος στον δίσκο: Τουλάχιστον 2 GB ελεύθερου χώρου στον κατάλογο
/tmp(guard_min_free_disk_mb). - Ουρά εργασιών: Περιορισμός του μήκους της ουράς Celery (όχι περισσότερες από 20 εκκρεμείς εργασίες).
Όταν γίνεται υπέρβαση των ορίων, η υπηρεσία ενεργοποιεί προσωρινά την προστασία (HTTP 503 / μήνυμα στη συνομιλία), αποτρέποντας την υπερφόρτωση του διακομιστή και στέλνοντας άμεση ειδοποίηση (alert) στους διαχειριστές στο Telegram.
5. Κύκλος ζωής αρχείων και ασφάλεια (GDPR)
Η αρχιτεκτονική έχει σχεδιαστεί σύμφωνα με το μοντέλο Zero-Data-Footprint:
- Τα αρχεία των χρηστών μεταφορτώνονται σε έναν ασφαλή τόμο
tmp/conversions/με μοναδικά προθέματα βασισμένα σε αναγνωριστικά εργασιών. - Τα αρχεία παραμένουν προσβάσιμα αυστηρά εντός της περιόδου σύνδεσης εργασίας — όχι περισσότερο από 15 λεπτά (900 δευτερόλεπτα).
- Ο αυτόματος συλλέκτης απορριμμάτων διαγράφει τα αρχικά και τα έτοιμα αρχεία αμέσως μετά την επιβεβαίωση της επιτυχούς αποστολής στη συνομιλία ή μετά τη λήξη του χρονικού ορίου της συνεδρίας.
- Η βάση δεδομένων PostgreSQL δεν αποθηκεύει δυαδικά αρχεία ή προσωπικά κείμενα εγγράφων — μόνο ανωνυμοποιημένα τεχνικά μεταδεδομένα καταγράφονται στους πίνακες (μορφές, μεγέθη σε byte, χρόνος λειτουργίας, καταστάσεις).
6. Καθολικό REST API για εξωτερικές υπηρεσίες ιστού
Η υπηρεσία σχεδιάστηκε αρχικά ως backend πολλαπλών πλατφορμών. Παράλληλα με το bot, λειτουργεί μια πλήρης, ασφαλής προγραμματιστική διεπαφή για ιστότοπους (για παράδειγμα, σε Django) και bots τρίτων:
GET /api/v1/formats— δυναμικός πίνακας JSON με τις διαθέσιμες κατευθύνσεις μετατροπής, συγχρονισμένος με τις ρυθμίσεις των Φύλλων Google.POST /api/v1/convert— καθολικό σημείο τελικής σύνδεσης (endpoint) που δέχεταιmultipart/form-data(αρχείο, μορφή προορισμού, αναγνωριστικό εξωτερικού πελάτη) και επιστρέφει μια έτοιμη ροή byte με τη μορφή άμεσης λήψης.- Εξουσιοδότηση μέσω Bearer tokens (
WEBHOOK_REFRESH_TOKEN) με προστασία από επιθέσεις χρονισμού μέσωsecrets.compare_digest.
7. Πίνακας ελέγχου και Observability (NiceGUI + AG Grid)
Η παρακολούθηция των επιχειρηματικών δεικτών και της κατάστασης του συστήματος έχει μεταφερθεί σε έναν εγγενή πίνακα ελέγχου Single-Page βασισμένο στο NiceGUI 2.x:
- Διαδραקטικοί πίνακες
AG Grid (v32+)με προσαρμοσμένα φίλτρα πλαισίων ελέγχου στυλ Excel (aggrid_filters.js). - Παρακολούθηση σε πραγματικό χρόνο ουρών, καθυστερήσεων παρόχων API και ping PostgreSQL / Redis.
- Φιλτράριστρο βασισμένο σε ημερομηνίες από άκρη σε άκρη με απρόσκοπτη ενσωμάτωση του ταμπλό BI
Metabaseμέσω υπογεγραμμένων διακριτικών JWT.