رفتن به نوشته‌ها
آویاتو یادداشت‌ها و تجربه‌ها وب‌سایت آویاتو
→ همه نوشته‌ها

زیرساخت

سرور خاموش است. هزینه‌هایش نه.

امیرمسعود مهرابیان ۲۱ مهر ۱۴۰۵ ۶ دقیقه مطالعه

سرور خاموش است. هزینه‌هایش نه.

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

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

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

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

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

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

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

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

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

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

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

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

نوشتهٔ امیرمسعود مهرابیان