MCP Server Caching: ৮৭টি আউটআউটের পর আমি যা শিখলাম

আমি ভেবেছিলাম আমার MCP সার্ভারে ক্যাশিং (caching)-এর প্রয়োজন নেই।

আমার নলেজ বেসে মাত্র কয়েক হাজার এন্ট্রি ছিল। কুয়েরিগুলো দ্রুত ছিল। আমি ভুল ছিলাম।

৮৭টি প্রোডাকশন আউটআউট এবং তিন দিন টাইমআউট ডিবাগ করার পর, আমি একটি কঠিন শিক্ষা পেয়েছি। প্রতিটি MCP সার্ভারের ক্যাশিং প্রয়োজন। এমনকি ছোট সার্ভারের ক্ষেত্রেও।

যা ঘটেছিল তা নিচে দেওয়া হলো।

নোটগুলো খুঁজে পেতে সার্ভারটি semantic search ব্যবহার করত। বেশিরভাগ সময় এটি ঠিকঠাক কাজ করত। কিন্তু তারপর, সমস্যা শুরু হলো।

  • রিকোয়েস্ট চলাকালীন কানেকশন বিচ্ছিন্ন হয়ে যেত।
  • ৬০ সেকেন্ডের পর Claude Desktop টাইমআউট হয়ে যেত।
  • Nginx 504 Gateway Timeout রিটার্ন করত।

সবচেয়ে খারাপ দিকটি কী ছিল? এটি শুধুমাত্র একই কুয়েরি বারবার করার সময় ঘটত।

যখন একজন ব্যবহারকারী একই প্রশ্ন দুবার করেন, তখন AI চিন্তা করার সময় কানেকশনটি আইডল (idle) হয়ে থাকতে পারে। এরপর একটি প্রক্সি কানেকশনটি বিচ্ছিন্ন করে দেয়। Claude স্বয়ংক্রিয়ভাবে রিকোয়েস্টটি পুনরায় করার চেষ্টা করে। এখন, একই সাথে দুটি অভিন্ন সার্চ চলতে থাকে।

যখন একাধিকবার রিট্রাই (retry) হয়, তখন আপনার ডাটাবেস কানেকশন পুল (connection pool) শেষ হয়ে যায়। সবকিছু অচল হয়ে পড়ে।

আমি বুঝতে পারলাম যে আমার AI-এর চূড়ান্ত রেসপন্স ক্যাশ করা উচিত নয়। MCP-এর জন্য এটি অত্যন্ত জটিল। পরিবর্তে, আমাকে ভারী অংশটি ক্যাশ করতে হতো: semantic search এবং কন্টেন্ট ফেচিং (content fetching)।

আমি একটি দুই-স্তরের ক্যাশিং কৌশলে (two-level caching strategy) চলে এলাম:

• Level 1: ঘন ঘন করা কুয়েরির জন্য in-memory cache। এটি অত্যন্ত দ্রুত। • Level 2: রিস্টার্টের পরেও শেয়ারড ডেটার জন্য Redis cache।

এটি কার্যকর করতে আমি নিচের নিয়মগুলো অনুসরণ করেছি:

  • Normalize queries: আমি কুয়েরিগুলোকে lowercase করে ফেলি এবং অতিরিক্ত স্পেস সরিয়ে ফেলি। এতে cache hits বাড়ে।
  • Cache results, not streams: আমি শুধুমাত্র সার্চ রেজাল্ট ক্যাশ করি। সার্চ করতে মোট সময়ের ৯৫% ব্যয় হয়।
  • Graceful degradation: যদি Redis ডাউন হয়ে যায়, সার্ভার তবুও কাজ করে। এটি সরাসরি ডাটাবেসে চলে যায়। ক্যাশিং হলো একটি অপ্টিমাইজেশন, রিকোয়েস্ট সফল হওয়ার জন্য এটি কোনো আবশ্যিক শর্ত নয়।

ফলাফল ছিল বিশাল।

আমার গড় সার্চ টাইম 320ms থেকে কমে 12ms-এ নেমে এসেছে। এটি ২৭ গুণ দ্রুত। আমার মোট cache hit rate হলো 73%। বেশিরভাগ কুয়েরি আমার ডাটাবেসে পৌঁছায়ই না।

আপনি যদি একটি MCP সার্ভার তৈরি করেন, তবে এটি করুন:

  • ব্যক্তিগত ব্যবহারের জন্য: একটি in-memory cache ব্যবহার করুন। এটি এলোমেলো টাইমআউট রোধ করে।
  • পাবলিক সার্ভিসের জন্য: Redis সহ দুই-স্তরের পদ্ধতি ব্যবহার করুন। এটি ক্র্যাশ প্রতিরোধ করে এবং গতি বাড়ায়।

ক্যাশিং হলো নির্ভরযোগ্যতার বিষয়। এটি রিট্রাই এবং কানেকশন ফেইলিউরের চক্র বন্ধ করে।

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

Optional learning community: https://t.me/GyaanSetuAi