บริการ All File Converter ได้รับการออกแบบให้เป็นระบบ SaaS แบบกระจายที่สามารถขยายขนาดได้ โดยใช้สแต็ก Python 3.12 แบบอะซิงโครนัสสมัยใหม่ สถาปัตยกรรมถูกแบ่งออกเป็นเลเยอร์อิสระ ได้แก่ การรับเหตุการณ์เครือข่าย การจัดลำดับงาน การประมวลผลไฟล์ไบนารีหนักแบบแยกส่วน และลูปการวิเคราะห์
1. สแต็กเทคโนโลยีโดยรวมและสถาปัตยกรรมระบบ
แพลตฟอร์มนี้สร้างขึ้นบนหลักการของปริมาณงานสูง (high-throughput) การใช้หน่วยความจำน้อยที่สุด และการป้องกันความล้มเหลว:
- Telegram Bot Framework:
Aiogram 3.13ทำงานในโหมด Webhook พร้อมการตรวจสอบความถูกต้องของโทเค็นลับและตัวกรองวงจรชีวิตข้อความแบบกำหนดเอง - เกตเวย์เว็บและ REST API:
FastAPIบน ASGI-server Uvicorn พร้อมการสตรีมไฟล์ไบนารีแบบอะซิงโครนัส (FileResponse) และการล้างข้อมูลเบื้องหลังผ่านBackgroundTasks - แคชและตัวจัดการคิว:
Redis 7(การจัดการงาน Celery, การล็อกเพื่อป้องกันภาวะแย่งชิงข้อมูล, การป้องกันการโจมตีแบบ Brute Force, การแคชเซสชัน) - ตัวดำเนินการเบื้องหลัง (Task Queue):
Celery 5.4พร้อมพูลพนักงานเฉพาะในคอนเทนเนอร์แยก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 แยกต่างหากที่มีขีดจำกัดเวลา CPU และหน่วยความจำของตัวเอง
- การควบคุมการค้างและเวลาหมดอายุ (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 ทีละหน้าเป็นภาพแรสเตอร์โดยไม่มีค่าใช้จ่ายเพิ่มเติมจาก LibreOffice) - การจดจำอักขระด้วยแสง (Tesseract OCR): การแยกข้อความสิ่งพิมพ์จากสแกนและรูปภาพด้วยโครงข่ายประสาทเทียมใน 40+ ภาษา
- กราฟิกแบบแรสเตอร์และเวกเตอร์: ไลบรารี
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 มาใช้ ก่อนรับไฟล์ไปประมวลผล ระบบจะตรวจสอบเมตริกสำคัญของโฮสต์:
- หน่วยความจำสำรองฟรี (RAM): ขั้นต่ำ 500 MB ของพื้นที่ว่าง (
guard_min_free_ram_mb) - พื้นที่ดิสก์: ขั้นต่ำ 2 GB ของพื้นที่ว่างในไดเรกทอรี
/tmp(guard_min_free_disk_mb) - คิวงาน: จำกัดความยาวของคิว Celery (งานที่รออยู่ไม่เกิน 20 งาน)
หากเกินขีดจำกัด บริการจะเปิดใช้งานการป้องกันชั่วคราว (HTTP 503 / ข้อความในแชท) เพื่อป้องกันไม่ให้เซิร์ฟเวอร์โอเวอร์โหลดและส่งการแจ้งเตือนทันทีไปยังผู้ดูแลระบบใน Telegram
5. วงจรชีวิตของไฟล์และความปลอดภัย (GDPR)
สถาปัตยกรรมได้รับการออกแบบตามโมเดล Zero-Data-Footprint:
- ไฟล์ของผู้ใช้จะถูกอัปโหลดไปยังโวลุ่มที่ปลอดภัย
tmp/conversions/พร้อมคำนำหน้าที่ไม่ซ้ำกันตามรหัสระบุงาน - ไฟล์จะยังคงเข้าถึงได้เฉพาะภายในเซสชันการทำงาน — ไม่เกิน 15 นาที (900 วินาที)
- ระบบเก็บขยะอัตโนมัติจะลบไฟล์ต้นฉบับและไฟล์ที่พร้อมใช้งานทันทีหลังจากยืนยันการส่งไปยังแชทสำเร็จหรือเมื่อหมดเวลาเซสชัน
- ฐานข้อมูล PostgreSQL จะไม่จัดเก็บไฟล์ไบนารีหรือข้อความส่วนตัวของเอกสาร — ในตารางจะบันทึกเฉพาะเมทาเดตาระบบทางเทคนิคที่ไม่ระบุตัวตนเท่านั้น (รูปแบบ, ขนาดเป็นไบต์, เวลาทำงาน, สถานะ)
6. REST API อเนกประสงค์สำหรับบริการเว็บภายนอก
บริการนี้ได้รับการออกแบบตั้งแต่ต้นให้เป็นแบ็กเอนด์แบบมัลติแพลตฟอร์ม นอกเหนือจากบอทแล้ว ยังมีอินเทอร์เฟซโปรแกรมที่ปลอดภัยเต็มรูปแบบสำหรับเว็บไซต์ (เช่น บน Django) และบอทภายนอก:
GET /api/v1/formats— เมทริกซ์ JSON แบบไดนามิกของทิศทางการแปลงที่มีอยู่ ซึ่งซิงโครไนซ์กับการตั้งค่า Google SheetsPOST /api/v1/convert— เอ็นด์พอยต์อเนกประสงค์ที่รับmultipart/form-data(ไฟล์, รูปแบบเป้าหมาย, ID ลูกค้าภายนอก) และส่งคืนสตรีมไบต์พร้อมใช้งานในรูปแบบการดาวน์โหลดโดยตรง- การให้สิทธิ์ผ่าน Bearer-token (
WEBHOOK_REFRESH_TOKEN) พร้อมการป้องกันการโจมตีทางเวลาผ่านsecrets.compare_digest
7. แผงควบคุมและ Observability (NiceGUI + AG Grid)
การตรวจสอบตัวชี้วัดทางธุรกิจและสถานะของระบบถูกนำไปแสดงในแผงควบคุม Single-Page แบบเนทีฟที่ใช้ NiceGUI 2.x:
- ตารางเชิงโต้ตอบ
AG Grid (v32+)พร้อมตัวกรองช่องทำเครื่องหมายสไตล์ Excel แบบกำหนดเอง (aggrid_filters.js) - การตรวจสอบคิว ความล่าช้าของ API-provider และการพิงค์ PostgreSQL / Redis แบบเรียลไทม์
- การกรองข้อมูลตามวันที่แบบครบวงจร พร้อมการบูรณาการ BI-dashboard
Metabaseอย่างราบรื่นผ่านโทเค็น JWT ที่ลงนามแล้ว