บริการ 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 พร้อมเลเยอร์ ORM SQLAlchemy 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 Sheets
  • POST /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 ที่ลงนามแล้ว