Pengekalan Cache Pelayan MCP: Apa yang Saya Pelajari Selepas 87 Gangguan

Saya fikir pelayan MCP saya tidak memerlukan caching.

Pangkalan pengetahuan saya hanya mempunyai beberapa ribu entri. Carian adalah pantas. Saya silap.

Selepas 87 gangguan produksi dan tiga hari menyahpepijat (debugging) masalah timeout, saya mempelajari pengajaran yang pahit. Setiap pelayan MCP memerlukan caching. Walaupun yang kecil.

Inilah yang berlaku.

Pelayan tersebut menggunakan carian semantik untuk mencari nota. Kebanyakan masa, ia berfungsi. Tetapi kemudian, segalanya rosak.

  • Sambungan terputus di tengah-tengah permintaan.
  • Claude Desktop mengalami timeout selepas 60 saat.
  • Nginx memulangkan 504 Gateway Timeouts.

Bahagian yang paling teruk? Ia hanya berlaku pada carian yang berulang.

Apabila pengguna bertanya soalan yang sama dua kali, sambungan mungkin menjadi tidak aktif (idle) semasa AI sedang berfikir. Proxy kemudian memutuskan sambungan tersebut. Claude mencuba semula permintaan secara automatik. Kini, anda mempunyai dua carian yang serupa berjalan serentak.

Apabila berlakunya banyak cubaan semula, kolam sambungan (connection pool) pangkalan data anda akan habis. Semuanya terhenti.

Saya menyedari bahawa saya tidak sepatutnya menyimpan cache pada respons akhir AI. Itu terlalu kompleks untuk MCP. Sebaliknya, saya perlu menyimpan cache pada bahagian yang berat: carian semantik dan pengambilan kandungan.

Saya beralih kepada strategi caching dua peringkat:

• Peringkat 1: Cache dalam memori (in-memory cache) untuk carian yang kerap. Ini sangat pantas. • Peringkat 2: Cache Redis untuk data dikongsi merentasi but semula (restarts).

Saya juga mengikuti peraturan ini untuk menjadikannya berkesan:

  • Normalisasikan carian: Saya menukar carian kepada huruf kecil dan membuang ruang kosong berlebihan. Ini meningkatkan kadar 'cache hit'.
  • Cache hasil, bukan aliran (streams): Saya hanya menyimpan cache pada hasil carian. Carian mengambil masa sebanyak 95%.
  • Degradasi beransur (Graceful degradation): Jika Redis terhenti, pelayan masih berfungsi. Ia hanya akan terus ke pangkalan data. Caching adalah pengoptimuman, bukan keperluan untuk permintaan berjaya.

Hasilnya sangat besar.

Purata masa carian saya berkurang daripada 320ms kepada 12ms. Itu adalah 27 kali lebih pantas. Kadar 'cache hit' keseluruhan saya adalah 73%. Kebanyakan carian tidak menyentuh pangkalan data saya langsung.

Jika anda membina pelayan MCP, lakukan ini:

  • Untuk kegunaan peribadi: Gunakan cache dalam memori. Ia menghentikan timeout rawak.
  • Untuk perkhidmatan awam: Gunakan pendekatan dua peringkat dengan Redis. Ia mengelakkan kerosakan (crashes) dan meningkatkan kelajuan.

Caching adalah tentang kebolehpercayaan. Ia menghentikan kitaran cubaan semula dan kegagalan sambungan.

Sumber: https://dev.to/kevinten10/mcp-server-caching-what-i-learned-adding-caching-to-my-mcp-knowledge-base-after-87-production-261b

Komuniti pembelajaran pilihan: https://t.me/GyaanSetuAi