در دنیای امروز فناوری ابری بهسرعت در حال تحول است و مدلهای جدیدی برای ارائهی خدمات و توسعهی نرمافزارها ظهور کردهاند. یکی از این مدلها که توجه بسیاری از توسعهدهندگان و کسبوکارها را به خود جلب کرده، FaaS یا Function as a Service است. اما FaaS چیست؟ بخشی از معماری بیسرور (Serverless) است که امکان اجرای توابع کوچک و مستقل بدون نیاز به مدیریت زیرساختها را فراهم میکند. با استفاده از FaaS توسعهدهندگان میتوانند به راحتی کدهای خود را بنویسند و تنها برای زمان اجرای آنها هزینه پرداخت کنند. اما FaaS دقیقا چیست و چه مزایایی برای شرکتها و برنامهنویسان دارد؟ در مقالهی پیشرو به بررسی کامل این موضوع خواهیم پرداخت و شما را با مزایا، کاربردها و چالشهای تکنولوژی FaaS آشنا میکنیم.
FaaS چیست و چگونه کار میکند؟
FaaS یا Function as a Service، یکی از مدلهای محبوب در معماری ابری است که به توسعهدهندگان امکان میدهد توابع کوچکی از کد را بدون نیاز به مدیریت سرورها یا زیرساختها اجرا کنند. در این مدل توسعهدهنده تنها بر روی نوشتن منطق اصلی و تجاری کد خود تمرکز میکند و تمام وظایف مربوط به مدیریت و نگهداری سرورها، مقیاسپذیری و بروزرسانیهای سیستم بر عهدهی ارائهدهندهی خدمات ابری است. در واقع ایدهی اصلی FaaS این است که کاربران به جای پرداخت هزینه برای سرورهای همیشه فعال، تنها برای زمان اجرای واقعی کد خود هزینه پرداخت کنند.
در سناریویی سنتی برای اجرای یک اپلیکیشن یا سرویس آنلاین، توسعهدهنده نیاز به مدیریت و پیکربندی سرورها، حافظه و شبکه دارد. اما در FaaS به محض اینکه کدی به عنوان یک تابع (Function) نوشته شود، بهصورت خودکار توسط سرویسدهندهی FaaS بارگذاری میشود و زمانی که درخواستی برای اجرا شدن این تابع دریافت شد، کد به صورت موقت اجرا میشود و سپس منابع مربوطه آزاد میشوند. این امر توسعهدهندگان را قادر میسازد تا تنها برای محاسبات و منابعی که واقعا استفاده شدهاند، هزینه بپردازند.
بیشتر بخوانید: محاسبات بدون سرور یا Serverless Computing چیست؟
در معماری FaaS به محض وقوع رویدادی خاص (مانند یک درخواست HTTP یا ایجاد تغییری در دیتابیس)، تابعی اجرا میشود. این رویدادها میتوانند به اشکال مختلفی مانند ورودیهای API یا تغییرات فایلهای ذخیره شده در سیستم ابری تعریف شوند. معماری رویدادمحور FaaS، انعطافپذیری زیادی را در اختیار توسعهدهندگان قرار میدهد.
تفاوت FaaS با سایر مدلهای ابری مانند IaaS و PaaS
برای درک بهتر FaaS، ابتدا باید با دو مدل اصلی دیگر از خدمات ابری، یعنی PaaS و IaaS آشنا شویم. هر یک از این مدلها سطح متفاوتی از کنترل و مدیریت منابع را به کاربران ارائه میدهند.
IaaS یا Infrastructure as a Service
IaaS به کاربران اجازه میدهد که منابع زیرساختی مانند سرورها، ذخیرهسازی و شبکه را بهصورت مجازی مدیریت کنند. در این مدل شرکتها میتوانند منابع سختافزاری را از ارائهدهندگان ابری اجاره و آنها را مطابق با نیازهای خود پیکربندی کنند. در مدل یادشده مدیریت نرمافزار و پیکربندی سیستمهای عامل بهعهدهی کاربران بوده، ولی سختافزار و نگهداری از آن بهعهدهی ارائهدهندهی سرویس ابری است. سرویسهایی مانند Amazon EC2 و Google Compute Engine نمونههایی از IaaS هستند.
PaaS یا Platform as a Service
در مدل PaaS، علاوه بر زیرساختهای مجازی، پلتفرمها و ابزارهایی برای توسعه و اجرای اپلیکیشنها نیز ارائه میشوند. این مدل شامل سیستمهای عامل، دیتابیسها و ابزارهای توسعهی نرمافزار میشود که توسعهدهندگان را قادر میسازد بدون نیاز به مدیریت مستقیم سرورها و زیرساختها، به ساخت و اجرای اپلیکیشنها بپردازند. از سرویسهای Google App Engine و Heroku میتوان بهعنوان مثالهایی از PaaS نام برد.
FaaS را میتوان بهعنوان تکاملی از PaaS در نظر گرفت. در حالی که PaaS بر روی ارائهی پلتفرم کاملی برای توسعه و اجرای اپلیکیشنها تمرکز دارد، FaaS تنها به توابع یا واحدهای کوچکی از کد توجه میکند. توسعهدهندگان فقط نیاز دارند کد مربوط به توابعی که میخواهند اجرا شوند را بنویسند و ارائهدهندهی FaaS مسئولیت مدیریت سرورها، اجرای کدها و مقیاسپذیری آنها را به عهده خواهد داشت. چنین مدلی انعطافپذیری بیشتری نسبت به PaaS دارد و هزینههای کمتری برای اجرای برنامهها ایجاد میکند.
تفاوت اصلی FaaS با IaaS و PaaS در این است که:
- در IaaS شما سرورها را مدیریت میکنید.
- در PaaS شما پلتفرم توسعه را دریافت میکنید اما هنوز مسئولیت برخی تنظیمات و نظارتها را دارید.
- در FaaS شما هیچ نگرانی دربارهی سرورها یا پلتفرم ندارید و فقط تابعی مینویسید که در صورت نیاز اجرا میشود.
بیشتر بخوانید: IaaS چیست؟ هر چیزی که راجع به IaaS باید بدانید!
مزایای استفاده از FaaS برای توسعهدهندگان
استفاده از FaaS برای توسعهدهندگان و کسبوکارها مزایای زیادی دارد که در ادامه به بررسی برخی از مهمترین آنها میپردازیم.
کاهش هزینهها
یکی از بزرگترین مزایای FaaS، مدل پرداخت براساس مصرف است. در حالی که در روشهای سنتی هزینههای زیادی برای نگهداری و مدیریت سرورها پرداخت میشود، در FaaS تنها برای زمان واقعی اجرای توابع هزینه پرداخت میشود. چنین قابلیتی باعث میشود که کسبوکارها به شکل قابلتوجهی هزینههای زیرساختی خود را کاهش دهند، خصوصا در پروژههایی که نیاز به مقیاسپذیری پویا دارند.
مقیاسپذیری اتوماتیک
FaaS بهشکل خودکار میتواند بر اساس تعداد درخواستها یا رویدادها، توابع را مقیاسدهی کند؛ یعنی اگر تعداد درخواستها افزایش یابد، FaaS بهصورت خودکار منابع بیشتری اختصاص میدهد تا تمام توابع به موقع اجرا شوند. این امر به توسعهدهندگان کمک میکند تا بدون نیاز به برنامهریزی و مدیریت دستی مقیاسپذیری، اپلیکیشنهای مقیاسپذیر ایجاد کنند.
تمرکز بر توسعه به جای مدیریت زیرساخت
توسعهدهندگان با استفاده از FaaS میتوانند تمام انرژی خود را صرف نوشتن کد و منطق تجاری کنند، بدون اینکه نیاز باشد وقت زیادی را صرف مدیریت سرورها و زیرساختها کنند. این امر باعث افزایش کارایی تیمهای توسعه و کاهش پیچیدگیهای مدیریتی میشود.
پشتیبانی از معماریهای ماژولار و میکروسرویسها
FaaS توسعهدهندگان را قادر میسازد تا کدهای خود را به بخشهای کوچک و مستقلی به نام توابع تقسیم کنند. چنین رویکردی کاملا مناسب معماریهای ماژولار و میکروسرویسها است که امروزه در توسعهی نرمافزارها بسیار پرطرفدار هستند. هر تابع میتواند بهصورت جداگانه توسعه داده شود و از بقیهی سرویسها مستقل باشد؛ امری که به بهبود انعطافپذیری و قابلیت نگهداری کدها کمک زیادی میکند.
زمان بارگذاری سریعتر
در FaaS بهدلیل آن که توابع کوچک و مستقل هستند، زمان اجرای آنها به مراتب سریعتر از روشهای سنتی است. این ویژگی باعث میشود تا اپلیکیشنهایی که نیاز به پاسخدهی سریع دارند، مانند اپلیکیشنهای بلادرنگ (Real-Time) یا اپلیکیشنهای مبتنی بر IoT، از FaaS بهرهمند شوند.
در مجموع FaaS راهکاری قدرتمند و اقتصادی برای توسعهدهندگانی محسوب میشود که میخواهند اپلیکیشنهای مقیاسپذیر، کارا و بدون دغدغههای مدیریت سرور و زیرساخت ارائه کنند.
بیشتر بخوانید: daas چیست؟ آشنایی با تفاوت بین VDI و DaaS
FaaS و معماری Serverless؛ چگونه این دو با هم مرتبطاند؟
همانطور که پیشتر گفتیم FaaS یکی از اجزای کلیدی معماری Serverless است. معماری Serverless به معنای حذف نیاز به مدیریت مستقیم سرورها توسط کاربران و توسعهدهندگان است، اما برخلاف نام آن، سرورها هنوز وجود دارند؛ تنها تفاوت این است که مدیریت آنها به صورت کاملا خودکار توسط ارائهدهندهی خدمات ابری انجام میشود. Serverless توسعهدهندگان را قادر میسازد بدون نگرانی از پیکربندی، مقیاسدهی و نگهداری سرورها، تنها روی منطق برنامه و اجرای توابع تمرکز کنند.
در معماری Serverless، توسعهدهندگان به جای اینکه اپلیکیشنها را روی سرور اختصاصی یا ماشین مجازی میزبانی کنند، کدهای خود را بهعنوان توابعی مستقل ارائه میدهند که به صورت رویدادمحور اجرا میشوند. FaaS یکی از پیادهسازیهای عملی این رویکرد است و اغلب به عنوان بخشی از معماری Serverless مورد استفاده قرار میگیرد.
رابطهی FaaS و معماری Serverless
اجرای توابع در پاسخ به رویدادها: در FaaS کدها بهعنوان توابع کوچک تعریف میشوند که در پاسخ به یک رویداد اجرا میشوند. این رویدادها میتوانند شامل درخواستهای HTTP، تغییرات در دیتابیس، ارسال پیام در یک صف یا آپلود فایلی در فضای ذخیرهسازی باشند. چنین عملکردی با مدل معماری Serverless که بر روی اجرای رویدادمحور تمرکز دارد، همخوانی کامل دارد.
بدون نیاز به مدیریت زیرساخت: در Serverless یکی از اصول مهم این است که توسعهدهندگان نیازی به مدیریت و پیکربندی زیرساختهای فیزیکی یا مجازی ندارند. در FaaS هم به همین شکل، توابع بدون نیاز به تنظیمات پیچیدهی زیرساختی اجرا میشوند و توسعهدهنده تنها باید کد خود را بنویسد و بارگذاری کند. تمامی عملیات نگهداری، نظارت و مقیاسدهی بهصورت خودکار توسط سرویسدهنده انجام میشوند.
مقیاسپذیری خودکار: یکی از مزایای بزرگ معماری Serverless، مقیاسپذیری خودکار است. FaaS بهطور خودکار میتواند تعداد توابع را بر اساس بار کاری افزایش یا کاهش دهد. به عنوان مثال اگر درخواستهای بیشتری برای اجرای تابعی خاص ارسال شود، FaaS بهطور خودکار تعداد نمونههای تابع را افزایش داده و در صورت کاهش درخواستها، منابع را بهطور خودکار آزاد میکند. ویژگی یادشده بخش اساسی از فلسفهی معماری Serverless محسوب میشود که به کاهش هزینهها و بهبود کارایی کمک میکند.
مدل پرداخت بر اساس مصرف: معماری Serverless از مدل پرداخت براساس مصرف پیروی میکند که به معنای پرداخت تنها برای منابعی است که واقعا مصرف شدهاند. این مدل در FaaS نیز به کار گرفته میشود؛ یعنی کاربران تنها برای زمان واقعی اجرای توابع خود هزینه میپردازند. چنین روش پرداختی از مزایای کلیدی Serverless و FaaS است که به کسبوکارها کمک میکند تا هزینههای خود را به حداقل برسانند.
کاربردهای مشترک: هر دو معماری FaaS و Serverless بهخوبی برای توسعه و پیادهسازی اپلیکیشنهای مقیاسپذیر و رویدادمحور مناسب هستند. استفاده از FaaS در معماری Serverless به ویژه در مواردی مثل پردازش دادهها، ایجاد APIهای بلادرنگ و پردازش پیامهای صفها بسیار متداول است.
در نتیجه، FaaS را میتوان یکی از اجزای اصلی و پیشرفتهی معماری Serverless در نظر گرفت. در حالی که Serverless روی حذف نیاز به مدیریت سرورها تمرکز دارد، FaaS این رویکرد را به سطح بعدی میبرد و امکان اجرای کدهای مستقل و کوچک را فراهم میکند که میتوانند بهسرعت و بدون نیاز به پیکربندی پیچیدهی زیرساختها، اجرا شوند.
بیشتر بخوانید: SaaS چیست؟ همه چیز راجع به سرویس ابری SaaS
چالشها و محدودیتهای FaaS چیست؛ آیا برای همه مناسب است؟
در حالی که FaaS مزایای قابلتوجهی مانند کاهش هزینهها، مقیاسپذیری خودکار و سادگی در توسعه را به همراه دارد، اما همچنان چالشها و محدودیتهایی وجود دارد که باید مورد توجه قرار گیرند. در برخی موارد استفاده از FaaS ممکن است به اندازه کافی مناسب یا بهینه نباشد. در ادامه به بررسی برخی از این چالشها و محدودیتها میپردازیم.
زمان سرد (Cold Start)
یکی از اصلیترین مشکلاتی که بسیاری از توسعهدهندگان در استفاده از FaaS با آن مواجه میشوند، زمان سرد است. زمانی که یک تابع برای اولین بار یا پس از مدتی عدم فعالیت اجرا میشود، ارائهدهندهی FaaS نیاز به آمادهسازی محیط اجرای تابع دارد که میتواند چندین میلیثانیه تا چند ثانیه طول بکشد. این زمان تاخیر میتواند در سرویسهایی که نیاز به پاسخدهی بلادرنگ یا سریع دارند (مانند اپلیکیشنهای بلادرنگ یا پردازش API) مشکلساز باشد. با این حال برخی از ارائهدهندگان FaaS در تلاش هستند تا این مشکل را کاهش دهند یا از طریق نگهداری توابع آماده (Warm Start) آن را مدیریت کنند.
محدودیت در مدت زمان اجرای توابع
در FaaS معمولا محدودیتهای زمانی برای اجرای توابع وجود دارد. برای مثال در برخی سرویسدهندگان FaaS مانند AWS Lambda، حداکثر مدت زمان اجرای تابع ۱۵ دقیقه است؛ یعنی اگر تابع شما به زمان بیشتری برای اجرا نیاز داشته باشد، باید به فکر تقسیم آن به توابع کوچکتر یا استفاده از راهکارهای دیگر باشید. این محدودیت میتواند در پروژههایی که نیاز به پردازشهای طولانیمدت دارند، چالشبرانگیز باشد.
محدودیتهای مرتبط با منابع سیستم
هر تابع در FaaS به منابع مشخصی از جمله حافظه و پردازنده اختصاص داده میشود. این منابع معمولا به شکل محدود و ثابت هستند و توسعهدهندگان باید اطمینان حاصل کنند که تابعهای آنها در این محدودهها اجرا میشوند. اگر تابع شما نیاز به منابع بیشتری داشته باشد، ممکن است لازم باشد تنظیمات توزیع منابع را تغییر دهید یا از روشهای جایگزین استفاده کنید.
اشکالزدایی و خطایابی پیچیدهتر
اشکالزدایی کدها در محیط FaaS میتواند پیچیدهتر از محیطهای توسعهی سنتی باشد. به دلیل ماهیت غیرمتمرکز و مبتنی بر رویداد توابع، ردیابی مشکلات و خطاها در محیط اجرای FaaS گاهی دشوار است. ابزارهای خاصی برای مانیتورینگ و اشکالزدایی در محیطهای Serverless و FaaS وجود دارد، اما همچنان ممکن است نیاز به تلاش بیشتر برای یافتن و رفع مشکلات باشد.
وابستگی به ارائهدهندهی خدمات ابری
یکی از چالشهای استفاده از FaaS، قفل شدن به ارائهدهنده (Vendor Lock-in) است. هر ارائهدهندهی FaaS، مانند AWS Lambda و Azure Functions یا Google Cloud Functions، معماری و زیرساختهای خاص خود را دارد که ممکن است مهاجرت کدها یا توابع به یک پلتفرم دیگر را پیچیده کند. در صورتی که تصمیم به تغییر ارائهدهندهی خدمات داشته باشید، احتمالا با مشکلاتی در انتقال توابع و بازنویسی آنها روبرو خواهید شد.
امنیت و کنترل کمتر
در FaaS شما کنترل کاملی بر سرورها و زیرساختهایی که کدهای شما روی آنها اجرا میشوند ندارید. این موضوع میتواند نگرانیهای امنیتی ایجاد کند، بهخصوص در پروژههایی که نیاز به استانداردهای بالای امنیتی و حریم خصوصی دارند. همچنین ممکن است نگرانیهایی درباره ی نحوهی اجرای صحیح سیاستهای امنیتی ارائهدهنده وجود داشته باشد.
مناسب نبودن برای پردازشهای طولانی و پیچیده
FaaS بیشتر برای توابع کوچک و پردازشهای کوتاهمدت مناسب است. در مواردی که شما نیاز به پردازشهای پیچیده یا بلندمدت دارید، استفاده از FaaS ممکن است بهترین راهحل نباشد. برای پروژههایی که به محاسبات سنگین یا پردازشهای بلندمدت نیاز دارند، مدلهای دیگر مانند IaaS یا PaaS که پیشتر به آنها اشاره کردیم میتوانند مناسبتر باشند.
فضای ذخیره سازی ابری هوشمند زیرساخت تخصصی مقیاسپذیر و بهینه برای مدیریت حجم بالای دادههای تولید شده توسط برنامههای کاربردی هوش مصنوعی است. اپراتور اهورا با استفاده از سختافزارهای پرسرعت GPU، زمان خواندن و نوشتن دادهها را به شکل چشمگیری کاهش میدهد و با بالاترین استانداردهای امنیتی از دادههایتان محافظت میکند.
منابع:
جمعبندی
FaaS بهعنوان بخشی از معماری Serverless، به توسعهدهندگان اجازه میدهد که کد توابع کوچک را بدون مدیریت سرورها اجرا کنند. این مدل با پرداخت براساس مصرف و مقیاسپذیری خودکار، هزینهها را کاهش میدهد و توسعه را سادهتر میکند.
FaaS مزایای زیادی مانند مقیاسپذیری و کاهش نیاز به زیرساخت دارد، اما با چالشهایی مثل زمان سرد و محدودیت در مدت زمان و منابع اجرای توابع روبرو است. به طور کلی FaaS برای پروژههای مقیاسپذیر و رویدادمحور ایدئال بهنظر میرسد اما در موارد پیچیدهتر، باید مدلهای دیگری را نیز مد نظر داشت.
سوالات متداولی که شما میپرسید؟
1. آیا FaaS برای همهی اپلیکیشنها مناسب است؟
خیر، FaaS برای تمامی اپلیکیشنها مناسب نیست. این مدل بیشتر برای کارهای رویدادمحور، وظایف کوچک و سبک مانند پردازش دادهها یا وظایف زمانبندیشده مناسب است. برای برنامههای طولانیمدت یا پیچیده که نیاز به منابع مداوم دارند، مدلهای دیگر مانند IaaS یا PaaS میتوانند گزینههای بهتری باشند.
2. چه تفاوتی بین FaaS و PaaS وجود دارد؟
تفاوت اصلی بین FaaS و PaaS در سطح مدیریت زیرساخت و نحوهی اجرای کدها است. در PaaS کاربران یک محیط توسعهی کامل دریافت میکنند که شامل ابزارهای لازم برای توسعه، اجرا و مدیریت اپلیکیشن است، اما همچنان کنترل نسبی بر سرورها و منابع دارند. در FaaS توسعهدهندگان فقط توابع کد را مدیریت میکنند و هیچ نیازی به مدیریت زیرساخت یا سرورها ندارند. FaaS به صورت خودکار مقیاسدهی میشود و تنها زمانی هزینه دارد که کد اجرا شود.
3. چرا زمان سرد (Cold Start) در FaaS مشکلساز است؟
زمان سرد زمانی رخ میدهد که یک تابع برای اولین بار یا پس از مدتی غیرفعال بودن فراخوانی شود. در این حالت، ایجاد و راهاندازی محیط اجرایی ممکن است زمانبر باشد که باعث تاخیر در شروع اجرای تابع میشود. این مشکل بهویژه در سیستمهای بلادرنگ یا برنامههایی که نیاز به پاسخدهی سریع دارند، میتواند کارایی را کاهش دهد.
منابع: IBM



