چرا Durable Objects برای ایجنتها ساخته شده
خلاصهٔ کاملتر
نویسنده که چند ماه تقریباً بهطور کامل روی Durable Objects کلاودفلر محصول ساخته، تو این پست استدلال میکنه که این اولیه برای ساخت محصول و مخصوصاً ایجنتها فوقالعادهست و تقریباً هیچ ارائهدهندهٔ دیگهای چیزی شبیهش نداره. انگیزهٔ نوشتنش هم این بوده که خیلی از همصحبتهاش اصلاً اسمش رو نشنیده بودن.
خود مفهوم ترکیب سه چیز سادهست: یه ایزولهٔ V8 بدون سرور که بهمحض نیاز بالا و پایین میره، یه نمونهٔ SQLite اختصاصی برای هر آبجکت، و مسیریابی درخواستها به یه ایزولهٔ مشخص. هر نمونه یه شناسه داره و همهٔ درخواستهای همون شناسه به همون یه ایزوله میرسن؛ یعنی بهجای اینکه سرویسهات به یه دیتابیس مشترک حرف بزنن، سیستمت به مجموعهای از آبجکتها تبدیل میشه که با درخواست تازه یا تایمر بیدار میشن.
export class ChatRoom extends DurableObject<Env> {
private sockets = new Set<WebSocket>();
async fetch(_request: Request): Promise<Response> {
const { 0: client, 1: server } = new WebSocketPair();
server.accept();
this.sockets.add(server);
return new Response(null, { status: 101, webSocket: client });
}
}مزیتهایی که برمیشمره عملیان. توسعهٔ محلی با wrangler انجام میشه و چون تو پروداکشن هم SQLite اجرا میشه، فاصلهٔ محیط توسعه و پروداکشن کمه و ایجنت کدنویس به داکر و پستگرس وابسته نیست. اجرای تکنخی یعنی نگرانی کمتر بابت قفل و همروندی. پشتیبانی بومی از وبسوکت هم به گفتهٔ او برای هر کسی که با فناوت اعلانهای بزرگمقیاس دستوپنجه نرم کرده نعمته: بهجای یه سیستم چندلایه، اتصالها رو تو همون آبجکت گرم نگه میداری و پخش میکنی.
ولی بزرگترین مزیت از نگاه نویسنده هزینهست. آبجکتها موقع مکث فقط بابت ذخیرهسازی هزینه دارن، پس میشه هر تعداد که خواستی ساخت؛ به گفتهٔ او کل زیرساخت یه بار کاری چندایجنتی نسبتاً بزرگ ماهی حدود ۱۰ دلار درمیاومده، جایی که روی AWS راحت ده تا پنجاه برابر میشد. محیطهای پیشنمایش هم تقریباً رایگانن.
نویسنده کاستیها رو هم پنهون نمیکنه. مدل همروندی تکنخی پیچیدگیاش رو داره و اگه حواست نباشه ممکنه بخشی از تابعت قبل از نوشتن تو حافظه از یه مدل زبانی نمونهبرداری کنه و همهٔ مشترکها رو معلق نگه داره؛ خودش موردهایی رو دیده که کد تولیدشده توسط ایجنت دهها ثانیه درخواستهای خواندن رو بلاک کرده.
پشتیبانی درجهیک فقط برای تایپاسکریپته، بخشهایی از APIهای نود موجود نیستن، مهاجرت و نسخهبندی اسکیما دردسر خودش رو داره و امکان اجرا روی زیرساخت خود مشتری هم عملاً وجود نداره، که برای بعضی مشتریهای حساس به داده یه مانع جدیه.
آخر پست هم چند جایگزین نوظهور معرفی میکنه: Restate با مفهوم Virtual Objects و امکان اجرای خودمیزبان و پشتیبانی از راست و Go، شرکت نوپای Rivet با مفهوم اکتور، و مجموعهاولیههای Vercel مثل Workflows و Sandboxes و AI Gateway.
نکات کلیدی:
- Durable Object یعنی ایزولهٔ V8 بدون سرور بهعلاوهٔ SQLite اختصاصی و مسیریابی بر اساس شناسه
- مدل ذهنی عوض میشه: بهجای سرویس و دیتابیس مشترک، مجموعهای از آبجکتهای رویدادمحور
- اجرای تکنخی، پشتیبانی بومی وبسوکت و اتصال ساده به سرویسها با فایل پیکربندی
- هزینهٔ اعلامی حدود ۱۰ دلار در ماه برای بار چندایجنتی، در برابر ده تا پنجاه برابر روی AWS
- کاستیها: خطر بلاک شدن درخواستها هنگام فراخوانی مدل، تمرکز روی تایپاسکریپت، نبود بخشی از APIهای نود
- مهاجرت اسکیما پیچیدهست و اجرا روی ابر خود مشتری عملاً ممکن نیست
- جایگزینهای نوظهور: Restate، Rivet و مجموعهاولیههای Vercel




