Caching MCP Server: Apa yang Saya Pelajari Setelah 87 Kali Gangguan
Saya pikir MCP server saya tidak membutuhkan caching.
Basis pengetahuan saya hanya memiliki beberapa ribu entri. Query berjalan cepat. Saya salah.
Setelah 87 kali gangguan di produksi dan tiga hari melakukan debugging timeout, saya mendapat pelajaran berharga. Setiap MCP server membutuhkan caching. Bahkan yang kecil sekalipun.
Inilah yang terjadi.
Server tersebut menggunakan semantic search untuk menemukan catatan. Sebagian besar waktu, semuanya berjalan lancar. Namun kemudian, masalah muncul.
- Koneksi terputus di tengah permintaan.
- Claude Desktop mengalami timeout setelah 60 detik.
- Nginx mengembalikan 504 Gateway Timeouts.
Bagian terburuknya? Hal ini hanya terjadi pada query yang berulang.
Ketika seorang pengguna menanyakan pertanyaan yang sama dua kali, koneksi mungkin menjadi idle saat AI sedang berpikir. Proxy kemudian memutus koneksi tersebut. Claude mencoba kembali (retry) permintaan secara otomatis. Sekarang, Anda memiliki dua pencarian identik yang berjalan secara bersamaan.
Ketika terjadi beberapa kali retry, database connection pool Anda akan habis. Semuanya mati.
Saya menyadari bahwa saya tidak seharusnya melakukan caching pada respons akhir AI. Itu terlalu kompleks untuk MCP. Sebaliknya, saya harus melakukan caching pada bagian yang berat: semantic search dan pengambilan konten (content fetching).
Saya beralih ke strategi caching dua tingkat:
• Level 1: In-memory cache untuk query yang sering dilakukan. Ini sangat cepat. • Level 2: Redis cache untuk data bersama di seluruh restart.
Saya juga mengikuti aturan-aturan ini agar berhasil:
- Normalisasi query: Saya mengubah query menjadi huruf kecil dan menghapus spasi berlebih. Ini meningkatkan cache hits.
- Cache hasil, bukan stream: Saya hanya melakukan caching pada hasil pencarian. Pencarian memakan waktu 95% dari total waktu.
- Graceful degradation: Jika Redis mati, server tetap berfungsi. Server hanya akan langsung mengakses database. Caching adalah sebuah optimasi, bukan persyaratan agar permintaan berhasil.
Hasilnya sangat luar biasa.
Rata-rata waktu pencarian saya turun dari 320ms menjadi 12ms. Itu 27x lebih cepat. Total cache hit rate saya adalah 73%. Sebagian besar query sama sekali tidak menyentuh database saya.
Jika Anda membangun MCP server, lakukan hal ini:
- Untuk penggunaan pribadi: Gunakan in-memory cache. Ini menghentikan timeout yang acak.
- Untuk layanan publik: Gunakan pendekatan dua tingkat dengan Redis. Ini mencegah crash dan meningkatkan kecepatan.
Caching adalah tentang keandalan. Ini menghentikan siklus retry dan kegagalan koneksi.
Komunitas belajar opsional: https://t.me/GyaanSetuAi
