MCP Sunucu Önbelleğe Alma: 87 Kesintiden Sonra Öğrendiklerim
MCP sunucumun önbelleğe almaya ihtiyacı olmadığını düşünmüştüm.
Bilgi tabanımda sadece birkaç bin girdi vardı. Sorgular hızlıydı. Yanılmışım.
87 üretim ortamı kesintisi ve üç günlük zaman aşımı hata ayıklama sürecinden sonra acı bir ders aldım. Her MCP sunucusunun önbelleğe almaya ihtiyacı vardır. Küçük olanların bile.
İşte olanlar.
Sunucu, notları bulmak için semantik arama kullanıyordu. Çoğu zaman işe yarıyordu. Ancak sonra işler bozuldu.
- İstek sırasında bağlantılar koptu.
- Claude Desktop 60 saniye sonra zaman aşımına uğradı.
- Nginx 504 Gateway Timeout hatası döndürdü.
En kötü kısmı mı? Bu sadece tekrarlanan sorgularda oluyordu.
Bir kullanıcı aynı soruyu iki kez sorduğunda, yapay zeka düşünürken bağlantı boşta (idle) kalabilir. Ardından bir proxy bağlantıyı keser. Claude isteği otomatik olarak tekrar dener. Şimdi, aynı anda çalışan iki özdeş aramanız var.
Birden fazla yeniden deneme gerçekleştiğinde, veritabanı bağlantı havuzunuz tükenir. Her şey çöker.
Yapay zekanın nihai yanıtını önbelleğe almamam gerektiğini fark ettim. Bu, MCP için çok karmaşık. Bunun yerine, ağır kısmı, yani semantik aramayı ve içerik getirme işlemini önbelleğe almam gerekiyordu.
İki seviyeli bir önbelleğe alma stratejisine geçtim:
• Seviye 1: Sık yapılan sorgular için bellek içi (in-memory) önbellek. Bu son derece hızlıdır. • Seviye 2: Yeniden başlatmalar arasında paylaşılan veriler için Redis önbelleği.
Çalışması için şu kuralları da uyguladım:
- Sorguları normalize edin: Sorguları küçük harfe çeviriyorum ve fazladan boşlukları kaldırıyorum. Bu, önbellek isabet oranını (cache hits) artırır.
- Akışları (streams) değil, sonuçları önbelleğe alın: Sadece arama sonuçlarını önbelleğe alıyorum. Arama süresinin %95'ini alıyor.
- Kademeli düşüş (Graceful degradation): Eğer Redis çökerse, sunucu hâlâ çalışmaya devam eder. Sadece doğrudan veritabanına gider. Önbelleğe alma bir optimizasyondur, isteğin başarılı olması için bir zorunluluk değildir.
Sonuçlar muazzamdı.
Ortalama arama sürem 320ms'den 12ms'ye düştü. Bu, 27 kat daha hızlı. Toplam önbellek isabet oranım %73. Sorguların çoğu veritabanıma hiç uğramıyor bile.
Eğer bir MCP sunucusu inşa ediyorsanız, şunu yapın:
- Kişisel kullanım için: Bellek içi (in-memory) bir önbellek kullanın. Rastgele zaman aşımlarını durdurur.
- Genel hizmetler için: Redis ile iki seviyeli yaklaşımı kullanın. Çökmeleri önler ve hızı artırır.
Önbelleğe alma, güvenilirlik ile ilgilidir. Yeniden deneme ve bağlantı hatası döngüsünü durdurur.
İsteğe bağlı öğrenme topluluğu: https://t.me/GyaanSetuAi
