آنچه در این مقاله میخوانید
رایانش بدون سرور Serverless و کانتینرها هردو به توسعهدهندگان کمک میکنند برنامههایی بسازند که نسبت به روشهای سنتی مثل استفاده از سرورهای فیزیکی یا ماشینهای مجازی، با سربار کمتر و انعطافپذیری بیشتری اجرا شوند. اینکه از بین رایانش Serverless و کانتینرها کدام سبک معماری را انتخاب کنیم، بستگی به نیازهای برنامه دارد، اما رایانش بدون سرور معمولاً مقیاسپذیرتر و در اکثر مواقع از نظر هزینه بهصرفهتر است.
کانتینر چیست؟
کانتینر شامل برنامه و تمام عناصری است که برنامه برای اجرا شدن به آنها نیاز دارد؛ از جمله کتابخانههای سیستمی، تنظیمات سیستم و سایر وابستگیها. مثل بسته غذایی آمادهای که رویش نوشته «فقط آب اضافه کنید»، کانتینرها نیز فقط به یک چیز نیاز دارند: اینکه میزبانی و اجرا شوند تا بتوانند عملکرد خود را انجام دهند.
هر نوع برنامهای میتواند در کانتینر اجرا شود. برنامههای کانتینریشده در هر جایی که میزبانی شوند، به همان شکل اجرا میشوند. کانتینرها به راحتی قابل جابهجایی و استقرار در هر مکانی هستند؛ درست مانند کانتینرهای فیزیکی حملونقل که اندازه استانداردی دارند و فارغ از محتوایشان میتوان آنها را از طریق وسایل مختلف حملونقل (کشتی، کامیون، قطار و غیره) به هر نقطهای ارسال کرد.
بهطور فنی، کانتینرها روشی برای تقسیم ماشین یا سرور به محیطهای جداگانه فضای کاربری هستند، بهطوریکه هر محیط تنها یک برنامه را اجرا میکند و با سایر بخشهای تقسیمشده روی همان ماشین هیچ تعاملی ندارد. هر کانتینر هسته (kernel) سیستمعامل ماشین را با سایر کانتینرها به اشتراک میگذارد (هسته بخش پایهای سیستمعامل است که با سختافزار کامپیوتر تعامل دارد)، اما بهگونهای اجرا میشود که گویی تنها سیستمِ روی آن ماشین است.
مقایسه کانتینرها و ماشینهای مجازی
ماشین مجازی (Virtual Machine) نرمافزاری است که سیستم کامپیوتری کاملی را شبیهسازی میکند. این ماشین از باقی بخشهای ماشینی که آن را میزبانی میکند، ایزوله (جدا) است و طوری رفتار میکند که انگار تنها سیستمعامل روی آن ماشین است، و حتی هسته مخصوص خودش را دارد. ماشینهای مجازی روش دیگری برای میزبانی چند محیط روی یک سرور هستند، اما در مقایسه با کانتینرها، توان پردازشی بسیار بیشتری مصرف میکنند.
پیشنهاد میکنیم برای اطلاع بیشتر مقاله «مقایسه مجازیسازی و کانتینرسازی» را مطالعه کنید.
رایانش بدون سرور چیست؟
در برنامههای بدون سرور (Serverless)، برنامه به بخشهای کوچکتری به نام «توابع» تقسیم میشود و این توابع توسط ارائهدهنده شخص ثالث میزبانی میشوند. این ارائهدهنده فقط بر اساس مدت زمانی که هر تابع اجرا میشود، از توسعهدهنده برنامه هزینه دریافت میکند.
تفاوتهای اصلی بین رایانش Serverless و کانتینرها چیست؟
ماشینهای فیزیکی
در واقع، برنامههای «بدون سرور» نیز روی سرورها اجرا میشوند، اما تأمین فضای سرور به عهده ارائهدهنده خدمات است؛ یعنی هر وقت برنامه نیاز داشته باشد، ارائهدهنده بهطور خودکار فضا فراهم میکند و هیچ ماشین مشخص و ثابتی به یک تابع یا برنامه اختصاص داده نمیشود. در مقابل، هر کانتینر در یک زمان روی یک ماشین خاص اجرا میشود و از سیستمعامل همان ماشین استفاده میکند، البته در صورت نیاز میتوان بهراحتی آن را به ماشین دیگری منتقل کرد.
مقیاسپذیری
در معماری مبتنی بر کانتینر، تعداد کانتینرهایی که قرار است اجرا شوند، از قبل توسط توسعهدهنده مشخص میشود. اما در معماری بدون سرور (Serverless)، بخش پشتیبان (backend) بهطور خودکار و بر اساس میزان تقاضا گسترش پیدا میکند.
اگر بخواهیم دوباره از مثال کانتینرهای حملونقل استفاده کنیم باید بگوییم که یک شرکت حملونقل ممکن است بتواند افزایش تقاضا برای محصول را پیشبینی کند و کانتینرهای بیشتری به مقصد بفرستد تا نیاز بازار را تأمین کند؛ اما اگر تقاضا بیشتر از حد انتظار شود، این شرکت نمیتواند بهطور ناگهانی و جادویی تعداد بیشتری کانتینر پر از کالا تهیه کند.
معماری بدون سرور دقیقاً چنین قابلیتی دارد. وقتی صحبت از قدرت پردازشی میشود، رایانش بدون سرور شبیه سیستم آبرسانی در خانههای مدرن است؛ شما فقط با باز کردن شیر آب، هر مقدار آبی که لازم دارید دریافت میکنید و فقط برای همان مقدار مصرفشده هزینه پرداخت میکنید. این روش بسیار مقیاسپذیرتر از حالتی است که مجبور باشید آب را دبهدبه یا کانتینر به کانتینر بخرید.
هزینه رایانش Serverless و کانتینرها
کانتینرها بهطور دائمی در حال اجرا هستند و حتی اگر در یک بازه زمانی هیچ کاربری از برنامه استفاده نکند، ارائهدهندگان خدمات ابری باز هم بابت فضای سرور، هزینه دریافت میکنند.
در تقابل رایانش Serverless و کانتینرها باید اشاره کنیم که در معماری بدون سرور هیچ هزینه مداومی وجود ندارد، چون کد برنامه فقط زمانی اجرا میشود که فراخوانی شده باشد. توسعهدهندهها فقط برای ظرفیتی که واقعا توسط برنامهشان استفاده شده، هزینه میپردازند.
نگهداری و مدیریت Serverless و کانتینرها
کانتینرها روی فضای ابری میزبانی میشوند، اما ارائهدهندگان خدمات ابری مسئول بهروزرسانی یا مدیریت آنها نیستند. خود توسعهدهندگان باید هر کانتینری که مستقر میکنند را مدیریت و بهروزرسانی کنند.
از نگاه توسعهدهنده، در معماری بدون سرور هیچ بخشی بکاندی برای مدیریت وجود ندارد. ارائهدهنده خدمات همه مدیریتها و بهروزرسانیهای نرمافزاری مربوط به سرورهایی که کد روی آنها اجرا میشود را انجام میدهد.
زمان استقرار Serverless و کانتینرها
راهاندازی اولیه کانتینرها زمانبرتر از توابع بدون سرور است؛ چون لازم است تنظیمات سیستم، کتابخانهها و وابستگیهای دیگر پیکربندی شوند. اما بعد از پیکربندی، استقرار (Deploy) کانتینرها فقط چند ثانیه طول میکشد. از طرف دیگر، چون توابع بدون سرور کوچکتر از میکروسرویسهای کانتینری هستند و همراه با وابستگیهای سیستمی ارائه نمیشوند، استقرار آنها تنها چند میلیثانیه زمان میبرد. در واقع، برنامههای بدون سرور به محض اینکه کد بارگذاری شود، آماده اجرا هستند.
تست کردن (آزمایش)
تستکردن برنامههای وب بدون سرور کار دشواری است، چون محیط پشتیبان (Backend) بهسختی در محیط محلی (Local) قابل شبیهسازی است. در مقابل، کانتینرها در هر محیطی دقیقا به همان شکل اجرا میشوند و فرقی نمیکند کجا مستقر شوند؛ به همین دلیل، تستکردن برنامهای مبتنی بر کانتینر قبل از استقرار نهایی (Production) نسبتا سادهتر است.
شباهتهای رایانش Serverless و کانتینرها چیست؟
هر دو مبتنی بر فضای ابری (Cloud) هستند و هر دو بهطور قابل توجهی سربار زیرساخت (Infrastructure Overhead) را کاهش میدهند؛ البته رایانش بدون سرور خیلی بیشتر از کانتینرها این کار را انجام میدهد. در هر دو نوع معماری، برنامهها به بخشهای کوچکتری تقسیم و بهصورت اجزای جداگانه مستقر میشوند. در معماری مبتنی بر کانتینر، هر کانتینر یک میکروسرویس (Microservice) را اجرا میکند.
میکروسرویسها چه هستند؟
هر میکروسرویس خدمتی (Service) خاص را انجام میدهد و چندین میکروسرویسِ بههم متصل، در کنار هم برنامه را تشکیل میدهند. با اینکه نام آنها ممکن است القا کند که خیلی کوچکاند، اما الزاما نباید خیلی کوچک باشند.
یکی از مزیتهای ساختن برنامه بهصورت مجموعهای از میکروسرویسها این است که توسعهدهندگان میتوانند فقط یک میکروسرویس را بهروزرسانی کنند، بدون اینکه نیاز باشد کل برنامه را تغییر دهند. ساخت برنامه بهصورت مجموعهای از توابع، مانند معماری بدون سرور، همین مزیت را دارد؛ ولی حتی جزئیتر و دقیقتر.
توسعهدهندگان چطور باید بین معماری Serverless و کانتینرها انتخاب کنند؟
توسعهدهندگانی که معماری بدون سرور را انتخاب میکنند، میتوانند بدون نگرانی اینکه آیا برنامه میتواند بهخوبی مقیاسپذیر باشد یا نه، برنامههای جدید را سریعتر منتشر و بهروزرسانی کنند. همچنین، اگر برنامهای ترافیک یا استفاده مداوم و ثابت نداشته باشد، رایانش بدون سرور از نظر هزینه بهصرفهتر از کانتینرها خواهد بود، چون کد فقط زمانی اجرا میشود که فراخوانی شده باشد و نیازی به اجرای دائمی ندارد.
از طرف دیگر، در مقایسه Serverless و کانتینرها باید بگوییم کانتینرها کنترل بیشتری به توسعهدهندگان میدهند؛ هم بر محیطی که برنامه در آن اجرا میشود (البته این کنترل بیشتر، نیاز به مدیریت و نگهداری بیشتری هم دارد) و هم بر زبانها و کتابخانههایی که استفاده میکنند. به همین دلیل، کانتینرها برای انتقال برنامههای قدیمی (Legacy Applications) به فضای ابری بسیار مفید هستند، چون امکان شبیهسازی دقیقتر محیط اصلی اجرای برنامه فراهم است.
و در نهایت، میتوان از معماری ترکیبی استفاده کرد؛ یعنی بخشی از برنامه بهصورت بدون سرور و بخشی دیگر در کانتینرها اجرا شود. مثلاً اگر یک تابع از برنامه به حافظه بیشتری نسبت به آنچه ارائهدهنده خدمات بدون سرور در اختیار میگذارد نیاز داشته باشد، یا اگر تابعی خیلی بزرگ باشد، یا اگر برخی توابع (ولی نه همه) نیاز به اجرای طولانیمدت داشته باشند، معماری ترکیبی این امکان را فراهم میکند که توسعهدهندگان از مزایای رایانش Serverless و کانتینرها بهطور همزمان بهرهمند شوند. منبع
برای اطلاعات بیشتر و مشاوره با کارشناسان ابرآمد، با ما در تماس باشید:
- آیا برنامههای بدون سرور واقعاً بدون سرور اجرا میشوند؟
خیر، برنامههای بدون سرور (Serverless) همچنان روی سرورها اجرا میشوند. تفاوت در این است که توسعهدهنده نیازی به مدیریت مستقیم سرورها ندارد. ارائهدهنده خدمات ابری، سرورها را بهصورت خودکار مدیریت میکند و بهمحض فراخوانی کد، منابع لازم را فراهم میسازد.
- کدام معماری از نظر هزینه مقرونبهصرفهتر است؟ کانتینر یا Serverless؟
اگر برنامه استفادهی مداوم و ثابتی ندارد، رایانش بدون سرور معمولاً مقرونبهصرفهتر است، چون فقط زمانی که کد اجرا شود، هزینه دریافت میشود. اما اگر برنامه همیشه در حال اجراست یا نیاز به پاسخدهی بلادرنگ و پایدار دارد، معماری مبتنی بر کانتینر ممکن است مناسبتر باشد.
- آیا میتوان از هر دو معماری بهصورت ترکیبی استفاده کرد؟
بله، معماری ترکیبی (Hybrid Architecture) بسیار رایج است. توسعهدهندگان میتوانند از Serverless برای بخشهایی از برنامه که نیاز به مقیاسپذیری بالا دارند و از کانتینرها برای بخشهایی که نیاز به کنترل بیشتر یا اجرای طولانیمدت دارند استفاده کنند.
این مقاله را به اشتراک بگذارید