تا سال 2010 توسعهدهندگان برای ساخت اپلیکیشن و اجرای کد حتما به تهیه و تنظیم سرور نیاز داشتند؛ اما در سالهای اخیر با وجود FaaS که یک زیرساخت بدون سرور (Serverless) است، اجرای کد بدون نیاز به مدیریت زیرساخت امکانپذیر شده است. استفاده از سرویس تابع بهعنوان سرویس (FaaS) به توسعهدهندگان کمک میکند تا بدون دغدغه تهیه و مدیریت زیرساخت، تمرکزشان را روی کدنویسی و ساخت اپلیکیشن قرار دهند. اگر با این زیرساخت بدون سرور (Serverless) آشنایی ندارید، این مقاله برای شما نوشته شده است. در مطلب پیش رو به شما میگوییم که FaaS چیست و چه کاربردها، مزایا و معایبی دارد. تا انتهای این مقاله همراه ابر دراک باشید تا بهطور کامل با این سرویس ابری جدید آشنا شوید.
FaaS چیست؟ زیرساخت محاسباتی بدون سرور
تابع بهعنوان یک سرویس (Function as a Service) که به اختصار FaaS نامیده میشود، یک سرویس محاسباتی ابری است که به کاربران اجازه میدهد تا در پاسخ به یک یا چند رویداد، کد را اجرا کنند. اجرای کد روی FaaS معمولا با ساخت و راهاندازی اپلیکیشنهای میکروسرویس مرتبط است و نیاز به استفاده از زیرساختهای پیچیده و مدیریت آنها را از بین میبرد.
میزبانی یک اپلیکیشن نرمافزاری در اینترنت معمولا به تهیه و مدیریت یک سرور فیزیکی یا مجازی، مدیریت یک سیستمعامل و فرایندهای میزبانی وب سرور نیاز دارد. با FaaS، سختافزار فیزیکی، سیستمعامل ماشین مجازی و مدیریت نرمافزار وب سرور بهصورت خودکار توسط ارائهدهنده سرویس ابری مدیریت میشوند. این امر به توسعهدهندگان اجازه میدهد تا فقط روی توابع مجزا در کد برنامه خود تمرکز کنند.
ازآنجاییکه FaaS یکی از اصلیترین سرویسهای پردازش ابری است، برای درک بهتر این زیرساخت ابری پیشنهاد میکنیم قبل از خواندن ادامه مطلب، درباره پردازش ابری بیشتر بدانید.
آیا FaaS همان سرویس Serverless است؟
سرویس Serverless اغلب با FaaS اشتباه گرفته میشود، اما در حقیقت FaaS را میتوانیم زیرمجموعهای از Serverless بدانیم. بااینحال، هر دوی این تکنولوژیها یک هدف اساسی مشترک دارند و آن هم حذف نیاز کاربران به پیکربندی و مدیریت زیرساخت است. محاسبات بدون سرور (Serverless computing) به توسعهدهندگان اجازه میدهد تا بدون نیاز به مدیریت زیرساختهای ابری اپلیکیشن بسازند و آن را اجرا کنند.
FaaS زیرمجموعهای از Serverless است که روی محرکهای رویدادمحور (Event-driven triggers) تمرکز دارد؛ یعنی فقط در پاسخ به رویدادها یا درخواستها اجرا میشود. درصورتیکه درخواست رویدادمحوری وجود نداشته باشد، سرور خاموش میشود. هنگام خاموش بودن سرور هیچ هزینهای برای کاربر در نظر گرفته نمیشود و همین امر باعث صرفهجویی در هزینهها میشود.
اگر قصد طراحی و توسعه وبسایت دارید، استفاده از معماری JAMstack را به شما پیشنهاد میکنیم. برای آشنایی بیشتر با این معماری بهتر است درباره JAMstack بیشتر بدانید.
میکروسرویس چیست و چه ارتباطی با FaaS دارد؟
اگر یک وب اپلیکیشن را مانند یک اثر هنری کاشیکاریشده بدانیم، استفاده از معماری میکروسرویس مانند ساخت این اثر هنری از چندین کاشی موزاییکی است. هنرمند بهراحتی میتواند یک کاشی را در هر زمانی اضافه، جایگزین یا حتی تعمیر کند. در مقابل معماری میکروسرویس، معماری یکپارچه قرار دارد که مانند یک نقاشی روی یک بوم است. واضح است که تغییر، جایگزینی و اضافه کردن آیتمها به یک نقاشی کشیدهشده امکانپذیر نیست و نقاشی را از حالت ایدهآل خود خارج میکند.
رویکرد ایجاد یک اپلیکیشن از مجموعهای از اجزای ماژولار با نام «معماری میکروسرویس» شناخته میشود. تقسیم یک اپلیکیشن به چندین میکروسرویس برای توسعهدهندگان جذابتر از معماری یکپارچه است؛ زیرا آنها میتوانند قطعات کوچکی از کد را ایجاد کنند و تغییر دهند و بهراحتی در پایگاه کد (Codebases) خود پیادهسازی کنند.
در سیستمهای یکپارچه بزرگ ایجاد تغییرات جزئی در برنامه به یک فرایند استقرار سنگین نیاز دارد. FaaS میتواند این پیچیدگی استقرار را از بین ببرد. با استفاده از کدهای Serverless مانند FaaS، توسعهدهندگان وب میتوانند تمرکزشان را روی نوشتن کد اپلیکیشن قرار دهند؛ زیرا ارائهدهندگان Serverless از تخصیص سرور و سرویسهای Backend نگهداری میکنند.
مزایای استفاده از Function as a Service چیست؟
اگر قصد انتقال اپلیکیشن به فضای ابری یا به اصطلاح مهاجرت ابری با روشی کارآمد و مقرونبهصرفه دارید، FaaS ابزار ارزشمندی برای شما محسوب میشود. در ادامه دلایل خود را برای استفاده از FaaS برای انتقال اپلیکیشن به فضای ابری توضیح میدهیم:
- تمرکز روی کد بهجای زیرساخت: با FaaS میتوانید بدون نیاز به مدیریت زیرساخت، سرور را به توابعی تقسیم کنید که میتوانند بهطور خودکار و مستقل مقیاس شوند. FaaS این امکان را برای شما فراهم میکند که روی کد اپلیکیشن تمرکز کنید و بهاینترتیب محصولتان را در سریعترین زمان ممکن به بازار ارائه دهید.
- پرداخت به ازای استفاده: با استفاده از FaaS شما فقط زمانی هزینه میپردازید که برای یک تابع مشخص، اپلیکیشن خود را به ابر متصل میکنید. به همین خاطر هزینهها هنگام استفاده از FaaS بهطور قابل توجهی پایینتر از هزینههای استفاده از روشهای سنتی است. بنابراین FaaS یک انتخاب مقرونبهصرفه مخصوصا برای بارهای کاری پویا (Dynamic workloads) یا وظایف برنامهریزیشده است.
- افزایش یا کاهش خودکار مقیاس: با FaaS توابع در صورت نیاز بهطور خودکار، مستقل و فوری مقیاس میشوند. با کاهش تقاضا، مقیاس FaaS بهطور خودکار کاهش پیدا خواهد کرد.
- بهرهمندی از مزایای زیرساخت ابری قدرتمند: FaaS دسترسیپذیری بالایی دارد؛ زیرا این سرویس ابری در هر منطقه جغرافیایی در چندین ناحیه پخش شده است و میتواند در هر تعداد منطقه بدون افزایش هزینه مستقر شود.
استفاده از FaaS چه معایبی دارد؟
علیرغم وجود مزایای FaaS، این سرویس معایبی نیز دارد که قبل از استفاده از آن در پروژههای توسعه نرمافزار خود بهتر است با آنها آشنایی داشته باشید. از جمله معایب احتمالی FaaS عبارتاند از:
- شفافیت: در زیرساختهای Backend که مدیریت کامل آن به عهده دیگری است، شفافیت کمتری وجود دارد.
- امنیت: کاربران باید به امنیت و زیرساخت ارائهدهنده ابر اعتماد کنند.
- هزینهها: پیشبینی هزینهها با مدل پرداخت به ازای مصرف (Pay-per-use) دشوار است.
- تست کردن: تست کردن نرمافزار مانند تست عملکرد و ادغام ممکن است چالشبرانگیز باشد.
- قفل فروشنده (Vendor lock-in): ویژگیها و عملکرد FaaS در میان ارائهدهندگان سرویس ابری، جهانی نیست. هنگامی که یک مشتری از خدمات یک ارائهدهنده استفاده میکند، تغییر به یک ارائهدهنده دیگر بدون بهروزرسانی نرمافزاری و آزمایش دقیق میتواند دشوار باشد.
برای انتخاب بهترین سرویس ابری پیشنهاد میکنیم ابتدا انواع سرویس های پردازش ابری را بشناسید؛ سپس با توجه به کاربرد هرکدام، بهترین گزینه را انتخاب کنید.
آشنایی با کاربردهای FaaS
ازآنجاییکه FaaS امکان جداسازی و مقیاسبندی تراکنشها را بهراحتی فراهم میکند، این زیرساخت ابری برای بار کاری (Workload) موازی با حجم بالا بسیار مناسب است. این تکنولوژی همچنین میتواند برای ایجاد سیستمهای Backend یا فعالیتهایی مانند پردازش دادهها، تبدیل فرمت، رمزگذاری (Encoding) یا تجمیع دادهها (Data aggregation) استفاده شود.
FaaS ابزار مناسبی برای وب اپلیکیشنها، برنامهنویسی Backends، پردازش داده/جریان (Data/Stream)، ایجاد چتباتهای آنلاین و برنامهنویسی Backend برای دستگاههای اینترنت اشیا (IoT) به شمار میرود. همچنین شما میتوانید از FaaS برای مدیریت و استفاده از سرویسهای شخص ثالث (Third-party) کمک بگیرید. برای مثال، اگر قصد توسعه اپلیکیشن اندروید را دارید، شما میتوانید با اتخاذ رویکرد FaaS هزینههایتان را تحت کنترل نگه دارید. بهطور خلاصه، FaaS در هر پروژه نرمافزاری ابری کار میکند. از جمله کاربردهای اصلی تابع بهعنوان سرویس میتوانیم به موارد زیر اشاره کنیم:
- پاسخ دادن به هر رویداد مجزایی که توسط یک نرمافزار یا یک رویداد در دنیای واقعی ایجاد میشود؛
- ارائه API برای اپلیکیشنهای موبایل و وب که توسعهدهندگان در آن FaaS را با اپلیکیشنها ترکیب میکنند؛
- به عهده گرفتن وظایف پردازش دادهها و چندرسانهای (Multimedia) مانند بررسی ورودی یا نرمالسازی یک مجموعه داده؛
- فعالسازی دستگاههای اینترنت اشیا (IoT) که فقط هنگامی با هم ارتباط برقرار میکنند که دادهها در دسترس هستند یا یک رویداد در دنیای واقعی رخ داده است.
مثال از کاربرد FaaS در پردازشهای فوق سریع (HPC)
سرویس FaaS همچنین میتواند عملکرد محاسباتی را بهطور چشمگیری افزایش دهد. بهعنوان مثال، در سالهای اخیر دو دانشجو با مهندسان IBM روی نحوه استفاده از توابع ابری IBM برای شبیهسازیهای مونت کارلو با هدف تخمین قیمت سهام کار کردند. شبیهسازیهای مونت کارلو چندین روش ریاضی برای تخمین نتایج برخی از رویدادهایی است که بهسختی قابل پیشبینی هستند. این شبیهسازیها بهعنوان بار کاری پردازشهای فوق سریع (High-performance computing) شناخته میشوند.
اگر درباره پردازشهای فوق سریع کنجکاو هستید، مقاله HPC چیست برای شما نوشته شده است. در این مقاله با نحوه عملکرد، کاربردها و مزایای HPC در دنیای مدرن امروز آشنا خواهید شد.
ترکیبی از توابع ابری IBM و مونت کارلو این امکان را برای تیم فراهم کرد تا محاسبات را در مقیاس وسیع انجام دهند و روی منطق کسبوکار تمرکز کنند. این تیم با استفاده از FaaS یک شبیهسازی کامل مونت کارلو را حدود 90 ثانیه با 1000 فراخوان (Invocation) همزمان انجام داد. اجرای همین کار روی یک لپتاپ با 4 هسته CPU و استفاده از 100 درصد CPU حدود 247 دقیقه طول میکشد.
تفاوت FaaS با کانتینرها، ماشینهای مجازی و PaaS
FaaS، کانتینرها، PaaS و ماشینهای مجازی (VMs) همگی نقش مهمی در اکوسیستم Serverless دارند. FaaS را میتوانیم مرکزیترین عنصر پشته بدون سرور (Serverless Stack) بدانیم. ازهمینرو قصد داریم در این بخش به تفاوت ویژگیهای کلیدی FaaS با سایر مدلهای محاسباتی رایج در بازار بپردازیم:
- زمان تامین: زمان تامین در FaaS در حد چند میلیثانیه است، درصورتیکه تامین در سایر مدلها چند دقیقه یا چند ساعت زمان میبرد.
- مدیریت: استفاده از FaaS نیازی به مدیریت ندارد. مدیریت در PaaS، کانتینرها و ماشینهای مجازی بهترتیب از آسان به سخت است.
- مقیاسبندی: FaaS امکان مقیاسبندی فوری را فراهم میکند؛ در مقابل، سایر مدلهای محاسباتی مقیاسبندی خودکار (اما آهسته) ارائه میدهند که به تنظیم دقیق قوانین مقیاسبندی خودکار نیاز دارد.
- برنامهریزی ظرفیت: FaaS در مقایسه با سایر مدلها که به ترکیبی از مقیاسبندی خودکار و برنامهریزی ظرفیت (Capacity planning) نیاز دارند، هیچ نیازی به انجام چنین کارهایی ندارد.
- وضعیت و اتصالات پایدار: توانایی FaaS برای تداوم اتصالات و وضعیت محدود است و باید در سرویس/منبع خارجی حفظ شود. سایر مدلها میتوانند از http استفاده کنند، یک سوکت یا ارتباط باز را برای مدت طولانی نگه دارند و وضعیت را در حافظه بین فراخوانها (Calls) ذخیره کنند.
- تعمیر و نگهداری: وظیفه تعمیر و نگهداری FaaS و PaaS برعهده ارائهدهندگان آنها است. کانتینرها و ماشینهای مجازی به نگهداری قابل توجهی نیاز دارند که شامل بهروزرسانی/مدیریت سیستمعاملها، تصاویر (Images) کانتینر، اتصالات و… است.
- دسترسیپذیری بالا (HA) و Disaster recovery: دسترسیپذیری بالا در مدلهای FaaS بدون تلاش یا هزینه اضافه وجود دارد. سایر مدلهای محاسباتی به هزینه اضافه و تلاشهای مدیریتی نیاز دارند. زیرساخت در ماشینهای مجازی و کانتینرها میتواند بهطور خودکار ریاستارت شود.
- استفاده از منابع: در مدل FaaS منابع فقط در صورت درخواست فراخوانده میشوند. در سایر مدلها گاهی اوقات، مقداری از ظرفیت میتواند بلااستفاده باقی بماند.
- محدودیتهای منبع: FaaS تنها مدلی است که در اندازه کد، فعالسازی همزمان، حافظه، طول اجرا و… محدودیت دارد.
ارتباط FaaS با Kubernetes/Knative
کوبرنتیز (Kubernetes) و کینیتیو (Knative) از جمله پیادهسازیهای Plumbing پشت FaaS محسوب میشوند. کوبرنتیز یک ابزار هماهنگسازی (Orchestration) کانتینر منبعباز (Open source) است که برای مدیریت اپلیکیشنهای ابری حیاتی است. کینیتیو به شما اجازه میدهد Serverless را داخل یک خوشه (Cluster) کوبرنتیز اجرا کنید.
ترکیب کوبرنتیز و کینیتیو به این معنا است که شما میتوانید از مزایای توابع کوبرنتیز مانند مانیتورینگ، امنیت، ثبت و احراز هویت بهره ببرید و آنها را با مزایای کینیتیو مانند ایجاد کانتینر خودکار، قابلیت حمل کامل و کار در محیطهای ترکیبی (Hybrid) ترکیب کنید.
سازندگان این تکنولوژی معتقدند که توسعهدهندگان نباید هنگام ساخت اپلیکیشنهای ابری مجبور به انتخاب از میان Serverless و کانتینر باشند. هدف این تکنولوژی بهرهمند کردن همزمان توسعهدهندگان از دسترسیپذیری و سازگاری کانتینرها با مقیاسبندی قدرتمند و دسترسی بر اساس تقاضای Serverless است.
برای آشنایی بیشتر با کوبرنتیز، کاربردها و مزایای آن پیشنهاد میکنیم مقاله کوبرنتیز چیست را از ابر دراک مطالعه کنید.
اصول و نکات مهم استفاده از FaaS
اگرچه محدودیتهای رسمی کمی برای استفاده از FaaS وجود دارد، اما با توجه به نکات زیر میتوانید بیشترین استفاده را از توابع FaaS داشته باشید:
- فقط از یک رویداد برای راهاندازی یا اجرای یک کار استفاده کنید.
- از توابع تو در تو (Nested function) استفاده نکنید. یک کار نباید منجر به آغاز کار دیگری شود.
- توابع باید فشرده، کوچک و کوتاهمدت باشند.
- توابع را بدون وضعیت (Stateless) نگه دارید؛ اگر یک تابع به داده نیاز دارد، به آن اجازه بدهید به دادههای یک منبع مانند فضای ذخیرهسازی در هر فراخوانی دسترسی داشته باشد.
- وابستگیها را به حداقل برسانید. یک تابع نباید به عوامل خارجی وابسته باشد.
- هنگام فراخوانی توابع از امنیت مانند مجوزها و ویژگیهای مدیریت دسترسی و هویت استفاده کنید.
- تا حد امکان توابع را عمومی و با قابلیت استفاده مجدد کنید.
منبع: IBM | Cloudflare | Techtarget