تاوان استارت سرد: چگونه «تابع به عنوان سرویس» تأخیر را فدای هزینه و سادگی عملیاتی میکند
پلتفرمهای پردازش بدون سرور (Serverless) برای صرفهجویی در منابع، محیطهای اجرایی بیکار را از بین میبرند و درخواستهای بعدی را مجبور میکنند تا زمان مقداردهی اولیه یک کانتینر جدید از صفر، منتظر بمانند.
به قلم کاوان رامین
این خبر را به اشتراک بگذارید
بهطور خلاصه
- پلتفرمهای «تابع به عنوان سرویس» (FaaS) محیطهای اجرایی بیکار را برای صرفهجویی در منابع از بین میبرند که باعث تأخیر «استارت سرد» در فراخوانی مجدد تابع میشود.
- تأخیر استارت سرد از ۱۰۰ میلیثانیه برای محیطهای زمان اجرای سبک مانند Node.js تا چند ثانیه برای فریمورکهای سنگینتر مانند ماشین مجازی جاوا متغیر است.
- فرآیند مقداردهی اولیه شامل تأمین یک کانتینر، انتقال کد برنامه و بارگذاری وابستگیها در حافظه است.
پلتفرمهای «تابع به عنوان سرویس» (FaaS) با از بین بردن محیطهای اجرایی بیکار برای صرفهجویی در منابع، تأخیر را فدای هزینه و سادگی عملیاتی میکنند و درخواستهای بعدی را مجبور میکنند تا زمان مقداردهی اولیه یک کانتینر جدید از صفر، منتظر بمانند.
این تأخیر که به عنوان «استارت سرد» (cold start) شناخته میشود، مصالحه بنیادین در قلب پردازش بدون سرور (serverless) است. توسعهدهندگان کنترل زیرساختهای پایه را واگذار میکنند و در ازای آن مقیاسپذیری خودکار و صورتحسابهای دقیق به دست میآورند، اما میپذیرند که برنامه آنها گاهی اوقات پیش از پاسخگویی به کاربر، برای بازسازی خود متوقف شود.[1][4]
پارادایم بدون سرور که با راهاندازی AWS Lambda در سال ۲۰۱۴ به محبوبیت رسید، به عنوان پایان مدیریت زیرساخت بازاریابی شد. وعده آنها سرراست بود: کد را بنویسید، آن را آپلود کنید و ارائهدهنده ابری بقیه کارها را انجام میدهد. اما این انتزاع، یک واقعیت مکانیکی پیچیده را پنهان میکند.
هنگامی که یک تابع فراخوانی میشود، ارائهدهنده باید منابع پردازشی را تخصیص دهد، بسته استقرار را دانلود کند، محیط زمان اجرا (runtime) را مقداردهی اولیه کرده و هرگونه منطق راهاندازی را اجرا کند. اگر تابع اخیراً فراخوانی شده باشد، محیط «گرم» نگه داشته میشود و در چند میلیثانیه پاسخ میدهد. اما اگر بیکار بوده باشد، ارائهدهنده منابع را پس میگیرد و فراخوانی بعدی باعث یک استارت سرد میشود.[3][5]
بزرگی این تاوان به شدت به محیط زمان اجرا و پیچیدگی برنامه بستگی دارد. محیطهای سبک مانند Node.js یا Python اغلب میتوانند در ۱۰۰ تا ۲۰۰ میلیثانیه مقداردهی اولیه شوند.
با این حال، همانطور که محققان خاطرنشان میکنند، «تاوان استارت سرد از دهها میلیثانیه برای زماناجراهای سبک تا چند ثانیه برای برنامههایی که روی ماشین مجازی جاوا (JVM) اجرا میشوند، متغیر است.» برای استقرارهای عملیاتی حساس به تأخیر، یک تأخیر چند ثانیهای نقض مستقیم اهداف سطح سرویس (SLO) است که منجر به رها شدن سبدهای خرید و تایماوت شدن درخواستهای API میشود.[1][5]
برای درک چرایی این اتفاق، بهتر است استارت سرد را به مراحل تشکیلدهنده آن تجزیه کنیم. مرحله اول، مقداردهی اولیه نمونه (instance) است، جایی که ارائهدهنده ابری یک ماشین مجازی یا کانتینر را تأمین میکند. مرحله دوم، انتقال برنامه است که کد را از فضای ذخیرهسازی به محیط اجرا منتقل میکند. مرحله نهایی، بارگذاری کد برنامه است، جایی که محیط زمان اجرا کد را تجزیه کرده و وابستگیها را مقداردهی اولیه میکند. هر مرحله تأخیری به همراه دارد و هرچه فریمورک سنگینتر باشد، این انتظار طولانیتر خواهد بود.[3]
ارائهدهندگان ابری انگیزه مالی قدرتمندی برای بازپسگیری تهاجمی منابع بیکار دارند. نگهداری کانتینرهای گرم نیازمند حافظه و چرخههای پردازنده (CPU) است که هزینه در بر دارد. با خاتمه دادن به توابع غیرفعال — اغلب پس از ۵ تا ۱۵ دقیقه بیکاری — ارائهدهندگان تراکم منابع را در سرورهای فیزیکی خود به حداکثر میرسانند.
این بهرهوری چندمستأجری (multi-tenant) همان چیزی است که به آنها اجازه میدهد از کاربران فقط برای میلیثانیههای دقیقی که کدشان در حال اجراست، هزینه دریافت کنند. استارت سرد یک باگ نیست؛ بلکه مکانیزمی است که مدل کسبوکار بدون سرور را سودآور میکند.[4][5]
با رشد پذیرش معماری بدون سرور، صنعت استراتژیهای مختلفی را برای کاهش این تأخیر معرفی کرده است. رایجترین راهحل تجاری، «همزمانی تأمینشده» (provisioned concurrency) است که توسط ارائهدهندگان بزرگ در حدود سال ۲۰۱۹ معرفی شد.
این ویژگی به توسعهدهندگان اجازه میدهد تا با پرداخت هزینهای ثابت، تعداد مشخصی از محیطهای اجرایی را به طور دائم گرم نگه دارند. اگرچه این کار مشکل عملکرد را حل میکند، اما اساساً مدل هزینه بدون سرور را در هم میشکند و قیمتگذاری متغیر و مبتنی بر استفاده را دوباره به هزینههای ثابت زیرساختی تبدیل میکند.[1][4]
فراتر از خرج کردن پول برای حل مشکل، مهندسان بهینهسازیهایی در سطح برنامه را نیز بررسی کردهاند. یکی از رویکردها «ادغام توابع» (function fusion) است که چندین تابع کوچک را در یک استقرار بزرگتر ترکیب میکند تا فرکانس استارتهای سرد را در یک معماری میکروسرویس توزیعشده کاهش دهد. با تجمیع مسیر اجرا، توسعهدهندگان میتوانند به جای مدیریت چرخه حیات دهها تابع پراکنده، یک کانتینر واحد و سنگینتر را گرم نگه دارند.[2][5]
مسیر امیدوارکننده دیگر، بارگذاری هوشمند کد است. محققان فریمورکهایی مانند FaaSLight توسعه دادهاند که گرافهای فراخوانی در سطح تابع میسازند تا در مرحله مقداردهی اولیه، تنها کدهای ضروری را شناسایی و بارگذاری کنند.
با جداسازی کدهای اختیاری و بارگذاری آنها در صورت تقاضا، «FaaSLight میتواند تأخیر بارگذاری کد برنامه را تا ۷۸٫۹۵٪ کاهش دهد» که به نوبه خود تأخیر کل پاسخ را به طور متوسط ۱۹٫۲۱٪ پایین میآورد. این رویکرد مستقل از پلتفرم نیازی به تغییر در هایپروایزر پایه ندارد، که آن را برای توسعهدهندگانی که در اکوسیستمهای ابری خاصی قفل شدهاند، بسیار جذاب میکند.[3]
صنعت همچنین در حال بررسی تکنیکهای بازیابی-چکپوینت مبتنی بر اسنپشات است. به جای مقداردهی اولیه یک محیط زمان اجرا از صفر، پلتفرم یک اسنپشات از حافظه یک محیط کاملاً مقداردهیشده میگیرد و در صورت نیاز به یک نمونه جدید، آن را بازیابی میکند.
این کار میتواند زمان راهاندازی JVM را از چند ثانیه به صدها میلیثانیه کاهش دهد. با این حال، استفاده از اسنپشات چالشهای جدیدی ایجاد میکند، مانند مدیریت کهنگی وضعیت (state staleness) و اطمینان از اینکه تصادفی بودن رمزنگاری هنگام کلون شدن یک اسنپشات برای چندین بار، به خطر نمیافتد.[1][5]
مجازیسازی سبک مسیر دیگری را پیش رو میگذارد. فناوریهایی مانند WebAssembly (Wasm) با اجرای باینریهای از پیش کامپایلشده در یک سندباکس بسیار محدود و دور زدن سربار کانتینرهای سنتی، زمان راهاندازی تقریباً آنی را فراهم میکنند. در حالی که Wasm هنوز در حال بلوغ است، توانایی آن در مقداردهی اولیه در حد میکروثانیه به جای میلیثانیه، آن را به عنوان جانشین بالقوهای برای نسل فعلی پلتفرمهای FaaS مبتنی بر کانتینر مطرح میکند.[1][5]
با وجود این پیشرفتها، مصالحه بنیادین همچنان پابرجاست. تیمهای مهندسی باید به طور مداوم سادگی عملیاتی معماری بدون سرور را در برابر الزامات سختگیرانه تأخیر برنامههای خود متعادل کنند. برای پردازشهای پسزمینه، مدیریت رویدادهای ناهمگام و کارهای دستهای (batch jobs)، تاوان استارت سرد کاملاً قابل قبول است. اما برای APIهای همگام و کاربرمحور، این امر نیازمند برنامهریزی دقیق معماری و اغلب، هزینههای اضافی است.[4][5]
اکوسیستم بدون سرور در حال تکامل از یک انتزاع «یک اندازه برای همه» به طیفی از مدلهای اجرایی است. توسعهدهندگان در حال یادگیری این موضوع هستند که از هیاهوی بازاریابی مقیاسپذیری بینهایت و نگهداری صفر عبور کنند تا واقعیتهای مکانیکی پلتفرم را درک کنند. تاوان استارت سرد احتمالاً هرگز به طور کامل از بین نخواهد رفت، زیرا این تجلی فیزیکی مدل اقتصادی بدون سرور است. اکنون هدف دیگر حذف آن نیست، بلکه مدیریت پیشبینیپذیر آن است.[1][4][5]
اصطلاحات کلیدی
- تابع به عنوان سرویس (FaaS)
- یک مدل پردازش ابری که در آن توسعهدهندگان توابع مجزایی را مستقر میکنند که در پاسخ به رویدادها اجرا میشوند، بدون اینکه نیازی به مدیریت سرورهای پایه داشته باشند.
- استارت سرد (Cold Start)
- تاوان تأخیری که زمانی تحمیل میشود که یک پلتفرم بدون سرور باید برای رسیدگی به یک فراخوانی، یک محیط اجرایی جدید را از صفر مقداردهی اولیه کند.
- همزمانی تأمینشده (Provisioned Concurrency)
- پیکربندی خاصی که تعداد مشخصی از محیطهای اجرایی را مقداردهیشده و آماده پاسخگویی فوری نگه میدارد و هزینه را فدای عملکرد میکند.
- ادغام توابع (Function Fusion)
- یک تکنیک بهینهسازی که چندین تابع کوچک بدون سرور را در یک استقرار واحد ترکیب میکند تا سربار توزیعشده استارتهای سرد را کاهش دهد.
- وباسمبلی (Wasm)
- یک فرمت دستورالعمل باینری که یک سندباکس اجرایی سبک و با بارگذاری سریع فراهم میکند و به طور فزایندهای برای به حداقل رساندن زمان مقداردهی اولیه بدون سرور استفاده میشود.
پرسشهای متداول
استارت سرد در پردازش بدون سرور دقیقاً چیست؟
استارت سرد زمانی رخ میدهد که یک ارائهدهنده ابری باید پیش از آنکه یک تابع بتواند درخواستی را پردازش کند، یک محیط اجرایی جدید را از صفر مقداردهی اولیه کند — که شامل تأمین یک کانتینر و بارگذاری کد میشود.
چرا ارائهدهندگان ابری توابع بیکار را از بین میبرند؟
ارائهدهندگان، توابع غیرفعال را معمولاً پس از ۵ تا ۱۵ دقیقه خاتمه میدهند تا حافظه و چرخههای پردازنده آزاد شوند؛ این کار به آنها اجازه میدهد تراکم سرور را به حداکثر رسانده و قیمتگذاری مبتنی بر اجرا ارائه دهند.
زبان برنامهنویسی چگونه بر زمان استارت سرد تأثیر میگذارد؟
محیطهای زمان اجرای سبک مانند Node.js و Python به سرعت، اغلب در ۱۰۰ تا ۲۰۰ میلیثانیه، مقداردهی اولیه میشوند، در حالی که فریمورکهای سنگینتر مانند ماشین مجازی جاوا (JVM) ممکن است برای بارگذاری کلاسها و وابستگیها چند ثانیه زمان ببرند.
همزمانی تأمینشده (Provisioned Concurrency) چیست؟
این یک ویژگی صورتحساب است که به توسعهدهندگان اجازه میدهد با پرداخت هزینهای ثابت، تعداد مشخصی از نمونههای تابع را به طور دائم گرم نگه دارند و با از دست دادن مزیت اقتصادی مقیاسپذیری تا صفر، استارتهای سرد را دور بزنند.
بررسی عمیق دیدگاهها
مهندسان حساس به عملکرد
استدلال میکنند که استارتهای سرد چند ثانیهای، اهداف سطح سرویس را برای APIهای کاربرمحور نقض میکنند.
برای تیمهایی که برنامههای همگام و کاربرمحور میسازند، استارت سرد بدون سرور اغلب به عنوان یک عامل بازدارنده در نظر گرفته میشود. وقتی حل یک درخواست API سه ثانیه طول میکشد زیرا ارائهدهنده ابری مجبور بوده یک ماشین مجازی جاوای جدید راهاندازی کند، کاربر نهایی با تأخیر مشهودی مواجه میشود که میتواند منجر به رها کردن نشست (session) شود. این مهندسان استدلال میکنند که اگر مجبور باشند دائماً راهحلهای پیچیدهای را پیادهسازی کنند — مانند پینگ کردن توابع برای گرم نگه داشتن آنها یا پرداخت هزینه برای همزمانی تأمینشده — فقط برای دستیابی به تأخیر قابل پیشبینی، سادگی عملیاتی معماری بدون سرور بیاثر میشود.
پذیرندگان معماری بدون سرور
سادگی عملیاتی و صرفهجویی در هزینه از طریق مقیاسپذیری تا صفر را بر تضمینهای سختگیرانه تأخیر ترجیح میدهند.
حامیان مدل بدون سرور تأکید میکنند که برای اکثریت قریب به اتفاق حجمهای کاری، یک استارت سرد ۲۰۰ میلیثانیهای برای کاربر کاملاً غیرقابل درک است. با پذیرش این تاوان تأخیر جزئی، سازمانها میتوانند نیاز به پچ کردن سیستمعاملها، مدیریت متعادلکنندههای بار (load balancers) یا پرداخت هزینه برای سرورهای بیکار در طول شب را از بین ببرند. از این منظر، استارت سرد یک مصالحه اقتصادی بسیار مطلوب است که به استارتاپها و شرکتهای بزرگ اجازه میدهد در زمان اوج ترافیک به طور بینهایت مقیاسپذیر شوند و با کاهش تقاضا به صفر برسند و تنها برای زمان دقیق پردازش استفادهشده هزینه پرداخت کنند.
ارائهدهندگان ابری
تراکم منابع و بهرهوری چندمستأجری را برای حفظ سودآوری در اولویت قرار میدهند.
برای شرکتهای بزرگ ارائهدهنده خدمات ابری (Hyperscalers) مانند AWS، Google Cloud و Microsoft Azure، استارت سرد یک واقعیت مکانیکی ضروری در معماری چندمستأجری است. برای ارائه مدل قیمتگذاری پرداخت به ازای اجرا، ارائهدهندگان باید به طور تهاجمی حافظه و چرخههای پردازنده را از توابع غیرفعال پس بگیرند تا بیشترین حجم کاری فعال ممکن را روی یک سرور فیزیکی واحد قرار دهند. گرم نگه داشتن نامحدود محیطهای بیکار، تراکم منابعی را که مدل کسبوکار بدون سرور را پایدار میکند، از بین میبرد. در نتیجه، ارائهدهندگان به جای تغییر بنیادین مکانیک مقیاسپذیری تا صفر، بر بهینهسازی هایپروایزرهای پایه و ارائه سطوح پولی مانند همزمانی تأمینشده تمرکز میکنند.
- مهندسان حساس به عملکرد
- استدلال میکنند که استارتهای سرد چند ثانیهای، اهداف سطح سرویس را برای APIهای کاربرمحور نقض میکنند.
- پذیرندگان معماری بدون سرور
- سادگی عملیاتی و صرفهجویی در هزینه از طریق مقیاسپذیری تا صفر را بر تضمینهای سختگیرانه تأخیر ترجیح میدهند.
- ارائهدهندگان ابری
- تراکم منابع و بهرهوری چندمستأجری را برای حفظ سودآوری در اولویت قرار میدهند.
دیدگاههایی که این گزارش پوشش نداده
- تحلیلگران عملیات مالی (FinOps)
- نگهدارندگان پروژههای متنباز بدون سرور
منابع
[1]ResearchGateارائهدهندگان ابریCold Start Latency Optimization Strategies for Function as a Service Platforms
مطالعه در ResearchGate →
[2]PMCارائهدهندگان ابریMitigating Cold Start Problem in Serverless Computing with Function Fusion
مطالعه در PMC →
[3]arXivپذیرندگان معماری بدون سرورFaaSLight: General Application-Level Cold-Start Latency Optimization for Function-as-a-Service in Serverless Computing
مطالعه در arXiv →
[4]InfoQپذیرندگان معماری بدون سرورFour Techniques Serverless Platforms Use to Balance Performance and Cost
مطالعه در InfoQ →
[5]تیم سردبیری کوهستانمهندسان حساس به عملکردتحلیل تیم سردبیری کوهستان
مطالعه در تیم سردبیری کوهستان →
بیشتر در فناوری
مشاهده همه →تهدید روز صفر
درخواست کایتورکس برای خاموشی جهانی سرورها در پی هشدار حمله قریبالوقوع روز صفر
5 منبع
هوآوی با معرفی کلاستر Atlas 960 و تسریع عرضه تراشههای Ascend به رقابت با انویدیا میرود
7 منبع
معماری کوبرنیتیز
حلقه تطبیق: کنترلرهای کوبرنیتیز چگونه وضعیت مطلوب را در یک سیستم توزیعشده حفظ میکنند
6 منبع
زیرساخت هوش مصنوعی
محدودیتهای برق، رشد پردازندههای گرافیکی را متوقف کرد؛ شرکتها به سمت «هوش مصنوعی چند-سیلیکونی» میروند
3 منبع
نظرات
هر زاویه. هر روز.
اخبار فناوری با پوشش کامل منابع و تحلیل دیدگاهها، هر روز و رایگان.




