عملکرد به عنوان سرویس (FaaS) یا Function as a Service

آشنایی با Function-as-a-Service (عملکرد به عنوان سرویس)

گردآوری و ترجمه: حمید میرزابیاتی

مقدمه

عملکرد به عنوان سرویس[1] (FaaS) که به عنوان محاسبات “بدون‌سرور[2]” نیز شناخته می شود ، گزینه‌ای برای استقرار برنامه‌ها در فضای ابری است. به عبارتی دیگر FaaSدسته‌ای از خدمات رایانش ابری است که بستری را فراهم می کند که به مشتریان امکان توسعه ، اجرا و مدیریت قابلیت‌های کاربردی را بدون پیچیدگی ساخت و نگهداری زیرساخت‌هایی می دهد که معمولاً با توسعه و راه اندازی یک برنامه همراه است.

تقریباً یک دهه از ارائه مفهوم FaaS گذشته است و حداقل چهار سال است که از سوی ارائه‌دهندگان مهم خدمات ابری در دسترس قرار گرفته است. به عنوان مثال ، شرکت آمازون خدمت FaaS خود را تحت عنوان AWS Lambdas در اواخر سال 2014 منتشر کرد. مایکروسافت خدمت Azure را در اوایل سال 2016 در دسترس قرار داد.

اما محاسبات بدون سرور دقیقاً چیست؟ چه موقع انتخاب درستی است؟ وقتی در حال برنامه‌ریزی برای استفاده از معماری بدون سرور هستید ، چه مواردی را باید در نظر بگیرید؟

FaaS دقیقا چه کاری انجام می‌دهد؟

FaaS ساده کردن استقرار برنامه‌ها در ابر است. با استفاده از محاسبات بدون سرور، شما بخشی از منطق کسب‌و‌کار را‌، به عنوان یک “عملکرد[3]“، بر روی یک سکوی[4] ابری نصب می کنید. سکو، بنا به تقاضا، توابع را اجرا می‌کند. بنابراین شما می‌توانید کد Backend را بدون تهیه و نگهداری سرور اجرا کنید.

اما این تنها بخشی از داستان است. سکوی ابری، توابع را در دسترس قرار می‌دهد و تخصیص منابع را برایتان مدیریت می‌کند. اگر سیستم نیاز به پذیرش 100 درخواست همزمان داشته باشد، 100 نسخه (یا بیشتر) از سرویس شما را توزیع می‌کند.

اگر تقاضا به دو درخواست همزمان کاهش یابد، درخواست‌های غیر‌ضروری را از بین می برد. شما برای منابعی که عملکردهایتان استفاده می‌کنند و فقط درصورتی که عملکردهای شما به آن منابع نیاز داشته باشند، هزینه پرداخت می‌کنید.

https://library.scalyr.com/2018/09/01050211/Scalyr-3.jpg

محاسبات “بدون سرور” دارای سرور است، اما این موضوع مشکل شما نیست. ارائه دهنده‌ی خدمات ابری آنها را برای شما مدیریت می کند.

تفاوت FaaS با Serverless

Serverless یا خدمت بدون‌سرور و FaaS اغلب با یکدیگر مخلوط می شوند اما واقعیت این است که FaaS در واقع زیرمجموعه‌ی بدون‌سرور است. Serverless بر روی هر نوع سرویس متمرکز است، اعم از محاسبه ، ذخیره‌سازی ، پایگاه‌داده ، پیام‌رسانی ، API gateway و غیره که در آن پیکربندی ، مدیریت و صورتحساب سرورها برای کاربر نهایی قابل مشاهده نیست. از طرف دیگر ، FaaS گرچه شاید مرکزی‌ترین فناوری در معماری‌های بدون‌سرور باشد ، اما بر الگوی محاسبات مبتنی بر رویداد متمرکز شده است که در آن کد برنامه یا محفظه‌ها[5] فقط در پاسخ به رویدادها یا درخواست‌ها اجرا می‌شوند.

FaaS در کدام دسته جای می گیرد؟

کلمات اختصاری مختلف زیادی تحت عنوان XaaS وجود دارد. چه تفاوت‌هایی دارند؟ FaaS در کجا قرار می‌گیرد؟

زیرساخت به عنوان خدمت یا IaaS، به شما عناصر سازنده‌ی برنامه‌ها را می‌دهد. به طور معمول دسترسی به رایانه‌ها (سخت افزار مجازی یا اختصاصی)، شبکه‌ها و فضای ذخیره سازی را فراهم می‌کند. AWS S3 و EC دو نمونه متداول هستند. IaaS بیشترین کنترل را به شما ارائه می‌دهد‌، اما شما باید سیستم‌ها و شبکه‌های خود را از ابتدا بسازید.

سکو به عنوان خدمت یا PaaS، اجزای ابر را بطور عمده برای برنامه ها ارائه می‌دهد. این خدمت، به توسعه‌دهندگان، یک چارچوب برای ایجاد برنامه های سفارشی می‌دهد. برخی از نمونه‌های برجسته PaaS، AWS Elastic Beanstalk و Google App Engine هستند. PaaS استقرار برنامه‌ها را آسان می‌کند ، اما با وابستگی‌به‌فروشنده[6] و اغلب افزایش هزینه ها همراه است.
نرم افزار به عنوان سرویس یا SaaS، برنامه‌های کاملی است که از طریق خدمات ابری ارائه می‌شود. Office365 و Scalyrدو نمونه از این خدمت هستند.

FaaS در مقایسه با IaaS، با چند تفاوت اساسی به PaaS نزدیک‌تر است. با FaaS به جای استقرار یک برنامه‌ی کامل در یک یا چند سرور، توابع یا قسمت‌هایی از برنامه را نصب می کنید. توابع فقط در صورت لزوم بارگیری می‌شوند و در صورت تقاضا می‌توانند به صورت موازی اجرا شوند.
بیایید نگاهی دقیق‌تر به چگونگی عملکرد و دلیل موثر بودن آن بیندازیم.

https://www.altexsoft.com/media/2018/12/Back-end-as-a-service.png

چرا FaaS؟

ما در حال حاضر به سه مورد از مزایای اصلی FaaS پرداخته ایم:

* مدیریت سرورها بر عهده‌ی شما نیست.

* این سکو، مقیاس‌پذیری افقی[7] را برای شما مدیریت می‌کند.

* شما فقط هزینه آنچه را که استفاده می‌کنید پرداخت می‌کنید.

با مدیریت سرورها برای شما،FaaS سکوی سرور را از برنامه شما جدا می‌کند. شما می‌توانید توابع خود را تقریباً به هر زبانی بنویسید. شما می توانید به سایر منابع ابری مانند پایگاه داده و حافظه‌ی پنهان دسترسی پیدا کنید. اگر با رابط‌های تعریف شده‌ی سکو مطابقت داشته باشید، سرویس شما کار خواهد کرد. هرچند که این آزادی راحت نیست. FaaSمحدودیت هایی را در توابع ایجاد می کند و همیشه بهترین گزینه نیست.
مزایای FaaS

  • مقیاس‌گذاری خودکار[8] که با محاسبات بدون سرور دریافت می‌کنید یک مزیت قابل توجه است. این مزیت باعث صرفه‌جویی در هزینه شما می‌شود و از شما در برابر جهش غیرمنتظره‌ی مصرف محافظت می‌کند. تا زمانی که قبض خود را پرداخت کنید، برنامه‌ی شما در دسترس خواهد بود.
    بدون مقیاس پویا[9]، شما مجبورید اندازه‌ی سیستم خود را بر اساس بالاترین سطح استفاده و نه متوسط ​​آن، برآورد کنید. این به معنای پرداخت هزینه منابعی است که بیشتر اوقات بلااستفاده هستند. بنابراین ، FaaS خصوصا برای بارهای کاری پویا یا کارهای برنامه ریزی شده ، مقرون به صرفه است.
  • بیشتر روی کد تمرکز کنید ، نه زیرساخت ها: با FaaS می توانید سرور را به توابع تقسیم بندی کنید که به طور خودکار و به طور مستقل مقیاس بندی می شوند. بنابراین نیازی به مدیریت زیرساخت‌ها ندارید. با این کار می توانید روی کد برنامه تمرکز کنید و می توانید زمان ورود به بازار را بطور چشمگیری کاهش دهید.
  • تمام مزایای زیرساخت های قدرتمند ابری را بدست آورید: FaaS در دسترس بودن ذاتی بالایی را ارائه می دهد زیرا در چند منطقه دسترسی به ازای هر ناحیه جغرافیایی گسترده شده است و می‌تواند در هر تعداد از ناحیه‌ها بدون هزینه های اضافی مستقر شود.
  • مقیاس ابری خود را با استفاده از فناوری مانند Docker ثبت کنید. این راه‌حل هنوز هم به معنای ایجاد هزینه‌های سنگین در منابع ابری و پرسنل است. محفظه‌ها، هماهنگ‌سازی[10]، مقیاس پویا و قابلیت‌های بازیابی بسیار خوبی را برای شما فراهم می‌کنند، اما شما هنوز هم به سرورها و افراد ماهر DevOps نیاز دارید. حتی محفظه‌ها به وصله‌های امنیتی نیاز دارند.
  • نصب و به‌روزرسانی برنامه های FaaS ساده است. آن‌ها همان‌طور که از نامشان پیداست عملکرد هستند. تمام کاری که شما باید انجام دهید این است که کد وارد شده خود را بارگذاری کرده و به سکو بگویید که چگونه آن را فراهم نماید. نیازی نیست سیستم‌های اضافی را فعال کنید یا یک متخصص خدمات ابری باشید. شما می‌توانید به جای نگرانی در مورد زیرساخت‌های ابری، روی برنامه‌ی خود تمرکز کنید.

چه زمانی FaaS برای ما مناسب است؟

شاید این ابهام برای شما پیش آمده باشد که چرا همه افراد برنامه‌های خود را به خدمات بدون‌سرور منتقل نمی‌کنند؟

برای برخی از برنامه‌ها، FaaS همیشه بهترین گزینه یا حتی تنها گزینه‌ی ممکن نیست. زیرا در آن محدودیت‌های طراحی وجود دارد. اما اول، بیایید بررسی کنیم که چه زمانی این سرویس خوب کار می کند.

نام “عملکرد به عنوان یک سرویس” اتفاقی نیست. سرویس شما باید مانند یک تابع ریاضی عمل کند. هر فراخوانی باید بدون‌وضعیت[11] باشد. نباید فرض کنید که اطلاعات مربوط به یک فراخوانی به سرویس شما، در درخواست بعدی در دسترس خواهد بود. هر وضعیتی که برنامه شما نیاز دارد، باید در پایگاه‌داده یا سیستم پرونده خارجی[12] شود. این محدودیت کاملاً منطقی است. FaaS بدون اینکه اطلاعات برنامه‌ی شما را بخواهد، مقیاس‌گذاری را برای شما فراهم می‌کند ، اما این کار را فقط با فرض اینکه نیازی به مدیریت برنامه کاربردی شما نیست، انجام می‌دهد.

بنابراین اگر عملکردهای شما وضعیت را حفظ نکنند یا فقط به منابع خارجی برای آن اعتماد کنند، برای FaaS مناسب است. برنامه های RESTful مثال خوبی هستند. این توابع، در حالی که مشتریان مسئولیت حفظ عملکرد خود را بر عهده دارند، وضعیت منابع را خارجی می‌کنند. یک سرویس مبتنی بر رویداد که به مقیاس افقی نیاز دارد ، می‌تواند به عنوان یک تابع از اجرا لذت ببرد. سکوهای FaaS از رویدادها برای ایجاد نمونه‌هایی[13] از توابع استفاده می‌کنند و بر اساس حجم درخواست‌ها واکنش نشان می‌دهند.

برنامه های RESTFul و سایر برنامه های مبتنی بر رویداد برای این خدمت مناسب هستند و همچنین برای کارهایی که طبق برنامه اجرا می شوند نیز مناسب هستند. به جای پرداخت هزینه برای یک یا چند سرور که بیشتر اوقات خاموش هستند، می توانید برنامه را بصورت تابعی بنویسید.

چه زمانی FaaS برای ما مناسب نیست؟

محدودیت در حالت یا وضعیت برنامه تنها محدودیت محاسبات بدون سرور نیست. چند مورد دیگر نیز وجود دارد و ممکن است از اجرای برنامه شما به عنوان یک یا چند تابع جلوگیری کند. یا ممکن است به این معنی باشد که شما باید در طراحی خود تجدید نظر کنید. سکو توابع مورد نیاز را بارگیری می کند. آنها باید سریع و معمولاً در چند میلی ثانیه شروع شوند. سپس سکو بلافاصله به آن‌ها یک درخواست می دهد. وقتی پردازش کامل شد، آنها را خاتمه می‌دهد. سکو ممکن است برای صرفه جویی در وقت، از یک نمونه با “شروع گرم”[14] استفاده مجدد کند، اما تابع نمی‌تواند به این متکی باشد. این جایی است که حالت یا وضعیت را محدود می‌کند. برنامه‌ای که تعداد زیادی مقداردهی اولیه را انجام می‌دهد با FaaS به خوبی کار نمی‌کند.AWS زمان اجرا Lambdas را به 15 دقیقه محدود می‌کند. Azure این محدودیت را به 10 دقیقه رسانده است. این زمان برای یک فراخوانی API زیاد است، اما ممکن است برای یک وظیفه‌ی برنامه‌ریزی شده کافی نباشد. توابع متأسفانه محدودیت سختی در زمان اجرا دارند. اگر نگران قفل شدن فروشنده باشید و نتوانید نحوه کدگذاری در اطراف آن را بدانید ، ممکن است FaaS نیز مناسب نباشد. اگر می خواهید شخص دیگری کد شما را در سکوی خود اجرا کند، باید برای آن API بنویسید. بسته به روش ایجاد کد خود ، ممکن است بتوانید از قفل شدن جلوگیری کنید. یا ممکن است اهمیتی ندهید. اما اگر این کار را انجام دهید، ممکن است خدمت بدون‌سرور راه حل مناسبی نباشد.

کاهش هزینه و افزایش کارایی

فروشندگان خدمات ابری، هزینه FaaS را بر اساس میزان مصرف اعلام می کنند. پس از استفاده از آن، هزینه آنچه را که استفاده کردید پرداخت می‌کنید. اگر برنامه شما مطابق با آن است، می توانید این کار را با تنظیم محدودیت استفاده کنترل کنید. این موضوع با تامین سرورها از قبل و بر اساس بار پیش بینی شده، کاملاً متضاد است. همچنین عدم استفاده از سرورها بدلیل کمبود یا عدم وجود نیروی متخصص برای نگهداری آن‌ها است. ارائه دهنده‌ی خدمات ابری، همه چیز را در یک معماری بدون‌سرور حفظ می‌کند و نیاز به مدیریت سیستم را از بین می‌برد. حتی اگر شما بتوانید بخشی از برنامه خود را بدون سرور بارگیری کنید، می‌توانید در کارمندان خود صرفه جویی کنید یا به آن‌ها اجازه دهید تا در بخش‌های مهم مأموریت شما تمرکز کنند.

چگونه می توانم از Faas استفاده کنم؟

آمازون AWS Lambda را پنج سال پیش راه اندازی کرد و به یکی از مهمترین خدمات آنها تبدیل شده است. این سرویس، سکوی پیشنهادی آن‌ها برای توسعه مهارت های الکسا و همچنین مکانیزم مفیدی برای دسترسی به بسیاری از ویژگی های نظارت بر AWS است. Lambda از جاوا ، Go ، PowerShell ، Node.js ، C # ، Python و کد Ruby پشتیبانی ذاتی می کند. مایکروسافت Azure Functions را چند سال پس از Lambda راه اندازی کرد، اما از آن زمان تاکنون زمینه‌های زیادی برای آن ایجاد شده است. این خدمت از C # ، JavaScript ، F # ، Java ، Powershell ، PHP و Python پشتیبانی می‌کند. Azure همچنین از “گردش کار” پشتیبانی می کند ، که مفهوم محدودی از حالت یا وضعیت را به خدمات اضافه می کند. Google Cloud Platform دارای عملکردهای Cloud است. توابع Google از Javascript ، Python و Go پشتیبانی می کنند. توابع از یک مدل رویداد پشتیبانی می‌کنند که می‌توانید با افزونه‌ها گسترش دهید. Cloudflare Serverless از ایجاد ورکرهای[15] مبتنی بر Javascript برای تخلیه کار از زیرساخت وب به درون Cloudflare پشتیبانی می کند ، جایی که نمونه‌های مورد نیاز را اجرا می کند. اگر مشتریان شما گستره جهانی دارند، این موضوع یک ویژگی بسیار قدرتمندی برای آن‌ها محسوب می‌شود.

برای دیدن فلیم های سینماییِ مهیج و جذاب”در حوزه فناوری اطلاعات، اوسینت و هوش مصنوعی“، بر روی اینجا کلیک کنید.

آدرس کانال تلگرام سایت بیگ دیتا:

t.me/bigdata_channel

آدرس کانال سروش ما:
https://sapp.ir/bigdata_channel

جهت دیدن سرفصل های دوره های آموزشی بر روی اینجا کلیک کنید.

جهت ثبت نام در دوره های آموزشی بر روی اینجا کلیک کنید.

مراجع:

  1. Function-as-a-Service

  2. Serverless

  3. Funtction

  4. Platform

  5. Containers

  6. Vendor-lock-in

  7. Horizontal Scaling

  8. Automatic scaling

  9. Dynamic scaling

  10. Orchestration

  11. Stateless

  12. externalized

  13. instances

  14. Warm start

  15. Workers

 

همچنین ببینید

معماری-سقراط

معماری سقراط و معماری HADR و دستاوردها

مقدمه معماری-سقراطعناوين مطالبمقدمه معماری-سقراطمعماری HADRدستاورد های معماری سقراطADR(Accelerated Database Recovery)RBPE(Resilient Buffer Pool Extension)RBIO(Remote Block Input …