کدنویسی بدون سرور یک مدل توسعه بومی ابری است که به توسعهدهندگان اجازه میدهد بدون نیاز به مدیریت سرورها برنامههای کاربردی بسازند و اجرا کنند. البته هنوز هم یک یا چند سرور در این روش وجود دارد، اما آنها از توسعه برنامه جدا هستند. در این روش یک ارائهدهنده ابر کارهای معمول تهیه، نگهداری و مقیاسبندی زیرساخت سرور را انجام میدهد. توسعه دهندگان میتوانند به سادگی کد خود را در کانتینرها برای استقرار بستهبندی کنند.
پس از استقرار، برنامههای بدون سرور به تقاضا پاسخ میدهند و در صورت نیاز بهطور خودکار افزایش و کاهش مییابند. پیشنهادات بدون سرور از ارائه دهندگان ابر عمومی معمولا بر اساس تقاضا از طریق یک مدل اجرای رویداد محور اندازه گیری میشوند. در نتیجه، وقتی یک عملکرد بدون سرور در حالت بیکار است، هیچ هزینهای در بر نخواهد داشت.در این پست از بلاگ ابر ویراک قصد داریم در مورد کد نویسی بدون خرید سرور ابری یا همان Severless Coding صحبت کنیم.
اگر شما هم یک توسعهدهندهی برنامههای کاربردی هستید یا صرفا به این مباحث سرور مجازی برای رایانش ابری علاقه دارید، با این پست همراه باشید تا اطلاعات جامع و کاملی در مورد کدنویسی بدون سرور کسب کنید.
مروری بر معماری بدون سرور
تفاوت مدل بدون سرور با دیگر مدلهای رایانش ابری در این است که ارائهدهنده ابر مسئولیت مدیریت زیرساخت ابری و مقیاسبندی برنامهها را بر عهده دارد. برنامههای بدون سرور در کانتینرهایی مستقر شده و در صورت فراخوانی بهطور خودکار راهاندازی میشوند. تحت یک مدل محاسبات ابری استاندارد زیرساخت بهعنوان سرویس (IaaS)، کاربران واحدهای ظرفیت را پیشخرید میکنند، به این معنی که برای اجرای برنامههای خود، به یک ارائهدهنده ابر عمومی برای اجزای سرور همیشه روشن، پول پرداخت میکنید. این مسئولیت کاربر است که ظرفیت سرور را در زمانهای تقاضای بالا افزایش دهد و زمانی که دیگر به آن ظرفیت نیازی نیست، آن را کاهش دهد. زیرساخت ابری لازم برای اجرای یک برنامه حتی زمانی که از برنامه استفاده نمی شود فعال است.
در مقابل، با معماری بدون سرور، برنامهها فقط در صورت نیاز راه اندازی میشوند. هنگامی که یک رویداد کد برنامه را برای اجرا فعال میکند، ارائه دهنده ابر عمومی به صورت پویا منابع را برای آن کد اختصاص میدهد. پس از اتمام اجرای کد، کاربر پرداخت را متوقف میکند. علاوه بر مزایای هزینه و کارایی، مدل بدون سرور، توسعهدهندگان را از وظایف معمولی و ساده مرتبط با مقیاسبندی برنامه و تأمین سرور بینیاز میکند.
در حالت بدون سرور، وظایف معمولی مانند مدیریت سیستمعامل و سیستم فایل، وصلههای امنیتی، متعادلسازی بار، مدیریت ظرفیت، مقیاسبندی، ثبتنام و نظارت همگی به یک ارائهدهنده خدمات ابری واگذار میشوند. می توان یک برنامه کاملا بدون سرور یا برنامهای متشکل از اجزای میکروسرویس تا حدی بدون سرور و تا حدی سنتی ساخت.
نقش ارائه دهنده ابر در محاسبات بدون سرور چیست؟
تحت یک مدل بدون سرور، یک ارائه دهنده ابر سرورهای فیزیکی را اجرا میکند و به صورت پویا منابع آنها را از طرف کاربرانی که میتوانند کد را مستقیما در تولید مستقر کنند، تخصیص میدهد. ارائههای محاسباتی بدون سرور معمولا به دو گروه تقسیم میشوند، Backend-as-a-Service (BaaS) و Function-as-a-A-Service (FaaS).
BaaS به توسعه دهندگان امکان دسترسی به انواع خدمات و برنامههای شخص ثالث را میدهد. برای مثال، یک ارائهدهنده ابر ممکن است خدمات احراز هویت، رمزگذاری اضافی، پایگاههای اطلاعاتی قابل دسترس در ابر و دادههای استفاده با وفاداری بالا را ارائه دهد. با BaaS، توابع بدون سرور معمولا از طریق رابطهای برنامه نویسی برنامه (API) فراخوانی میشوند.
معمولا وقتی توسعهدهندگان به کد نویسی بدون سرور اشاره میکنند، در مورد مدل FaaS صحبت میکنند. تحت FaaS، توسعه دهندگان هنوز منطق سمت سرور سفارشی مینویسند، اما در کانتینرهایی اجرا میشود که به طور کامل توسط یک ارائه دهنده خدمات ابری مدیریت میشود.
ارائه دهندگان عمده ابر عمومی همگی یک یا چند راهکار FaaS دارند. از جمله خدمات وب آمازون با AWS Lambda، Microsoft Azure با توابع Azure، Google Cloud با چندین پیشنهاد و IBM Cloud با IBM Cloud Functions و غیره هستند. برخی از سازمانها ترجیح میدهند که محیطهای FaaS خود را با استفاده از پلتفرمهای بدون سرور منبع باز، از جمله Red Hat® OpenShift® Serverless، که بر اساس پروژه Knative برای Kubernetes ساخته شده است، کار کنند.
Function-as-a-Service (FaaS) چیست؟
Function-as-a-Service (FaaS) یک مدل اجرای محاسباتی رویداد محور است که در آن توسعه دهندگان منطقی را مینویسند که در کانتینرهایی که به طور کامل توسط یک پلتفرم مدیریت میشود مستقر میشود و سپس در صورت تقاضا اجرا میشود. برخلاف BaaS، FaaS کنترل بیشتری را برای توسعه دهندگان فراهم میکند که به جای تکیه بر کتابخانهای از خدمات از پیش نوشته شده، برنامههای سفارشی ایجاد میکنند. کد در کانتینرهایی مستقر میشود که توسط یک ارائه دهنده ابر مدیریت میشوند. به طور خاص، این کانتینترها عبارتاند از:
- بدون تابعیت، ادغام دادهها را سادهتر میکند.
- زودگذر، به آنها اجازه میدهد برای مدت زمان بسیار کوتاهی اجرا شوند.
- مبتنی بر رویداد، بنابراین میتوانند در صورت نیاز به طور خودکار اجرا شوند.
- به طور کامل توسط یک ارائه دهنده ابر مدیریت میشود، به طوری که شما فقط برای آنچه لازم است هزینه پرداخت میکنید، نه برنامهها و سرورهای همیشه روشن.
با استفاده از FaaS، توسعهدهندگان میتوانند برنامههای بدون سرور را از طریق APIهایی که ارائهدهنده FaaS از طریق یک دروازه API کنترل میکند، فراخوانی کنند.
موارد استفاده بدون سرور چیست؟
معماری کد نویسی بدون سرور برای برنامههای ناهمزمان و بدون حالت که میتوانند فورا راهاندازی شوند، ایدهآل است. به همین ترتیب، کد نویسی بدون سرور برای موارد استفادهای مناسب است که افزایش تقاضا را به ندرت و غیرقابل پیش بینی میبینند. به کاری مانند پردازش دستهای فایلهای تصویری ورودی فکر کنید، که ممکن است به ندرت اجرا شود، اما باید زمانی که یک دسته بزرگ از تصاویر به یکباره میرسد آماده باشد. یا کاری مانند مشاهده تغییرات ورودی به یک پایگاه داده و سپس اعمال یک سری توابع، مانند بررسی تغییرات در برابر استانداردهای کیفیت، یا ترجمه خودکار آنها.
برنامههای بدون سرور نیز برای مواردی که شامل جریانهای دادههای ورودی، رباتهای چت، کارهای زمانبندیشده یا منطق تجاری هستند، مناسب هستند. برخی دیگر از موارد استفاده متداول بدون سرور عبارتند از APIهای Back-end و برنامههای وب، اتوماسیون فرآیندهای تجاری، وب سایتهای بدون سرور و ادغام در چندین سیستم.
Knative و Kubernetes بدون سرور چیست؟
به عنوان راهی برای اجرای برنامههای کانتینری بر روی زیرساختهای خودکار، جای تعجب نیست که پلتفرم هماهنگسازی کانتینر Kubernetes یک انتخاب محبوب برای اجرای محیطهای بدون سرور است. اما Kubernetes به خودی خود برای اجرای بومی برنامههای بدون سرور آماده نیست.
Knative یک پروژه جامعه منبع باز است که اجزایی را برای استقرار، اجرا و مدیریت برنامههای بدون سرور در Kubernetes اضافه میکند. محیط بدون سرور Knative به شما امکان میدهد کد را در یک پلتفرم Kubernetes، مانند Red Hat OpenShift، مستقر کنید. با Knative، با بسته بندی کد خود به عنوان یک تصویر ظرف و تحویل آن به سیستم، یک سرویس ایجاد میکنید. کد شما فقط زمانی اجرا میشود که نیاز باشد، با شروع و توقف نمونههای Knative به طور خودکار.
Knative از 3 جزء اصلی تشکیل شده است:
- Build – یک رویکرد منعطف برای ساخت کد منبع در کانتینرها.
- Serving – استقرار سریع و مقیاسبندی خودکار کانتینرها را از طریق یک مدل مبتنی بر درخواست برای ارائه بارهای کاری بر اساس تقاضا، فعال میکند.
- Eventing – زیرساختی برای مصرف و تولید رویدادها برای تحریک برنامهها. برنامهها میتوانند توسط منابع مختلفی فعال شوند، مانند رویدادهای برنامههای شخصی شما، خدمات ابری از چندین ارائهدهنده، سیستمهای Software-as-a-Service (SaaS) و جریانهای Red Hat AMQ.
برخلاف فریم ورکهای بدون سرور قبلی، Knative برای استقرار هر برنامه کاربردی مدرن – از برنامههای یکپارچه گرفته تا میکروسرویسها و عملکردهای کوچک – طراحی شده است. Knative به عنوان جایگزینی برای راه حل FaaS که توسط یک ارائه دهنده خدمات کنترل میشود، میتواند در هر پلتفرم ابری که Kubernetes را اجرا میکند اجرا شود. این میتواند شامل اجرای در یک مرکز داده داخلی باشد. این به سازمانها چابکی و انعطاف بیشتری در اجرای بارهای کاری بدون سرور خود میدهد.
مزایا و معایب محاسبات بدون سرور چیست؟
مزایا
- محاسبات بدون سرور میتواند بهرهوری توسعه دهندگان را افزایش داده و هزینههای عملیاتی را کاهش دهد. با واگذاری وظایف معمول تهیه و مدیریت سرورها، توسعه دهندگان زمان بیشتری برای تمرکز روی برنامههای خود دارند.
- کد نویسی بدون سرور با کاهش نیاز توسعهدهندگان به تشریح صریح زیرساختهایی که عملیاتهای مورد نیازشان برای تهیه آنها نیاز دارند، امکان پذیرش DevOps را فراهم میکند.
- این امکان وجود دارد که توسعه برنامه را حتی بیشتر با ترکیب اجزای کامل از پیشنهادات BaaS شخص ثالث ساده کنید.
- هزینههای عملیاتی در مدلهای کد نویسی بدون سرور کاهش مییابد، زیرا شما میتوانید زمان محاسبات مبتنی بر ابر را در صورت نیاز پرداخت کنید، نه اینکه سرورهای خود را همیشه اجرا و مدیریت کنید.
معایب
- این واقعیت که سرور را خود کاربر راهاندازی نمیکند و کنترلی بر منطق اجرای آن ندارد، در مواردی میتواند باعث ایجاد چالش شود.
- ارائهدهندگان ابر ممکن است محدودیتهای سختی در مورد نحوه تعامل با اجزای خود داشته باشند که به نوبه خود بر انعطافپذیری و سفارشیسازی سیستمهای شما تأثیر میگذارد. در مورد محیطهای BaaS، توسعهدهندگان ممکن است به سرویسهایی وابسته باشند که کد آنها خارج از کنترل آنها است.
- واگذاری کنترل این جنبههای پشته فناوری اطلاعات شما را هم به محدود شدن به یک تأمینکننده مجبور میکند. تصمیم گیری برای تغییر ارائه دهندگان نیز احتمالا با هزینه ارتقاء سیستمهای شما برای رعایت مشخصات فروشنده جدید همراه خواهد بود.
سیر تکاملی کد نویسی بدون سرور
مفاهیم معماری بدون سرور و FaaS با محبوبیت کانتینرها و ارائههای ابری درخواستی، دست به دست هم دادهاند. یک گزارش تحقیقاتی 451، که با همکاری Red Hat انجام شد، تکامل کد نویسی بدون سرور را در ۳ مرحله شناسایی کرد. فاز «1.0» کد نویسی بدون سرور با محدودیتهایی همراه بود که آن را به گزینهای مناسب برای محاسبات عمومی تبدیل نمیکرد. رایانش بدون سرور 1.0 با موارد زیر مشخص میشود:
- HTTP و چند منبع دیگر
- فقط توابع
- زمان اجرای محدود (5-10 دقیقه)
- بدون ارکستراسیون
- تجربه توسعه محلی محدود
ظهور Kubernetes آغازگر دوره «Serverless 1.5» بود که در آن بسیاری از چارچوبهای کد نویسی بدون سرور شروع به مقیاس خودکار کانتینرها کردند. ویژگیهای کد نویسی بدون سرور ۱.۵:
- نیتیو
- مقیاسبندی خودکار مبتنی بر Kubernetes
- میکروسرویسها و توابع
- اشکال زدایی و تست محلی آسان است
- چند زبانه و قابل حمل
امروز، عصر کد نویسی بدون سرور ۲.۰ با اضافه شدن یکپارچگی و حالت (State) در حال ظهور است. ارائه دهندگان شروع به اضافه کردن قطعات گمشده کردهاند تا کد نویسی بدون سرور برای بارهای کاری همه منظوره مناسب باشند. رایانش بدون سرور 2.0 ویژگیهای زیر را دارد:
- مدیریت حالت اولیه
- استفاده از الگوهای یکپارچه سازی سازمانی
- قابلیتهای پیام رسانی پیشرفته
- با شرکت PaaS ترکیب شده است
- منابع رویداد آماده سازمانی
- دولت و ادغام
سخن پایانی
در این پست از بلاگ ابر ویراک در مورد کد نویسی بدون سرور یا همان Serverless Coding صحبت کردیم. ابتدا روش و منطق آن را توضیح دادیم و به مزایا و معایب این روش پرداختیم. کد نویسی بدون سرور روشی پیشرفته است که بر اساس مجازیسازی و رایانش ابری شکل گرفته و میتواند باعث بهبود عملکرد کسبوکارها بشود. در پایان امیدواریم این پست برای شما مفید واقع شده باشد.