Кешування MCP-сервера: чого я навчився після 87 збоїв

Я думав, що мій MCP-сервер не потребує кешування.

Моя база знань мала лише кілька тисяч записів. Запити були швидкими. Я помилявся.

Після 87 збоїв у продакшені та трьох днів налагодження тайм-аутів я засвоїв важкий урок. Кожному MCP-серверу потрібне кешування. Навіть маленьким.

Ось що сталося.

Сервер використовував семантичний пошук для пошуку нотаток. Більшість часу все працювало. Але потім почалися проблеми.

  • З'єднання розривалися посеред запиту.
  • Claude Desktop видавав тайм-аут через 60 секунд.
  • Nginx повертав 504 Gateway Timeout.

Найгірше? Це траплялося лише під час повторних запитів.

Коли користувач двічі ставить одне й те саме питання, з'єднання може простоювати, поки ШІ думає. Потім проксі розриває з'єднання. Claude автоматично повторює запит. Тепер у вас одночасно виконуються два ідентичні пошуки.

Коли стається кілька повторних спроб, пул з'єднань з базою даних вичерпується. Усе «падає».

Я зрозумів, що не варто кешувати фінальну відповідь ШІ. Для MCP це занадто складно. Замість цього мені потрібно було кешувати найважчу частину: семантичний пошук і отримання контенту.

Я перейшов на дворівневу стратегію кешування:

• Рівень 1: In-memory кеш для частих запитів. Це надзвичайно швидко. • Рівень 2: Redis кеш для спільних даних між перезапусками.

Я також дотримувався цих правил, щоб усе працювало:

  • Нормалізуйте запити: я переводжу запити в нижній регістр і видаляю зайві пробіли. Це збільшує кількість збігів у кеші (cache hits).
  • Кешуйте результати, а не потоки: я кешую лише результати пошуку. Пошук займає 95% часу.
  • Поступова деградація: якщо Redis виходить з ладу, сервер продовжує працювати. Він просто звертається безпосередньо до бази даних. Кешування — це оптимізація, а не обов'язкова умова для успішного виконання запиту.

Результати були колосальними.

Мій середній час пошуку скоротився з 320 мс до 12 мс. Це у 27 разів швидше. Мій загальний показник cache hit rate становить 73%. Більшість запитів взагалі не звертаються до моєї бази даних.

Якщо ви створюєте MCP-сервер, зробіть наступне:

  • Для особистого використання: використовуйте in-memory кеш. Це запобігає випадковим тайм-аутам.
  • Для публічних сервісів: використовуйте дворівневий підхід із Redis. Це запобігає збоям і підвищує швидкість.

Кешування — це про надійність. Воно перериває цикл повторних спроб і розривів з'єднання.

Джерело: https://dev.to/kevinten10/mcp-server-caching-what-i-learned-adding-caching-to-my-mcp-knowledge-base-after-87-production-261b

Додаткова спільнота для навчання: https://t.me/GyaanSetuAi