Безстановы MCP: масштабаванне сервераў без сэсій і абмены дадзеннямі
Як протакол Model Context без стану завершае сесіі та процесы асинхроннай взаўмадзеі, і як _meta-, багатоэтапныя запиты, заголовкі маршрутацыі, кэшаванне та задачы дапамагаюць яму застаўся прыдатным.
Сервер протакола Model Context, які выходзіць на абсалютна працэздатнасць на аднай машыне, можа пачаць выканаляваць як толькі ў вас з’яўляюцца тры копіі яго за дапамогою балансавальніка навантажэння, адтуды ўжо кожна з інстанцый памятае толькі тыя сесіі, якія сама створыла. Перакіранне протаколу да безстановага ядра спрямавана самэўсёлкі на рашэнне гэтай проблемы. У этой статыце пояснюецца, якія змены відбываюцца, калі сесіі і процэс ініцыялізаціі зникаюць, як запиты перадаюць свой сабэй контекст, а таксама як багатокраўныя взаімадзеі, маршрутызацыя на адной паўнайкі, списакі, якія можна кэшаваць, і фонавыя задачы пасляўляюцца ў новай модэлі, ўжо тады вы зможаце адразу разумець, што гэта значыць для сервероў і шлюзоў, якія у вас працуюць.
Прыметка пра часавую сферу: дизайн без стану, які описаны тут, належыць да рэвізіі протакола 2026 года. Деталі, такія як точныя назвы методаў, назвы заголовкаў і типы рэзультатаў, можа ўсё ж змяніцца, таму пераканайцеся ў іх згодна з чынным спефікатам MCP пры ўжыванні іх у кодзе. Якщо вам трэба падтрымка ў асновах таго, як кліенты MCP вышукаюць і запускаюць інструменты, увядзенне ў блогу па тэме як Протакол контэкста моделі дазволяе агентам вышукаць і запускать інструменты раскрывае гэтыя аспекты.
Што значыць „стан“ тут
Сістэма ў становым режыме, калі яй трэба памятаць што-небудзь межы запытамі, каб адмаўляць наступны. Заказ на доставку ўжынкі — гарны паўсядзевы прыклад: ён пераходзіць з стадіі прийнятага, да стадіі падготовкі, да стадіі выдачы і до стадіі доставленага, і служба должна ведаць, на якой стадіі знаходзится кожны заказ, каб магчыма было ў будь-які момент адпаведаць на запыт «Дзе мая ўжынка?».
Больш раннія версіі MCP працавалі аднойчы так сама на рэвэле з’яўлення. Калі кліент (програма на AI) першы раз з’яўляўся на сервере, аба стороны выканалі процедуру ініцыялізацыі. Пасля чаго сервер выдаваў ідэнтыфікатор сесіі, напрыклад abc123, а кліент прыклеяў яго да кожнага наступнага запыту, каб сервер мог асоціяваць кожны вызов з тым, што адбылася раней у размове, включаючы можлівасці, якія былі даговораныя обомі сторонамі.
Чаму сесіі руйнуюцца пад горызонтальным масштабаваннем
За наявнасці адзінаго экзамента сервера і незначныя запотыканні, такія раштрынгі ўсё абходзяцца. Проблэмы пачынаюцься, калі навантажэнне зрастае і вы дадаўце ўсё больш экзаментав сервера за дапамогою балансіра навантажэння:
- Кліент пользователя адправляе свой першы запит, напрыклад, пра спіс інструментаў. Балансір навантажэння адправляе яго на Сервер 1, які стварае сесію
abc123. - Той самы кліент адправляе другі запит, напрыклад, для вызову інструмента з паведамленнямі пра пагоду. Часоў гэтага разу балансір навантажэння выбирае Сервер 2.
- Сервер 2 ніколі не чуў пра
abc123. У яго няма жаднага з данных Сервера 1 у памяці, таму запит не выкананы.
Сістэмы з станамі маюць два стандартных спосабы рашэння. Функцыя «sticky sessions» прыкрепляе кожнаго кліента да адной інстанцы, што паслабляе равнамерны распад навантажэння і ускладняе перехід на альтернатыўную інстанцу. Альтэрнатыўна, спяльны хранальнік, такі як Redis, зберагае даны сесій, якія можа чытаць кожная інстанцыя. эты спосаб працюе, але вымагае дадатковай інфраструктуры для керавання, захавання і падтрымкі, а таксама сетевага пошуку з кожнага запыту, усё гэта толькі для падтрымкі протакола.
Модэль без стану
Рэвізія 2026 года выбирае іншы падход: ёна ператварае MCP на протакол запыту-адказу без стану і відмовляецца ад сесій. Кожны запыт є самастоятельным і не залежыць нічога ад таго, што сервер памятае з паканальнага запыту. Без памяці на кожнаго кліента на серверы, кожная інстанцыя можа адпаведзець на будзь-які запыт, а масштабаванне стае праблемай толькі дадагучы інстанцыяў за звычным балансавальнікам навантажэння.
Гэта не значыць, што ваша прыкладна програма можа зовсім не мець стану. Апранат, який керуе корзінкай пакупак або рэдагаванням довгага документа, таксама патрэбуе даных у якім-небудзь месцы. Разлік у тым, што такі стан стае явнымі данымі прыкладнай програмы, якія зберагаюцца там, дзе вы выберазе, і апыляюцца за дапамою ідэнтыфікатораў у запите, а не неявным станам пратаколу, які з’ўязаны з канектам.
Як запит несе свой сабэстны контекст
Без адпраўкі сигналу аб ідэнтыфікатора сесіі сервер все раве патрэбуе ведаць, якую версію пратаколу викорыстоўвае кліент, хто ён і шта можа робіць. Адказ — кожны запит прыносіць з сабою гэтую інфармацыю.
Об’ект _meta
У тэле запита ёсць необав’язковы об’ект _meta для гэтых метаданых. Ён можа несці:
- Версію пратаколу, ўпэўніваючы сервер у тым, як правільна адразуваць паведамленне.
MyAIApp v1.0.Паколькі контэкст прыходзіць у складзе запиту, сервер можа яго адразу обрабаваць, без падзеі ў таблы сесый. Недагоднаю сторонай яе є адносна большы размер пакета дадзеных за кожны вызов, што зазвычай ўзятаеся за незначнае па адносу да вартасці спяльнага хранення сесый.
Багатоэтапныя взаімадзеі без адкрывання з’ѐеднання
Дызайны з станам упрымніваюць взаімную абмен: якщо серверу патрэбны дадатковыя вядомасці, ён можа запытаць пра яны праз вялікі ўжо з’ѐеднаны канал. Узьмім корыстніка, які хочаць забронюваць рэлігацыю до Делі, але забывае паведаміць дату. Сервер з станам можа проста запытаць пра дату і чакаць адпаведзь праз тое ж з’ѐеднанне.
Протакол без стану не можа падржаць з’яўленыя з’ёднанні для такой мэты, таму MCP вяршыта структураваны багатоэтапны процес:
- Калі сервер прыме запит, у яком не ўсё неабходнае параметры, ён вяртае спецыяльны рэзултат
input requiredзамест таго, каб выйсці з роботы або чакаць. - Кліентское прыкладненне запрашвае у корыстувальца нехваткую інфармацыю.
- Кліент размешчае адпаведныя адказы ў об’екте
input responsesі надае новы, абсалютна незалежны запит, які сервер можа завершыць.
Пакалькі, во другы запрос знаходзіць усё неабяжлівае, ён можа падаць на будзь-яю інстанцыю сервера. Серверу не трэба памятаць, што ён задаў запыт; кліент продовжвае працу з гэтым запросам. Якщо серверу трэба супарабатаваць два запросы (напрыклад, каб утримацца ад павторнай виконанняе дорогіх задач), ён можа вернуць кліенту незрозумелы токен, які той можа перадаць знову, уместо таго, каб зберагаць секрэтную інформацыю.
Маршрутызацыя па заголовках у заместо тэлу
Безстановы падход таксама адкрывае можлівасці для падышу ў выдатнасці та кантроле працы. Два ключовых змены: маршрутызацыя на адваге заголовкаў і можлівасць кэшавання рэзультатаў.
Дакладныя відомасці протаколу ў заголовках HTTP
Ранейша інфраструктура, яка знаходзілася перед серверам MCP, такая як API-шлюзы, захіст веб-даплікацый або балансавальнік навантажэння, была змушана аналізаваць тэла запыткаў у формате JSON, каб выявіць, які метод або інструмент выкананы. Аналіз тэла запыткаў на роўні інфраструктуры спрацоўвае з CPU, прызводзіць да затрымакаў і є складным для налаштавання ў багатых шлюзах.
Згідна з новымі правіламі, HTTP-запыткі павінны выкладваць важлівую інфармацыю пра протакол у заголовках:
MCP-Method, напрыкладtools/call;MCP-Name— назва конкрэтнага інструмента, які выкананы.
Шлюз можа чытаць гэтыя заголовкі і направляць, абмежваць частоту або блакаваць трафік, не прабуючы змяніць самае паведамленне. Гэта дазволяе проста ўтварыць стандартныя правілы — напрыклад, надсылаць дорогія інструменты у спецыяльны пул экземпляраў, застаўляць строгейшыя абмежэння для певнага інструменту чы ўсёце блакаваць яго пад час інцидэту. Як і зазвычай з заголовкамі, сервер仍应 пераканацца, што яны адпавядаюць тэксту паведамлення, каб кліент не могаў абйсці правіла, надасівшы вводзячы ў глухое кало заголовак.
Спісы інструментоў та запросаў, якія можна кэшаваць
Кліенты постаўляюць серверам адныя і тыя ж запитанні ўсё час: якія інструменты доступны, якія запросы падтрымліваюцца. Сервер, які обслужоўвае тыясячы корыстувачаў, можа віддаць значную частку свайго ресурсу на адпаведзенне на гэтыя ідэнтычныя запиты.
Співыявленні і спісы інструментаў рэдка калі зміняюцца, таму новая версія дазволяе кэшаваць рэзультаты спісаў. Кліент можа запрашаць спіс інструментаў аднойчы, зберагчы яго ў памяці і вжываць знову для пазнейшых запитоў, узамест таго каб запрашаць яго зноў. Тая ж асоблівасць дазволяе спяльнай інфраструктурэ, такой як шлюз або HTTP-кэш пры серверах, адпавядаць на падзейны запиты на спісы ад многа кліентаў адразу. У будзь-якам случае да сервера надходзіць значна менша колькасць запитоў. Як і для будзь-якага кэшу, патрэбны спосабы анулювання яго значэння, калі змяны ў розглядзе зменяюць спіс, таму трэба планаваць термін выканання аб версіюванне, а не кэшаваць вечна.
Дзейнікаванне задач у фоне
Дзеяныя дэталей некалькіх інструментаў адпавядаюць за мілісекунды, напрыклад пад час вычыслення парадакту пагоды. Іншыя ж так не робяць: запит да асистэнта пра аналіз 10 000 дакументаў можа зайняць дваццаць хвілін. У простым цыкле запит-адпаведзь, кліенту давялося бы падтрымваць з’ѐеднанне відкрытым пра весь час, што займае рэсурсы на обох канцах і заставляе інтэрфейс корыстувальца чакаць.
Ёжчы гэта, перасмотра 2026 года абяўляе перадзеяную структуру Заданняў:
- Стварэнне. Калі кліент запускае ресурсоўнае дзеянне, сервер адразу ж адпавядае ідэнтыфікатарам задання, напрыклад
task_abc123, і пачатковы запит завершаецца. - Выкананне на фоне. Сервер выкаанаўляе аналіз на фоне, пакуль корыстувальнік працюе з іншымі часткамі прыемлі.
Task Get.Task Update.Это звычны асінхронны патэран заданняў з веб-API, прыменены ў MCP. Ён дапамагае програмам заставацца чутлівымі да змян, незалежна ад таго, насколькі важкае ўзбудова. Пад час размешчэння у калькі інстансаў памятайце, што статус задання павінен быть збераглы там, куда можа дасягнуць кожны інстанс, адтак як вызов Task Get можа прайсці на іншы сервер, чым той, які стварыў задання. Протакол больш не патрабуе спяльнага стану сесіі, але ведачыцтва пра дыявернай базе заданняў застаецца вашай адпаведнасцю.
Што гэта значыць для вашых сервераў
Якщо вы керуеце або ствараеце серверы MCP, практычны список перакладоў выглядае так:
- Удаліце схованую память на адзіны з’ѐеднанне. Усе, што інструменту патрэбна між вызывамі, должна знаходзіцца ў явнай базе дадзеных, пазначанай ідэнтыфікаторамі, якія надае кліент.
- Чытайце контекст з кожнага запиту. Вярбуйце версію протакола, ідэнтыфікатор кліента та його можлівасці з
_meta, а не з сесіі. - Проектуйце інструменты так, каб яны запытвалі, а не чакалі. Верніце рэзультат, для якога патрэбны даны, калі параметры відсутнія, і чакайце адпаведных адказоў у новым запыті.
- Ўжывайце загаловкі маршрутацыі на роўні входу. Наладзіце шлюзы для маршрутацыі та обмежэння па
MCP-MethodіMCP-Name, а таксама пераканайцеся ў ўсасненасці іх з тэлам запыту на сервере.
Ключовыя выводы
- Безстановая рэвізія заменяе дизайн MCP, адаснованы на сесіях, на незалежныя вызовы запрос-адпаведзь, чым усунулася патрэба ў «ляпкавых» сесіях або спільнай хранілні сесій проста для расшырэння.
- Хендшэйк і ID сесій з’явіліся; кожны запрос несе версію протаколу, ідэнтыфікатор кліента і його можлівасці ў
_meta. - Недастатковая інфармацыя адрабатваецца за дапамогою рэзультата
input requiredі наступнага запросу, які несеinput responses, замест адкрытага з’ѐеднання. MCP-MethodіMCP-Nameзаголовкі памагаюць шлюзам керавацьваць, абсалютваць ліміты і блакаваць трафік без пасарбавання JSON-тэле.- Стабільныя спісы інструментаў, запросаў і рэсурсаў стаюць кэшаванымі, чым зменшуецца паўтаральны навантажэння на серверы.
- Інструменты, якія працуюць дзеўяльна, негайна вяртаюць ID задання, а кліенты прабываюць з
Task GetіTask Update. - Безстановасць перамешчае стан, але не усуняе яго: даны прыкладнення і працэс задання яшчэ патрабуюць стойкага месца, да калі можа дасягнуць кожны экземпляр. Пераканайцеся, што назвы супадаюць з чынным спісаванням, прытым як будзеце на іхаў аднойчы працаваць.
Супаканальная літэратура
- Як протакол Model Context Protocol дапамагае AI-агентам аднаходзіць і выклікаць інструменты — Чытракліва адказа пра MCP: як хосты, кліенты і серверы дапамагаюць AI-зялённям аднаходзіць інструменты, выклікаць іх з структураванымі данымі, а таксама якія ў іх є практычныя меры.
- Проектаванне інструментальных интерфейсаў з эфектывае выкарыстоўванне токенаў для сервераў MCP — Дазнаецеся, як можна зьедыніць дзесяткі вакласаў інструментаў MCP у калькі локальна адпрацоўваных інструментаў, спрямаваных на конкрэтныя задачы, не адмахваючыся ніякой з фундаментальных функцый.