Ali Kolahdoozan
Ali Kolahdoozan
خواندن ۵ دقیقه·۴ سال پیش

شرحی کوتاه بر مفهوم Infrastructure as code


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

بر اساس آنچه من میدانم، در حال حاضر در ایران این مرز پر گهر هم روال کار همین است. خوب بد هم نیست ولی آیا این روند مطلوب و کارا است ؟. پاسخ منفی است. چرا منفی است ؟.

فرض کنید محاسبه اینکه چقدر رم نیاز دارید یا چه تعداد CPU باید به سرویسها یا دیتابیسهای شما اختصاص داده شود بسیار یا مشکل کلن غیر ممکن است. اصلن چرا باید من یک ماشین مجازی با 480 گیگا بایت رم تهیه کنم و هزینه آنرا ماهانه بدهم وقتی میدانم این Dataset که باید محاسباتی ML روی آن انجام دهم، نهایتن 1 روز به منابع زیادی نیاز دارد و بعد از آن تا ماه آینده من نیازی به این همه منابع ندارم !.

ضمنن فرض کنید مشتریان مثلن "دیرفود" ، فقط از ساعت 11 تا 2 و 6.5 تا 8.5 شب به سرورها حمله میکنند (چون گرسنه هستند) ، ولی در مابقی مواقع خبری نیست و نیازی به Service Bus های متعدد و رم زیاد و ... نیست ، خوب وقتی من VM ها را به صورت ماهانه میگیرم و پول را هم به صورت ماهانه پرداخت میکنم، دیگر چه فرقی دارد ؟. در کل من باید برای همه چیز بیخودی پول بدهم و همیشه هم ماکزیممها را سفارش بدهم تا کم نیاورم.

در دنیای IT ، اصولن نباید متوقف شد. این بود که متخصصین پس از پیداش Cloud ، عملن این مشکل را از طریق اصل Infrastructure as code برطرف کردند.

خوب ببینیم این Infrastructure as code یعنی چی ؟

وقتی شما به شرکت هاستینگ / دیتاسنتر یا هر جایی که مسئول ایجاد و اختصاص منابع سرورها و .... به مشتری است سفارش یک یا چند ماشین با منابع مختلف می دهید، ابتدا بخش مالی وضعیت پرداخت و آنچه باید بر اساس درآمد و عدد و رقمهای مالی باشد را انجام میدهد و سپس موافقت خود را انجام مراحل فنی صادر می کند. بعد از آن یک یا چند پرسنل باید Panel های مدیریتی خود را باز کرده و آنچه لازم است را ایجاد و اطلاعات دسترسیها را نیز برای شما ارسال نمایند. برای همین است که عمل کم و زیاد کردن و بازی کردن با این منابع تقریبا شدنی نیست. 5000 مشتری نمیتوانند از شرکت هاستینگ بخواهند هزینه منابع را ساعتی حساب کرده و شبها منابع اختصاصی به آنها را کاهش داده یا حتی از بین ببرد و باز اول هر صبح آنها بتوانند همه چیز را Up and running داشته باشند، ولی در مکانیزم Infrastructure as code این مهم دست یافتنی است.

در عمل میتوان گفت Infrastructure as code یک مجموعه از API ها است که هر زمان بخواهید میتوانید آنها را صدا بزنید و منابع جدید ایجاد کنید، مقادیر و متغیرها را تغییر دهید یا آنها را از بین ببرید. در اکثر موارد هم هزینه بر ثانیه / دقیقه / ساعت محاسبه میگردد و همه چیز بر اساس محاسبه مشتری است. خوب اینگونه است که مجموعه های بزرگ آنچه نیاز دارند با به صورت CLI آماده میکنند و هر وقت نیاز داشتند، با اجرای Command ها ، آنچه میخواهند را می سازند یا از بین می برند یا تغییر میدهند و بر اساس مصرفشان پول پرداخت میکنند.

اینجا است که اگر برای 1 روز به منابع زیادی برای TAG زنی یک DataSet نیاز داشتید، فقط برای یک روز منابع بالایی میگیرید و در پایان کار هم همه چیز را نابود میکنید و از شر پرداخت پول برای 1 ماه یا بیشتر راحت میشوید. شاید یک محاسبه غلط باعث شود 5 روز بعد باز به منابع بیشتری نیاز داشته باشید، خوب فاجعه نشده، باز در 1 دقیقه یا کمتر، هر آنچه نیاز دارید با دوباره بسازید و در پایان کار آنرا یک یا چند دستور یا زدن یک دکمه همه چیز را منفجر کنید!.

این روندی است که Cloud های بزرگ Azure ، AWS و.... در پیش گرفته اند و روز به روز هم بیشتر مورد توجه کاربران قرار میگیرد. در کل میتوان گفت، دیگر برای داشتن منابع حتی قوی ،لزوما نیاز نیست پولدار باشید چرا که لازم نیست برای ابد هزینه سرویسهایی که شاید حتی ماهی 1 روز نیاز دارید را بپردازید!

Infrastructure as code
Jack of all trades, master of none
شاید از این پست‌ها خوشتان بیاید