مدیریت زیرساخت یک پیچیدگی اضافی به گردش کار توسعه نرم افزار مدرن می افزاید. به کارانداختن سرورها، مراقبت از بروزرسانی های امنیتی و مقیاس بندی منابع زمان زیادی را از تیم های DevOps می گیرد. با رایانش بدون سرور(Serverless Computing)، کلیه عملیات زیرساختی توسط ارائه دهنده خدمات انجام می شود. به این ترتیب، بدون سرور به تیم های توسعه دهنده می توانند به جای صرف زمان زیاد در مدیریت زیرساخت، بر روی نوشتن کد تمرکز کنند.
این مقاله توضیح می دهد که رایانش بدون سرور چیست و چگونه با مدل های مختلف ابری مقایسه می شود. همنین، مزایا و معایب بدون سرور را بررسی می کنیم.
رایانش بدون سرور(Serverless Computing) چیست؟
رایانش بدون سرور روشی برای بهینه سازی و اجرای کد در ابر بدون نیاز به تهیه سرور و مدیریت زیرساخت است. بدون سرور هنوز هم برای اجرای کد به سرورهای ابری یا فیزیکی متکی است. با این حال، توسعه دهندگان نگران زیرساخت های زیربنایی نیستند. این امر به ارائه دهنده بدون سرور واگذار می شود که منابع رایانشی لازم را به صورت پویا اختصاص داده و آنها را از طرف کاربر مدیریت می کند.
برای توسعه دهندگان، این به معنی ذخیره زمان صرف شده در مدیریت، نگهداری، مقیاس بندی یا برنامه ریزی ظرفیت است. آنها به سادگی کد خود را بارگذاری می کنند و به ارائه دهنده اجازه می دهند منطق سمت سرور را بر اساس رویدادها یا درخواست های مختلف اجرا کند. بر خلاف مدل های صورتحساب ابری آشنا، سرویس های بدون سرور بر اساس تعداد دفعات اجرا شدن کد یا شروع یک رویداد خاص هزینه دریافت می کنند.
رایانش بدون سرور چگونه کار می کند؟
در محیط بدون سرور، کد توسط رویدادها فعال می شود و به عنوان یک تابع اجرا می شود. به همین دلیل است که سرور اغلب با عملکردها به عنوان سرویس یا FaaS مرتبط است، که مفهومی مشابه می باشد. FaaS یک مدل ابر رویداد محور است که منطق سمت سرور را برای اجرای کد بدون دخالت کاربر مدیریت می کند. این رویدادها می توانند از یک درخواست HTTP ساده و تماس API گرفته تا درخواست دیتابیس یا آپلود فایل باشند.
توابع در کانتینرها بدون حالت اجرا می شوند.
این بدان معناست که منابع ابری رایانشی برای اجرای یک تابع فقط در صورت درخواست، ارائه می شوند. هیچ دادهای در RAM باقی نمی نماند یا روی دیسک نوشته نمی شود. هنگامی که درخواست برآورده شد، وضعیت برنامه بازنشانی(reset) می شود و هیچ سابقهای از تراکنش وجود ندارد. با ایجاد یک درخواست جدید، منابع باید از ابتدا تامین شوند و کد بدون هیچگونه اشارهای به درخواست قبلی، اجرا شود.
انطباق و همسان سازی این وضعیت ناپایدار، برنامه ها باید به عنوان توابع، معماری شوند تا بتوانند در کانتینرهای بدون حالت اجرا شوند. این امر معمولاً از طریق میکرو سرویس ها انجام می شود. برنامه های یکپارچه به بخش های کوچکتر تقسیم می شوند و از طریق API به هم متصل می شوند. برنامه های یکپارچه هنوز می توانند به عنوان یک عملکرد واحد اجرا شوند، اما این یک روش معمول نیست. با در نظر گرفتن اینکه کانتینر رایانشی جدیدی در هر درخواست ارائه می شود، توابع بزرگ بر سرعت و مدت اجرا تاثیری منفی می گذارند.
توابع FaaS بی نهایت اجرا نمی شوند.
آنها پس از مدت زمان مشخصی پس از فراخوانی خاتمه می یابند. در بیشتر موارد، زمان توقف پس از حدود 5 دقیقه به پایان می رسد. این بدان معناست که برنامه هایی که وظایف طولانی مدت را اجرا می کنند باید مجدداً طراحی شوند تا محدودیت های خاتمه را در نظر بگیرند.
تهیه و راه اندازی اولیه کانتینر برای اجرای عملکرد نیز نیازمند صرف زمان است؛ که معمولاً بر حسب میلی ثانیه اندازه گیری می شود. با این حال، توابع پیچیده ممکن است چندین ثانیه طول بکشد، بنابراین باعث تاخیر بیشتر می شود.
دو روش معمول برای راه اندازی یک تابع وجود دارد: شروع گرم و شروع سرد.
شروع گرم مجدداً از منابع رویداد قبلی استفاده می کند، در حالی که شروع سرد یک کانتینر جدید را به کار می گیرد. مدت زمان لازم برای شروع و اجرای یک تابع به مقدار کد، زبان برنامه نویسی، تعداد کتابخانه هایی که اسکریپت از آنها استفاده می کند و همچنین بسیاری از عوامل دیگر بستگی دارد. از نظر تاخیر، شروع سرد زمان بیشتری را برای شروع یک کار نیاز دارد.
رایانش بدون سرور با PaaS، BaaS و IaaS چگونه است؟
مانند هر گرایش نرم افزاری، هیچ تعریف رسمی که توصیف کند بدون سرور چیست، وجود ندارد. به همین دلیل است که رایانش بدون سرور اغلب با سایر سرویس های ابری و مدل های deploy اشتباه گرفته می شود. مفهوم رایانش بدون سرور حول دو حوزه مشابه می چرخد:
Backend-as-a-Service-BaaS، توسعه دهندگان را قادر می سازد تا هنگام نوشتن کلیه عملیات پشتیبان به یک ارائه دهنده خدمات، بر نوشتن رابط های پیش روی تمرکز کند. این وظایف پشت صحنه معمولاً شامل احراز هویت کاربر، ذخیره، مدیریت دیتابیس و سرویس هاستینگ می شود. همچنین، توسعه دهندگان مجبور نیستند سرورهایی را که پشتیبان خود را اجرا می کنند، مدیریت کرده و برنامه های سریعتر را توسعه دهند.
Functions-as-a-Service: این مدل سرویس ابری بدون سرور مدیریت زیرساخت را از بین می برد. ارائه دهنده سرویس وظیفه دارد منابع رایانشی را در صورت درخواست جهت اجرای کد برای کاربران به کار گیرد. هر زمان که یک رویداد یا درخواست انجام شود، این اتفاق می افتد. توابع بدون سرور در کانتینرهای بدون حالت اجرا می شوند، به این معنی که منابع رایانشی تنها زمانی اجرا می شوند که تابع فراخوانی شود.
نکته اصلی سردرگمی بین Backend-as-a-Service و Platform-as-a-Service است. اولی(BaaS) یک روش رایانشی بدون سرور است، در حالی که دومی(PaaS) یک مدل استفاده از ابر است. با وجود اینکه برخی از ویژگی های اساسی را دارند، PaaS با الزامات بدون سرور هماهنگ نیست.
با PaaS، کاربران راه حل های سخت افزاری و نرم افزاری لازم برای افزایش حجم کار را از یک ارائه دهنده خدمات با هزینه اشتراک اجاره می کنند. این به توسعه دهندگان اجازه می دهد زمان بیشتری را صرف برنامه نویسی زیرساخت کنند. از سوی دیگر، BaaS ویژگی های اضافی مانند احراز هویت کاربر خارجی، دیتابیس های مدیریت شده، اعلان های ایمیل و موارد مشابه را ارائه می دهد. همچنین، BaaS به توسعه دهندگان اجازه می دهد تا تنها بر ایجاد نمای داخلی تمرکز کنند، در حالی که خدمات مختلف پشتیبان را بر اساس تقاضا ادغام می کنند.
Infrastructure-as-a-Service
این مدل به یک راه حل ابری خود سرویس اشاره می کند که در آن ارائه دهنده از طرف کاربر زیرساخت را میزبانی می کند. کلیه عملیات تهیه و مدیریت سرور از جمله نصب نرم افزار توسط کاربر انجام می شود. برخی از ارائه دهندگان IaaS همچنین راه حل های بدون سرور را عنوان محصولات کاملاً متفاوت ارائه می دهد.
موارد رایج استفاده از رایانش بدون سرور
همانطور که قبلا ذکر شده، بدون سرور برای همه مناسب نیست. اما اگر نیازهای شما با برخی از این موارد استفاده مطابقت داشته باشد، ممکن است از سرویس های بدون سرور سود ببرید.
ایجاد API ها:
بدون سرورهایی برای مدیریت، ایجاد API های بسیار مقیاس پذیر و پاسخگو یکی از محبوب ترین موارد استفاده بدون سرور است. مقیاس بندی خودکار بدون سرور اطمینان می دهد که API ها حتی در ترافیک سنگین نیز همیشه در دسترس خواهند بود. علاوه بر این، در صورت عدم تماس با API، هزینهای برای منابع بیکار از کاربر دریافت نمی شود.
وب سایت ها و برنامه های کاربردی
ایجاد وب سایت ها و برنامه های تحت وب بر روی پلت فرم بدون نیاز به سرور نیازی به راه اندازی زیرساخت قبلی ندارد. این امر به طور قابل توجهی زمان لازم برای راه اندازی یک برنامه وب کاملاً کاربردی را کاهش می دهد. ویژگی مقیاس خودکار نیز در اینجا نقش مهمی ایفا می کند. زیرا کاربر نیازی به نگرانی در مورد ارائه سرورهای بیشتر برای پشتیبانی از افزایش تقاضا را ندارد. در نتیجه حفظ uptime 100 درصدی بسیار آسان تر است.
برنامه های کاربردی چند زبانه
با استفاده از سرور، می توان یک برنامه را به زبان های مختلف نوشت. بدون سرور به توسعه دهندگان اجازه می دهد تا یک برنامه یکپارچه را به قسمت های کوچکتر تقسیم کرده و آنها را به عنوان میکرو سرویس اجرا کنند. سپس این میکرو سرویس ها از طریق API با یکدیگر ارتباط برقرار می کنند. هر بخش از یک برنامه را می توان با استفاده از یک زبان برنامه نویسی متفاوت نوشت.
خطوط ارتباطی CI/CD
اتوماسیون، کلید اجرای موفقیت آمیز خطوط ارتباطی توسعه، آزمایش و ادغام است. بدون سرور به توسعه دهندگان اجازه می دهد تا کد خود را بطور خودکار آزمایش کرده و اشکالات را سریعتر برطرف کنند. از آنجا که بدون سرور مبتنی بر رویداد است، کاربران می توانند رویدادها را طوری تنظیم کنند که آزمایشات خودکار را بدون دخالت دستی انجام دهند.
مزایای رایانش بدون ابر:
در مقایسه با رایانش ابری سنتی سرور گرا، رایانش بدون سرور عملیات زیرساختی را حذف می کند. همه چیز از بیرون کار می کند که به نوبه خود انتشار سریع تر کد و مقیاس پذیری خودکار را با قیمت پایین تر تضمین می کند.
سه مزیت رایج بدون سرور عبارتند از:
مقیاس بندی خودکار
ارائه دهنده بدون سرور، منابع زیرساخت را بر اساس تقاضا مقیاس بندی می کند. عملیات مقیاس بندی به صورت پویا و خودکار و بدون دخالت توسعه دهندگان انجم می شود.
زمان سریعتر برای بازار
بدون نیاز به ارائه کلاسترهای پیچیده سرور، توسعه دهندگان می توانند تمرکز بیشتری بر دستیابی به سرعت انتشار بیشتر داشته باشند. این باعث می شود زمان لازم برای انتشار کد جهت تولید یا اجرای تغییرات افزایشی، بهینه یابد و در نتیجه سریعتر برنامه ها به مشتریان تحویل داده می شود.
هزینه های بهینه شده
از آنجا که همه چیز بر اساس تقاضا تهیه می شود، سازمان ها هرگز مجبور به پرداخت هزینه های ذخیره نشده، زمان رایانش یا شبکه نیستند. میزان مصرف خدمات بدون سرور معمولاً بر حسب میلی ثانیه اندازه گیری می شود و بر این اساس صورت حساب صادر می شود.
معایب رایانش بدون سرور چیست؟
مانند هر راه حل نرم افزاری، بدون سرور نیز دارای معایبی است. اما بسته به برنامهای که در حال ساخت آن هستید، ممکن است نگران برخی از این معایب بدون سرور باشید.
تاخیر
هنگام اجرای یک عملکرد، ارائه دهندگان بدون سرور به طور خودکار منابع لازم را در هر فراخوانی به کار میگیرند. نسبت به حجم کار، کانتینر ها معمولاً در میلی ثانیه تهیه می شوند، اما حتی می توانند چند ثانیه طول بکشد. تاخیر را می توان با شروع هشدار که از موارد قبلی در اجرای قبی استفاده مجدد می کند، کاهش داد.
مدت اجرا
زمان اجرای یک عملکرد بدون سرور محدود است و پس از یک دوره معین لغو می شود. این امر معمولاً 5 دقیقه پس از فراخوان است، اما در بین ارائه دهندگان متفاوت است. محدودیت های اجرا یک اشکال عمده برای برنامه هایی است که فرآیندهای طولانی مدت را آغاز می کنند. کاهش این مشکل با تقسیم بندی کد به قطعات کوچکتر و اجرای آنها به عنوان میکرو سرویس ها امکان پذیر است.
قفل فروشنده
ارائه دهندگان معمولاً از فناوری های اختصاصی برای فعال کردن سرویس های بدون سرور خود استفاده می کنند. این امر ممکن است مشکلاتی را برای کاربرانی ایجاد کند که می خواهند تغییر حجم کار خود را به پلت فرم دیگری منتقل کنند. هنگام انتقال به ارائه دهنده دیگر، تغییر در کد و معماری برنامه اجتناب ناپذیر است.
امنیت
کاربران، کنترل کمی جهت پیکربندی نمونهای که کد آنها را اجرا می کند، دارند. این امر از دید کاربر مخفی شده و در حوزه ارائه دهنده سرویس قرار می گیرد. به این ترتیب، عملیات امنیتی نیز به دست ارائه دهنده می افتد. در صورت وقوع حمله، کاربر ناتوان است، و تنها بر ارائه دهنده متکی است تا آسیب را کاهش دهد و سیستم را بازیابی کند. برنامه های کاربردی که دارای چنین نقطه ورود در محیط بدون سرور هستند به دلیل افزایش سطح حمله، بیشتر مستعد آسیب پذیری هستند.
آینده رایانش بدون سرور چگونه خواهد بود؟
رایانش بدون سرور هنوز یک فناوری نسبتاً جدید است. آینده آن بستگی به توانایی ارائه دهندگان خدمات برای رفع برخی از اشکالات ذکر شده در بالا دارد مهم تر از همه، شروع سرد است. ارائه دهندگان باید زمان لازم برای اجرای یک تابع را پس از مدتی در حالت آماده به کار، کاهش دهند. حل این مشکل زمان تاخیر را کاهش می دهد و تجربه بدون دردسر را برای کاربر تضمین می کند.
بدون سرور در حال حاضر برای اجرای عملکرد به کانتینر بدون حالت متکی است. آینده بدون سرور در حال حرکت به سمت این است که برنامه های حالت دار بتوانند از مزایای بدون سرور بهره مند شوند. این به توسعه دهندگان اجازه می دهد بدون نگرانی در مورد مدیریت داده های پشتیبان، برنامه های حالت دار بسازند.
از نظر DevOps، بدون سرور منجر به گسترش NoOps می شود. این روند باعث می شود که ارائه دهندگان بدون سرور تمام عملیات زیرساختی را از طرف مشتری انجام دهند. در چنین شرایطی، نیازی به شرکت ها برای داشتن تیم های عملیاتی نیست.
انتظار می رود که کوبرنتس در سال های آینده پایه و اساس بدون سرور شود. کوبرنتس با پشتیبانی از شبکه، مقیاس بندی خودکار منعطف و اجرای چند ابر، رایانش بدون سرور را در بیش از یک روش افزایش می دهد. اجرای کلاس های خاصی از برنامه ها در سرور غیر عملی است. زیرا ارائه دهندگان خدمات گاهی رفتار آنها را محدود می کنند. با استفاده از کوبرنتس، توسعه دهندگان قادر خواهند بود بر این محدودیت ها غلبه کرده و بسترهای بدون سرور را بر اساس نیازهای خاص خود بسازند.
نتیجه گیری
با وجود اینکه نام بدون سرور، عدم وجود سرور را نشان می دهد؛ اما رایانش بدون سرور همچنان به سرورهای ابری یا فیزیکی متکی است. این یک مدل رایانش است که عملیات زیرساختی را حذف می کند و به توسعه دهندگان اجازه می دهد تا بر نوشتن و گسترش برنامه ها تمرکز کنند. مدل بدون سرور حول دو حوزه اصلی می چرخد: BaaS و FaaS
اولی یک معماری پشتیبان آماده به کاربران ارائه می دهد، در حالی که دومی برنامه ها را در کانتینرهای بدن حالت اجرا می کند. این کانتینرها به طور خودکار بر اساس رویدادها یا محرک ها تهیه می شوند. به این ترتیب، بدون سرور یک راه حل موثر برای همه مشکلات توسعه فعلی نیست. این برنامه بیشتر به برنامه های غیر یکپارچه که از معماری مبتنی بر خدمات خرد استفاده می کنند، متمرکز شده است.