تصور کنید کاربری تصویری را در سایت شما بارگذاری میکند و بلافاصله نسخهای کمحجم از آن برای نمایش در موبایل ساخته میشود. برای انجام این کار لازم نیست یک سرور جداگانه راهاندازی کنید، سیستمعامل آن را بهروزرسانی کنید یا نگران افزایش ناگهانی تعداد درخواستها باشید. کافی است کدی بنویسید که هنگام بارگذاری تصویر اجرا شود و انجام بقیه کارها را به یک پلتفرم ابری مناسب بسپارید.
این همان ایده اصلی FaaS یا Function as a Service است: اجرای توابع کد در پاسخ به رویدادها، بدون اینکه توسعهدهنده مستقیماً مسئولیت مدیریت سرورهای زیرساختی را بر عهده داشته باشد.
FaaS برای پردازش فایلها، اجرای وظایف زمانبندیشده، پاسخگویی به درخواستهای API و بسیاری از کارهای کوتاه و رویدادمحور کاربرد دارد. بااینحال، برای هر نوع برنامهای بهترین انتخاب نیست. محدودیت زمان اجرا، تأخیر اولیه، هزینههای متغیر و وابستگی به ارائهدهنده از جمله عواملی هستند که پیش از انتخاب این مدل باید بررسی شوند.
در ادامه میبینیم FaaS چگونه کار میکند، چه تفاوتی با Serverless و مدلهای IaaS و PaaS دارد و در چه شرایطی میتواند انتخاب مناسبی برای یک پروژه باشد.

FaaS چیست؟
FaaS مخفف Function as a Service و به معنای «تابع بهعنوان سرویس» است. در این مدل رایانش ابری، توسعهدهنده بخش مشخصی از منطق برنامه را به شکل یک تابع مستقل مینویسد و در پلتفرم FaaS مستقر میکند. پلتفرم هنگام رخ دادن رویداد تعریفشده، تابع را اجرا میکند و بخش عمده مدیریت زیرساخت را بر عهده میگیرد.
برای مثال، میتوانید تابعی بنویسید که با ثبت سفارش جدید، اطلاعات آن را اعتبارسنجی کند، پیام تأیید بفرستد یا دادههای موردنیاز را به یک سرویس دیگر انتقال دهد. این تابع لازم نیست همیشه در حال اجرا باشد؛ زمان اجرای آن به رویداد و نحوه پیکربندی سرویس بستگی دارد.
در مدل سنتی میزبانی، تیم فنی باید سرور یا محیط اجرای برنامه را آماده کند، ظرفیت آن را مدیریت کند و برای افزایش ترافیک تصمیم بگیرد. در FaaS، این مسئولیتها تا حد زیادی به ارائهدهنده سرویس منتقل میشوند. توسعهدهنده بیشتر بر کد، منطق کسبوکار و ارتباط تابع با سایر اجزای برنامه تمرکز میکند.
اصول FaaS را بشناسید
FaaS چند اصل مهم دارد:
- اجرای رویدادمحور: تابع در پاسخ به رویدادی مانند درخواست HTTP، بارگذاری فایل، پیام صف یا اجرای زمانبندیشده فراخوانی میشود.
- بیحالتی (Statelessness): نباید انتظار داشت وضعیت داخلی تابع بین دو فراخوانی مستقل حفظ شود. اطلاعاتی که باید باقی بمانند، در پایگاه داده، فضای ذخیرهسازی یا سرویس بیرونی نگهداری میشوند.
- تخصیص پویای منابع: پلتفرم با توجه به مدل اجرایی خود، منابع لازم برای اجرای تابع را تخصیص میدهد.
- مقیاسپذیری خودکار: در صورت افزایش درخواستها، پلتفرم میتواند اجرای همزمان بیشتری ایجاد کند؛ البته این ظرفیت به سهمیهها و محدودیتهای سرویس وابسته است.
- پرداخت مبتنی بر مصرف: هزینه با توجه به تعداد فراخوانیها، مدت اجرا و منابع اختصاصیافته محاسبه میشود. شیوه دقیق محاسبه در هر ارائهدهنده متفاوت است.
- مدیریت سادهتر زیرساخت: تأمین منابع، نگهداری محیط اجرا و بخش زیادی از عملیات مقیاسبندی بر عهده ارائهدهنده قرار میگیرد.
در بسیاری از پیادهسازیها، توابع در محیطهای ایزوله مانند کانتینرها اجرا میشوند؛ اما جزئیات فنی به پلتفرم بستگی دارد. همچنین، بهتر است هر تابع یک مسئولیت مشخص داشته باشد. این اصل طراحی، نگهداری و آزمایش کد را سادهتر میکند، هرچند به این معنا نیست که تمام برنامه باید به تعداد زیادی تابع کوچک تقسیم شود.
- نکته مهم: FaaS به معنای حذف سرورهای فیزیکی نیست. سرورها همچنان وجود دارند، اما توسعهدهنده لازم نیست آنها را مستقیماً مدیریت کند.
FaaS چگونه کار میکند؟ مراحل اجرا با مثال واقعی
در FaaS، کد به یک رویداد یا محرک مشخص متصل میشود. پلتفرم پس از دریافت رویداد، تابع مربوط را اجرا میکند و نتیجه را به مسیر تعیینشده میفرستد. اگر درخواستهای همزمان بیشتری برسند، سرویس میتواند اجرای چند نمونه از تابع را مدیریت کند؛ البته تعداد اجراهای همزمان به محدودیتهای پلتفرم بستگی دارد.
مراحل اجرای یک تابع FaaS به شرح زیر است:
- نوشتن تابع: توسعهدهنده کدی با مسئولیت مشخص مینویسد؛ برای مثال، تغییر اندازه تصویر یا اعتبارسنجی یک درخواست.
- استقرار کد: تابع همراه با وابستگیهای لازم در محیط FaaS بارگذاری و پیکربندی میشود.
- تعریف منبع رویداد: مشخص میشود چه اتفاقی باید تابع را فعال کند. این رویداد میتواند درخواست HTTP، بارگذاری فایل، تغییر پایگاه داده، دریافت پیام از صف یا رسیدن زمان مشخص باشد.
- دریافت رویداد: با رخ دادن رویداد، پلتفرم تابع را فراخوانی میکند.
- آمادهسازی محیط اجرا: پلتفرم از محیط اجرایی مناسب برای اجرای کد استفاده میکند. اگر محیط آمادهای وجود نداشته باشد، ایجاد یا آمادهسازی آن ممکن است کمی زمان ببرد.
- اجرای تابع: کد، ورودی را پردازش میکند و نتیجه را برمیگرداند یا آن را به یک سرویس دیگر میفرستد. در اجرای همزمان (Synchronous)، فراخواننده معمولاً منتظر پاسخ میماند؛ در اجرای ناهمزمان (Asynchronous)، پردازش میتواند جدا از درخواست اولیه ادامه پیدا کند.
- مدیریت درخواستهای همزمان: اگر چند رویداد همزمان برسند، پلتفرم ممکن است چند نمونه از تابع را اجرا کند؛ به شرط آنکه محدودیتهای همزمانی اجازه دهند.
- پایان اجرا و مدیریت محیط: پس از پایان فراخوانی، منابع ممکن است آزاد شوند یا محیط اجرا برای درخواستهای بعدی باقی بماند. بنابراین، حذف محیط پس از هر اجرا یک قاعده عمومی نیست.
- ثبت و پایش: لاگها، خطاها و معیارهای عملکرد برای بررسی وضعیت تابع ثبت میشوند؛ البته میزان امکانات پایش به سرویس و ابزارهای متصلشده بستگی دارد.
مثال: پردازش خودکار تصویر در فضای ابری
فرض کنید یک فروشگاه اینترنتی روزانه صدها یا هزاران تصویر محصول دریافت میکند. بهجای اینکه یک سرور همیشه روشن فقط مسئول پردازش تصاویر باشد، میتوان این فرایند را با توابع رویدادمحور طراحی کرد:
- کاربر تصویر محصول را در فضای ذخیرهسازی ابری بارگذاری میکند.
- رویداد بارگذاری، تابع پردازش تصویر را فعال میکند.
- تابع ابعاد تصویر را تغییر میدهد و نسخه بهینهشده را ذخیره میکند.
- سپس یک وظیفه جداگانه، اطلاعات تصویر را در پایگاه داده بهروزرسانی میکند.
- در صورت نیاز، سرویس اعلان پیامی برای مدیر فروشگاه ارسال میکند.
در چنین معماریای، هر تابع مسئولیت مشخصی دارد و بخشهای مستقل میتوانند جداگانه اجرا شوند. اگر بارگذاری تصاویر افزایش پیدا کند، پلتفرم میتواند اجرای همزمان بیشتری را مدیریت کند. البته برای جلوگیری از پردازش تکراری، از دست رفتن پیام یا ثبت اطلاعات ناقص، باید خطاها، تلاش مجدد و ترتیب اجرای وظایف نیز بهدرستی طراحی شوند.

چگونه توابع FaaS را بهینهتر اجرا کنیم؟
برای اینکه معماری FaaS قابل نگهداری و مقرونبهصرفه باقی بماند، این نکات را رعایت کنید:
- مسئولیت هر تابع را مشخص کنید.
توابعی که وظیفه محدود و روشن دارند، معمولاً آزمایش و نگهداری سادهتری دارند.
- تعداد توابع را بیدلیل افزایش ندهید.
تقسیم هر عملیات کوچک به یک تابع مستقل میتواند ارتباطات شبکهای، پیچیدگی پایش و هزینه را افزایش دهد.
- وابستگیهای غیرضروری را حذف کنید.
کتابخانهها و بستههای حجیم ممکن است زمان آمادهسازی محیط و تأخیر اولیه را بیشتر کنند.
- کارهای مستقل را در صورت امکان ناهمزمان اجرا کنید.
استفاده از صف پیام و پردازش جداگانه میتواند فشار را از درخواست اصلی بردارد.
- Cold Start را در طراحی لحاظ کنید.
محیطهای سبکتر و کاهش وابستگیها ممکن است تأخیر اولیه را کم کنند. قابلیتهایی مانند ظرفیت آماده (Provisioned Concurrency) نیز در برخی سرویسها ارائه میشوند و ممکن است هزینه جداگانه داشته باشند.
- منابع را متناسب با بار کاری تنظیم کنید.
حافظه، توان پردازشی، زمان اجرا و محدودیت همزمانی باید با نیاز واقعی تابع هماهنگ باشند.
- امنیت را از ابتدا در نظر بگیرید.
اصل حداقل دسترسی، مدیریت امن کلیدها، رمزنگاری ارتباطات و بهروزرسانی وابستگیها اهمیت زیادی دارند.
- پایش را جدی بگیرید.
ثبت لاگ متمرکز، معیارهای عملکرد، رهگیری توزیعشده و هشدار برای خطاهای مهم به پیدا کردن مشکلات کمک میکنند.
تفاوت FaaS و Serverless چیست؟
FaaS و Serverless به هم مرتبط هستند، اما یک مفهوم نیستند. Serverless یک مدل گستردهتر است که در آن توسعهدهنده بدون درگیری مستقیم با مدیریت سرورها، از سرویسهای ابری مدیریتشده استفاده میکند؛ درحالیکه FaaS یکی از بخشهای Serverless است و به اجرای توابع در پاسخ به رویدادها یا درخواستهای مشخص مربوط میشود. برای مثال، یک معماری Serverless میتواند علاوه بر FaaS شامل پایگاه داده مدیریتشده، سرویس احراز هویت، صف پیام و درگاه API نیز باشد.
مهمترین کاربردهای FaaS چیست؟
FaaS بیشترین کاربرد را در وظایفی دارد که محرک مشخص، مدت اجرای محدود و امکان اجرای مستقل دارند. این مدل بهویژه زمانی مفید است که میزان تقاضا ثابت نباشد یا بخواهید پردازش را از برنامه اصلی جدا کنید.
پردازش رویدادها و فایلها
یکی از رایجترین کاربردهای FaaS، اجرای خودکار عملیات پس از رخ دادن یک رویداد است. برای نمونه:
- تغییر اندازه یا قالب تصاویر پس از بارگذاری؛
- استخراج اطلاعات از فایلها و اعتبارسنجی آنها؛
- پردازش پیامهای صف؛
- بهروزرسانی اطلاعات پس از تغییر داده در پایگاه داده؛
- اجرای خودکار وظایف پس از ذخیرهسازی فایل.
- بکاند API و برنامههای وب و موبایل
میتوان از FaaS برای اجرای بخشی از منطق بکاند استفاده کرد؛ مانند اعتبارسنجی ورودی، بررسی مجوزها، محاسبه قیمت سفارش یا اتصال به سرویسهای بیرونی. در این مدل، درخواست از طریق یک درگاه یا محرک مناسب به تابع میرسد و نتیجه به فراخواننده برگردانده میشود.
پردازشهای زمانبندیشده و خودکارسازی
برخی وظایف در زمان مشخصی از روز یا هفته اجرا میشوند و نیازی به سرور اختصاصی همیشه روشن ندارند. FaaS میتواند برای تولید گزارشهای دورهای، پاکسازی دادههای موقت و دیگر کارهای تکراری مورد استفاده قرار بگیرد.
میکروسرویسها و پردازش ناهمزمان
FaaS میتواند اجرای برخی قابلیتهای مستقل را از برنامه اصلی جدا کند. برای مثال، ارسال ایمیل پس از ثبت سفارش یا تولید گزارش پس از پایان یک عملیات میتواند در تابع جداگانهای انجام شود.
چتباتها و دستیارهای صوتی
در چتباتها میتوان از توابع برای دریافت ورودی، اعتبارسنجی درخواست، فراخوانی APIهای بیرونی و آمادهسازی پاسخ استفاده کرد. پردازشهای سنگین هوش مصنوعی یا مدلهایی که به منابع پایدار و زیاد نیاز دارند، ممکن است به زیرساخت دیگری احتیاج داشته باشند.
هوش مصنوعی و یادگیری ماشین
FaaS برای برخی وظایف پیرامون جریانهای یادگیری ماشین مناسب است؛ از جمله پیشپردازش داده، اعتبارسنجی ورودی، هماهنگی مراحل پردازش و اجرای استنتاجهای سبک. بااینحال، آموزش مدلهای بزرگ یا محاسبات طولانی و پرمصرف معمولاً به محیطی با منابع و زمان اجرای متناسب نیاز دارد.
کاربردهای صنعتی
FaaS میتواند در صنایع مختلف به کار رود؛ برای مثال:
- رسانه و سرگرمی: پردازش تصاویر، آمادهسازی فراداده و خودکارسازی انتشار محتوا؛
- سفر و مهماننوازی: پردازش رزروها، ارسال اعلان و هماهنگی میان سرویسها؛
- بازاریابی و خردهفروشی: پردازش رویدادهای مشتری، بهروزرسانی کاتالوگ و اجرای وظایف کمپینها؛
- تجارت الکترونیک: اعتبارسنجی سفارش، پردازش فایل و ارسال اعلان؛
- خدمات مالی: پردازش برخی رویدادها، بررسی قواعد مشخص و انتقال داده میان سامانهها، با رعایت الزامات امنیتی و انطباق.

مزایای FaaS چیست؟
مهمترین مزیت FaaS این است که اجرای کد را از بخش زیادی از مسئولیتهای مدیریت زیرساخت جدا میکند. علاوه بر این مزایای متعددی دارد که در ادامه بررسی کردهایم:
تمرکز بیشتر بر کد و سرعت توسعه
توسعهدهنده بهجای راهاندازی و نگهداری مستقیم محیط اجرای اختصاصی، میتواند روی منطق برنامه تمرکز کند. استقرار توابع مستقل نیز امکان تغییر و انتشار جداگانه برخی قابلیتها را فراهم میکند.
مقیاسپذیری خودکار
اگر تعداد درخواستها افزایش یابد، پلتفرم FaaS میتواند اجرای همزمان بیشتری را فراهم کند. در زمان کاهش تقاضا نیز ظرفیت اجرا ممکن است کاهش پیدا کند. این ویژگی برای برنامههایی با ترافیک جهشی یا فصلی مفید است؛ البته افزایش ظرفیت نامحدود نیست و سهمیههای سرویس و محدودیت منابع باید در نظر گرفته شوند.
پرداخت مبتنی بر مصرف
در بسیاری از سرویسهای FaaS، هزینه به تعداد فراخوانیها، مدت اجرا و منابع مصرفی وابسته است. به همین دلیل، برای وظایفی که فقط گاهی اجرا میشوند، نیازی به پرداخت هزینه یک محیط محاسباتی اختصاصی در تمام ساعات نیست.
بهرهوری منابع و نگهداری سادهتر
تخصیص منابع متناسب با فراخوانیها میتواند از نگهداری ظرفیت بلااستفاده جلوگیری کند. همچنین، ارائهدهنده بخش مهمی از نگهداری محیط اجرا و عملیات زیرساختی را مدیریت میکند؛ هرچند توسعهدهنده همچنان مسئول کیفیت کد، تنظیمات برنامه و رعایت الزامات امنیتی است.
مناسب برای معماری رویدادمحور
اتصال تابع به محرکهایی مانند درخواست HTTP، صف پیام، ذخیرهسازی فایل یا زمانبندی، اجرای عملیات را بر اساس نیاز ممکن میکند. این روش برای جدا کردن وظایف ناهمزمان و ساخت سامانههایی با اجزای مستقل کاربرد دارد.
تابآوری و دسترسپذیری
سرویسهای مدیریتشده ممکن است قابلیتهایی برای توزیع بار، اجرای مجدد و استقرار در نواحی مختلف ارائه دهند.
آیا FaaS هزینه را کاهش میدهد؟
میزان صرفهجویی به الگوی مصرف و معماری بستگی دارد. در بارهای کاری متغیر، کاهش منابع بیکار میتواند به نفع FaaS باشد. ولی برای پردازشهای مداوم و قابل پیشبینی، اجرای یک سرویس روی کانتینر یا نمونه اختصاصی ممکن است اقتصادیتر تمام شود.
برخی گزارشهای بازار ارقامی مانند صرفهجویی حدود ۴۰ درصدی در مقایسه با PaaS و تا ۷۰ درصدی در مقایسه با IaaS را مطرح کردهاند؛ اما چنین اعدادی را نباید به همه پروژهها تعمیم داد. نتیجه واقعی به حجم درخواست، مدت اجرا، حافظه، هزینه سرویسهای جانبی و قیمتگذاری ارائهدهنده وابسته است.
معایب و محدودیتهای FaaS
با وجود مزایای FaaS، این مدل معایبی هم دارد که در این قسمت بررسیشان کردهایم.
کنترل کمتر بر محیط اجرا
در FaaS، ارائهدهنده بخش زیادی از زیرساخت را مدیریت میکند. این موضوع عملیات روزمره را سادهتر میکند، اما کنترل مستقیم بر سیستمعامل، شبکه و جزئیات محیط اجرا را کاهش میدهد.
پیچیدگی تست و اشکالزدایی
اجرای تابع در محیط محلی همیشه رفتار پلتفرم ابری را بهطور کامل بازسازی نمیکند. محرکها، مجوزها، صفها، محدودیت همزمانی و سرویسهای وابسته ممکن است در محیط واقعی تفاوت داشته باشند..
هزینههای متغیر و پیشبینی دشوار
پرداخت مبتنی بر مصرف برای بارهای کاری نامنظم مفید است، اما افزایش ناگهانی تعداد فراخوانیها یا اجرای توابع پرهزینه میتواند صورتحساب را بالا ببرد.
برای مدیریت این ریسک، میتوان سقف مصرف یا هشدار هزینه تعریف کرد، تعداد فراخوانیها را پایش کرد و پیش از استقرار نهایی، سناریوهای پرترافیک را آزمایش کرد.
وابستگی به ارائهدهنده (Vendor Lock-in)
جزئیات محرکها، مجوزها، ابزارهای استقرار و امکانات اختصاصی میان ارائهدهندگان متفاوت است. در نتیجه، انتقال یک برنامه FaaS به سرویس دیگری ممکن است به تغییر کد، بازطراحی معماری و آزمایش مجدد نیاز داشته باشد.
استفاده از استانداردهای رایج، جداسازی منطق کسبوکار از کدهای وابسته به پلتفرم و خودکارسازی تستها میتواند هزینه مهاجرت را کاهش دهد؛ اما وابستگی را لزوماً بهطور کامل از بین نمیبرد.
تأخیر راهاندازی سرد (Cold Start)
گاهی پس از دورهای که تابع اجرا نشده است، پلتفرم باید محیط اجرا را آماده کند. این مرحله باعث تأخیر اولیه میشود که به آن Cold Start میگویند. مقدار تأخیر به زبان برنامهنویسی، اندازه بسته، وابستگیها، وضعیت محیط و پلتفرم بستگی دارد.
بیحالتی و نیاز به ذخیرهسازی بیرونی
در طراحی FaaS نباید به باقی ماندن متغیرهای داخل حافظه یا محیط اجرا بین فراخوانیها تکیه کرد. دادههایی مانند وضعیت سفارش، نشست کاربر یا پیشرفت یک فرایند باید در سامانهای مناسب ذخیره شوند.
محدودیت منابع و زمان اجرا
سرویسهای FaaS محدودیتهایی برای زمان اجرای هر فراخوانی، حافظه، اندازه بسته و تعداد اجراهای همزمان دارند. مقدار دقیق این محدودیتها در هر سرویس متفاوت است؛ در برخی سرویسهای شناختهشده، سقف زمان اجرای یک فراخوانی کمتر از ۱۵ دقیقه است.
چالشهای امنیتی و انطباق
مدیریت زیرساخت توسط ارائهدهنده به معنی حذف مسئولیت امنیتی توسعهدهنده نیست. مجوزهای بیشازحد، ذخیره ناامن اسرار، وابستگیهای آسیبپذیر و اعتبارسنجی ناقص ورودیها همچنان میتوانند خطر ایجاد کنند.
پیچیدگی پایش سامانههای توزیعشده
وقتی یک درخواست از چند تابع، صف پیام و سرویس پایگاه داده عبور میکند، پیدا کردن منشأ خطا ممکن است دشوار شود. برای مدیریت این وضعیت، بهتر است شناسه همبستگی درخواست، لاگ متمرکز، معیارهای عملکرد و رهگیری توزیعشده از ابتدا در نظر گرفته شوند.

تفاوت FaaS با IaaS و PaaS چیست؟
IaaS، PaaS و FaaS سه مدل متفاوت برای استفاده از منابع محاسباتی ابری هستند. تفاوت اصلی آنها در میزان کنترلی است که در اختیار توسعهدهنده قرار میدهند و سطح مسئولیتی که ارائهدهنده مدیریت میکند.
- IaaS (Infrastructure as a Service): زیرساختهایی مانند ماشین مجازی، شبکه و ذخیرهسازی در اختیار کاربر قرار میگیرد و کاربر مسئولیت بیشتری در مدیریت سیستمعامل و نرمافزارهای خود دارد.
- PaaS (Platform as a Service): پلتفرمی برای استقرار و اجرای برنامه ارائه میشود و بخش زیادی از مدیریت زیرساخت از دوش توسعهدهنده برداشته میشود.
- FaaS (Function as a Service): واحد اصلی اجرا یک تابع است که در پاسخ به محرک مشخص اجرا میشود و پلتفرم مدیریت بخش عمده محیط اجرا را بر عهده دارد.
در ادامه جدول مقایسه IaaS، PaaS و FaaS را آوردهایم:
|
معیار |
IaaS (زیرساخت بهعنوان سرویس) |
PaaS (پلتفرم بهعنوان سرویس) |
FaaS (تابع بهعنوان سرویس) |
|
در یک جمله |
سرور و منابع خام ابری را اجاره میکنید. |
پلتفرمی آماده برای اجرای برنامه میگیرید. |
فقط کد یک تابع کوچک را میدهید و اجرا میشود. |
|
واحد اصلی |
ماشین مجازی، شبکه، ذخیرهسازی |
برنامه یا سرویس مستقرشده |
یک تابع با محرک مشخص |
|
مدیریت زیرساخت |
بیشتر بر عهده شما |
بخش عمده با ارائهدهنده |
تقریباً همهچیز با ارائهدهنده |
|
مقیاسپذیری |
دستی یا خودکار، بسته به تنظیم شما |
دستی یا خودکار |
معمولاً خودکار |
|
مدل پرداخت |
بر اساس منابع اختصاصدادهشده و مدت استفاده |
بر اساس مدل پلتفرم و منابع |
بر اساس تعداد فراخوانی، زمان اجرا و منابع مصرفی |
|
وضعیت برنامه |
Stateful و Stateless هر دو ممکن است |
بسته به معماری برنامه |
معمولاً Stateless؛ وضعیت بیرون ذخیره میشود |
|
میزان کنترل |
زیاد |
متوسط تا زیاد |
کمترین کنترل بر جزئیات زیرساخت |
|
کاربرد رایج |
زیرساخت سفارشی و کنترل بالا |
برنامههای وب و سرویسهای مدیریتشده |
وظایف کوتاه، رویدادمحور و ترافیک متغیر |
|
نگهداری |
بیشتر بر عهده تیم شما |
تقسیمشده بین شما و ارائهدهنده |
بخش عمده با ارائهدهنده |
|
تأخیر اولیه |
Cold Start تابع ندارد، اما راهاندازی سرویس زمانبر است |
بسته به پلتفرم |
ممکن است Cold Start رخ دهد |
|
منابع بلااستفاده |
ممکن است هزینهزا باشد |
بسته به مدل قیمتگذاری |
در زمان بیکاری هزینه اجرای تابع کمتر است. |
چه زمانی FaaS انتخاب مناسبی نیست؟
FaaS برای همه برنامهها مناسب نیست. در شرایط زیر، بهتر است PaaS، کانتینر یا ماشین مجازی را هم بررسی کنید:
- فرایندهای طولانیمدت: وظایفی که از حداکثر زمان اجرای سرویس فراتر میروند؛ مانند پردازش سنگین ویدئو.
- تأخیر بسیار کم و ثابت: برنامههای حساس به زمان پاسخ و نوسان ناشی از Cold Start.
- برنامههای وابسته به وضعیت مداوم: مانند سرور بازیهای چندنفره یا سرویسهای نیازمند اتصال پایدار.
- محاسبات سنگین: وظایف نیازمند حافظه، پردازنده یا منابع تخصصی فراتر از محدودیت سرویس.
- بار کاری ثابت: برنامههایی با حجم درخواست تقریباً ثابت که ممکن است روی زیرساخت دائمی هزینه کمتری داشته باشند.
- وابستگی کم به ارائهدهنده: پروژههایی که انتقال آسان میان سرویسدهندگان یا اجرای چندابری برایشان مهم است.
- کنترل کامل زیرساخت: برنامههایی که به تنظیمات خاص سیستمعامل، شبکه یا محیط اجرا نیاز دارند.
- تست محلی کامل: پروژههایی که به شبیهسازی دقیق محیط ابری و تمام محرکهای آن نیاز دارند.
چگونه مدل ابری مناسب پروژه خود را انتخاب کنیم؟
برای انتخاب میان FaaS، PaaS و IaaS باید مشخص کنید برنامه چه کاری انجام میدهد، چه مقدار منابع نیاز دارد و تیم شما تا چه اندازه میخواهد زیرساخت را مدیریت کند.
۱. الگوی ترافیک را بررسی کنید
اگر تقاضا بهشدت متغیر است و گاهی تعداد زیادی رویداد در مدت کوتاه رخ میدهد، FaaS میتواند به مدیریت این نوسان کمک کند. برای ترافیک ثابت نیز FaaS همچنان میتواند مناسب باشد، اما باید هزینه آن را با سرویسهای دائمی مقایسه کنید.
۲. مدت اجرای وظایف را بسنجید
وظایف کوتاه و رویدادمحور با FaaS سازگارترند. برنامههایی که باید بهصورت پیوسته اجرا شوند یا پردازشهای طولانی دارند، ممکن است با کانتینر، ماشین مجازی یا PaaS بهتر مدیریت شوند.
۳. نیاز برنامه به نگهداری وضعیت را مشخص کنید
اگر تابع میتواند ورودی را پردازش کند و وضعیت لازم را در یک سرویس بیرونی ذخیره کند، طراحی Stateless امکانپذیر است. اما اگر بخش اصلی برنامه به وضعیت زنده و پایدار نیاز دارد، باید راهکار نگهداری وضعیت و هزینه ارتباط با سرویسهای بیرونی را بررسی کنید.
۴. حساسیت به تأخیر را ارزیابی کنید
اگر زمان پاسخ اولیه اهمیت زیادی دارد، اثر Cold Start و رفتار سرویس در بار واقعی را اندازهگیری کنید. قابلیتهایی مانند نگه داشتن محیط آماده میتوانند کمککننده باشند، اما احتمال دارد هزینه اضافه ایجاد کنند.
۵. هزینه واقعی را محاسبه کنید
فقط قیمت اجرای تابع را در نظر نگیرید. تعداد فراخوانیها، مدت اجرا، حافظه، انتقال داده، پایگاه داده، صف پیام، لاگ و پایش همگی میتوانند بر هزینه نهایی اثر بگذارند. برای مقایسه دقیق، چند سناریوی مصرف کم، معمول و اوج ترافیک را محاسبه کنید.
۶. میزان کنترل و الزامات امنیتی را بسنجید
اگر به کنترل بیشتری بر سیستمعامل، شبکه و محیط اجرا نیاز دارید، IaaS بهتر است. اگر هدف کاهش عملیات زیرساختی است، PaaS یا FaaS گزینههای بهتری هستند.
۷. مهارت تیم و زیرساخت موجود را در نظر بگیرید
تیم کوچک میتواند از سرویسهای مدیریتشده برای کاهش بار عملیات بهره ببرد. ولی تیمی که تجربه مدیریت زیرساخت دارد و به کنترل دقیق نیازمند است، از IaaS یا کانتینرها استفاده میکند.
۸. وابستگی به ارائهدهنده را مدیریت کنید
اگر احتمال جابهجایی میان ارائهدهندگان وجود دارد، منطق کسبوکار را تا حد امکان از کدهای وابسته به پلتفرم جدا کنید. ابزارهای متنباز و لایههای انتزاعی میتوانند به کاهش وابستگی کمک کنند، اما سازگاری واقعی باید با آزمایش مهاجرت سنجیده شود.
۹. یکپارچگی با سیستمهای موجود را برنامهریزی کنید
برای اتصال FaaS به زیرساخت فعلی، مسیر دریافت رویدادها، درگاه API، صف پیام، دسترسی به پایگاه داده، ثبت لاگ و استقرار خودکار را مشخص کنید. در یک پروژه جدید نیز بهتر است از ابتدا درباره ذخیرهسازی، احراز هویت، مدیریت اسرار و شیوه پایش تصمیم بگیرید.
۱۰. مهاجرت از برنامه یکپارچه به FaaS را تدریجی انجام دهید
اگر برنامه فعلی شما یک مونولیت است، لازم نیست تمام آن را یکباره به توابع تبدیل کنید. رویکرد تدریجی میتواند ریسک مهاجرت را کاهش دهد:
- قابلیتهایی را شناسایی کنید که مستقل، رویدادمحور و مناسب اجرای جداگانه هستند.
- منطق آن قابلیتها را از بخش اصلی برنامه جدا کنید.
- تابع را همراه با محرک، مجوزها، مدیریت خطا و پایش پیادهسازی کنید.
- ابتدا بخشی محدود از ترافیک یا رویدادها را به مسیر جدید هدایت کنید.
- عملکرد، هزینه، خطاها و زمان پاسخ را اندازهگیری کنید و سپس درباره گسترش مهاجرت تصمیم بگیرید.
چارچوب سریع تصمیمگیری
- یک وظیفه کوتاه و رویدادمحور دارید؟ FaaS را بررسی کنید.
- میخواهید یک برنامه کامل را با مدیریت کمتر زیرساخت اجرا کنید؟ PaaS میتواند مناسب باشد.
- به کنترل بیشتر بر سیستمعامل، شبکه یا منابع زیرساختی نیاز دارید؟ IaaS را بررسی کنید.
- برنامه ترکیبی از این نیازها را دارد؟ معماری ترکیبی میتواند از چند مدل در کنار هم استفاده کند.

جمعبندی
FaaS یا Function as a Service یکی از مدلهای رایانش ابری است که به توسعهدهندگان اجازه میدهد کدهای خود را بدون مدیریت مستقیم سرور اجرا کنند و هزینه را بر اساس میزان مصرف بپردازند. این مدل برای توسعهدهندگانی که به دنبال مقیاسپذیری خودکار، کاهش هزینههای زیرساخت و اجرای وظایف رویدادمحور هستند، گزینهای مناسب است.
سؤالات متداول
1. آیا FaaS همان Serverless است؟
خیر؛ FaaS یکی از مدلهای اجرای کد در معماری گستردهتر Serverless است که میتواند سرویسهای مدیریتشده دیگری را نیز شامل شود.
2. آیا در FaaS اصلاً سروری وجود ندارد؟
سرورها وجود دارند، اما مدیریت بخش عمده زیرساخت بر عهده ارائهدهنده سرویس است.
3. Cold Start چیست؟
Cold Start تأخیر اولیهای است که هنگام آمادهسازی محیط اجرای تابع پس از دوره بیکاری رخ میدهد.
4. چگونه میتوان Cold Start را کاهش داد؟
کاهش وابستگیها و سبک نگه داشتن محیط اجرا کمککننده است؛ در برخی سرویسها نیز قابلیت آماده نگه داشتن ظرفیت وجود دارد که احتمال دارد هزینه اضافه داشته باشد.
5. تابع FaaS چقدر میتواند اجرا شود؟
حداکثر زمان اجرا به ارائهدهنده و نوع سرویس بستگی دارد و در برخی سرویسها کمتر از ۱۵ دقیقه است.
6. آیا FaaS برای برنامههای Stateful مناسب است؟
FaaS برای اجرای بیحالت طراحی شده است؛ بنابراین، وضعیت ماندگار برنامه باید در پایگاه داده یا سرویس ذخیرهسازی بیرونی نگهداری شود.
7. مدل پرداخت FaaS چگونه است؟
هزینه به تعداد فراخوانیها، مدت اجرا و منابع مصرفی بستگی دارد؛ جزئیات قیمتگذاری در هر ارائهدهنده متفاوت است.
8. چه زمانی نباید از FaaS استفاده کنیم؟
برای پردازشهای طولانی، نیاز به کنترل کامل زیرساخت، بارهای کاری ثابت و پرمصرف یا برنامههایی با الزامات سختگیرانه تأخیر، بهتر است گزینههای دیگر نیز بررسی شوند.