Arsitektur Pemisahan Backend untuk Mencegah Timeout 60 Detik dan Kerusakan UI pada LLM Murah
Menggunakan model berbiaya rendah seperti DeepSeek Chat, GPT-4o-mini, atau Gemini 2.5 Flash tentu dapat memangkas biaya API secara signifikan. Masalahnya muncul ketika lalu lintas sedikit meningkat, di mana waktu respons dapat meroket dari 10 detik menjadi 60 detik. Jika kelambatan seperti ini terjadi pada struktur permintaan HTTP sinkron biasa, proses worker server akan terjebak dalam waktu tunggu hingga tidak merespons, sementara frontend akan mengalami timeout dan mengalami kegagalan.
Bagi pengembang solo yang membuat proyek sampingan atau dengan anggaran terbatas, kelumpuhan server adalah hal yang fatal. Namun, tentu saja Anda tidak bisa begitu saja beralih ke model yang mahal. Anda perlu membangun arsitektur pemisahan asinkron secara mandiri untuk memutus koneksi sinkron langsung antara klien dan LLM, serta menyampaikan output mentah dari model ke frontend dengan aman.
Membangun Antrean Latar Belakang Asinkron Berbasis Celery dan Redis
Server web tidak boleh dibiarkan menunggu penyelesaian inferensi LLM secara langsung. Anda harus menggunakan FastAPI sebagai API gateway, lalu menggabungkannya dengan message broker Redis dan distributed worker Celery untuk memisahkan penerimaan permintaan dan operasi inferensi sebenarnya secara total. Ketika pengguna mengirimkan permintaan, server akan langsung mengembalikan ID tugas saja dan memutus koneksi.
Jika Anda menjalankan Celery dengan pengaturan bawaan, tugas dapat hilang atau dieksekusi dua kali jika worker mengalami crash. Untuk mengakomodasi waktu kerja yang lebih lama yang khas dari inferensi LLM, Anda harus menaikkan visibility_timeout menjadi 3600 detik dan menentukan task_acks_late = True agar konfirmasi penerimaan hanya dikirimkan saat tugas selesai dengan normal. Mengatur worker_prefetch_multiplier = 1 juga sangat penting agar satu worker tidak memegang beberapa tugas berat sekaligus dan memicu kemacetan (bottleneck).