تیم پروتکل MCP نسخه جدیدی را در ۲۸ جولای ۲۰۲۶ منتشر کرد که نشست (session) در سطح پروتکل را حذف کرده و هر درخواست را مجبور به بیوضعیت (stateless) بودن میکند. اگر از کلاینتها، سرورها یا ایجنتهای MCP استفاده میکنید، باید کدهایی را که فرض را بر یک شناسه نشست مداوم میگذارند بازنویسی کنید؛ در غیر این صورت با مشکلاتی نظیر اختلال در مسیریابی، عدم موفقیت در کش (cache miss) و فعالیتهای پسزمینه کنترلنشده مواجه خواهید شد.
چرا این تغییر مهم است
MCP قبلاً نیاز به یک handshake داشت که یک شناسه نشست تولید میکرد. سرویسهای پاییندستی به آن شناسه تکیه میکردند تا فرض کنند مجموعهای از درخواستها به یک پروسه واحد میرسند، از مسیریابی چسبنده (sticky routing) در متعادلکنندههای بار استفاده کنند و دادههای مربوط به هر نشست را در حافظه ذخیره کنند. نسخه جولای این مدل را با یک جریان خالص درخواست-پاسخ (request-response) جایگزین کرده است. اکنون میتوان یک سرور را بدون نگرانی از از دست رفتن نشستها، اضافه یا حذف کرد. پروتکل دیگر بافت (context) را حفظ نمیکند؛ این وظیفه بر عهده اپلیکیشن است.
تیمهایی که کدهای قدیمی مبتنی بر نشست را حفظ کنند، شاهد پرتاب شدن درخواستها به نمونههای (instances) اشتباه، عدم موفقیت در کش و انباشته شدن وظایف پسزمینه خواهند بود. تیمهایی که الگوی stateless را اتخاذ کنند، میتوانند MCP را پشت متعادلکنندههای بار غیرچسبنده اجرا کرده و مشاهدهپذیری (observability) دقیقتری در کل زنجیره درخواست داشته باشند.
تفاوتهای واقعی
- چرخه حیات پروتکل – handshake و شناسه نشست حذف شدهاند. هر درخواست باید تمام اطلاعات مورد نیاز سرور را همراه داشته باشد؛ هیچ تضمینی وجود ندارد که درخواست بعدی به همان پروسه برسد.
- مسیریابی HTTP – گیتویها اکنون دو هدر جدید
Mcp-MethodوMcp-Nameرا برای تصمیمگیری در مورد مقصد درخواست میخوانند. مسیریابی مبتنی بر session-cookie دیگر کار نمیکند. - کشینگ (Caching) – مشخصات (spec) فیلدهای
ttlMs(زمان زنده ماندن به میلیثانیه) وcacheScopeرا برای عملیات خواندن اضافه کرده است. شما تصمیم میگیرید که آیا دادههای قدیمی (stale) قابل قبول هستند یا خیر و کش را بر همان اساس پیکربندی میکنید. - مشاهدهپذیری (Observability) – یک بلوک
_metaاکنون انتظار یک Payload از نوع W3C Trace Context را دارد که به سیستمهای ردگیری اجازه میدهد گیتویهای لبه (edge gateways)، ابزارها و کارهای بکاند را در یک ردگیری سرتاسری (end-to-end trace) واحد به هم متصل کنند. - ترکیبپذیری (Composition) – افزونهها (extensions) رسمی شدهاند؛ قابلیتهای جدید را میتوان بدون دستکاری در مشخصات اصلی اضافه کرد که این امر معماری سبک پلاگین (plug-in style) را تشویق میکند.
- کارهای طولانیمدت – درخواست/پاسخ ساده دیگر برای وظایفی که دقایق یا ساعتها طول میکشند کافی نیست. پروتکل اکنون یک شیء
Taskبرای کارهای ناهمگام (asynchronous) تعریف میکند که دارای کنترلهای چرخه حیات است.
ریسکهای پنهان در کدهای قدیمی
یک ممیزی سریع اغلب الگوهایی را آشکار میکند که فرض را بر وضعیتمند (stateful) بودن میگذارند:
- نقشههای درونحافظهای (in-memory maps) که با کلید شناسه نشست کار میکنند.
- متعادلکنندههای بار که برای نشستهای چسبنده (sticky sessions) پیکربندی شدهاند.
- روالهای راهاندازی که دادههای مربوط به هر نشست را از قبل در حافظه محلی بارگذاری میکنند.
- منطق پاکسازی که هنگام پایان یک نشست، دادههای تجاری را حذف میکند.
اگر هر یک از این موارد از فرآیند مهاجرت جان سالم به در ببرند، سیستم در هنگام بار زیاد، دادهها را از دست داده یا منابع را نشت (leak) میدهد.
چکلیست عملیاتی مهاجرت
۱. موجودی فرضهای فعلی
تمام جاهایی را که کد شما با شناسه نشست، قانون مسیریابی چسبنده یا کش محلی پروسه در تماس است، شناسایی کنید. مستند کنید که کدام اجزا به هر کدام وابسته هستند.
۲. صریح کردن هویت
شناسههای مستأجر (tenant IDs)، شناسه اجرا (run IDs) و شناسه کاربر (user IDs) را به هر Payload یا هدر درخواست اضافه کنید. با این شناسهها به عنوان منبع اصلی حقیقت (source of truth) برای احراز هویت و بخشبندی دادهها برخورد کنید.
۳. بهروزرسانی پیکربندی مسیریابی
مسیریابی مبتنی بر نشست را با قوانینی که Mcp-Method و Mcp-Name را میخوانند جایگزین کنید. منطق جدید گیتوی را با یک استقرار حداقلی دو-نمونهای (two-instance) پشت یک متعادلکننده بار غیرچسبنده آزمایش کنید.
۴. بازنویسی منطق کشینگ
به فیلدهای جدید ttlMs و cacheScope سوئیچ کنید. تستهای عملکردی اجرا کنید تا ببینید مقادیر مختلف TTL چگونه بر نرخ برخورد (hit rates) و الزامات تازگی دادهها تأثیر میگذارند.
۵. فعالسازی ردگیری سرتاسری
بلوک _meta را با هدر W3C Trace Context پر کنید. تأیید کنید که ردگیریها اکنون بدون وقفه از گیتوی لبه از طریق سرویسهای بکاند شما جریان مییابند.
۶. اتخاذ مدل Task برای کارهای ناهمگام
مشخص کنید چه کسی میتواند یک Task ایجاد کند، حداکثر زمان اجرا را تعیین کنید و محدودیتهای صف را اعمال کنید. سیاستهای صریح لغو (cancellation) و تلاش مجدد (retry) را اضافه کنید و کارهایی را که یک ایجنت میتواند در حین انتظار برای یک Task انجام دهد، محدود کنید.
۷. مرور مستندات
پیش از ۲۸ جولای، یادداشتهای انتشار SDK و کتابخانههای کلاینت را مرور کنید.
۸. اجرای تستهای بازگشتی
مجموعههای تست بازگشتی (regression suites) را که مسیرهای شکست را هدف قرار میدهند اجرا کنید: فراتر از تستهای مسیر اصلی (happy-path)، هدرهای مفقود، Taskهای منقضی شده و دستورالعملهای کش نامعتبر را تزریق کنید. تأیید کنید که سیستم به شکلی نرم (gracefully) دچار افت عملکرد میشود.
آنچه در ادامه باید مراقب باشید
تیمهایی که با موفقیت مهاجرت میکنند، مرزها را آزمایش میکنند، نه فقط مسیر اصلی را. هر استقرار در محیط عملیاتی که پس از ۲۸ جولای همچنان انتظار شناسه نشست را داشته باشد، ممکن است در تعامل با سرورهای جدید MCP با شکست مواجه شود.
