اینم یه تجربه پراکنده دیگه

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

برم سراغ ایده. چیزاهایی در دنیا وجود داره که در کشور ما به دلایل مختلفی اجرایی نمیشه و کسی هم روش کار نمیکنه. یکی از اون‌ها سرویس‌های زیرساختی هست که بصورت اتوماتیک ارائه بشه. تنها سیستم‌های زیرساختی اتوماتیکی که وجود داره سیستم‌های خرید هاست هست که اون هم به همت whmcs و cpanel هست که دیگرانی زحمت کشیدن و اون رو اتوماتیک کردن. پس جای خالی فراهم کنندگان IaaS و PaaS حس میشه. از طرف دیگه همیشه علاقه به وجود آوردن سایت سازهای اتوماتیک در بین مهندسین کامپیوتر وجود داشته و داره. یعنی اونها از قبل با زدن سرویس وبلاگ و اخیرا با زدن سایت سازهای متفاوت(مثل لینکسایت ساز کاموا، لینکتکنولوژی ۷۸، لینکسایت سازی کانی وب) سعی کردن خدمات از نوع SaaS ارائه بدن. این خدمات معمولا خدمات خوبی بودن اما کاربر حرفه‌ای که میخواد کار جدی بکنه رو جذب نمی‌کرده. همچنین معمولا سایت‌داران حرفه‌ای میرفتن سراغ خریدن vps و سرور و مدیریت کردن زیرساخت خودشون. اما من برخی از دوستانم رو میشناسم که توی مدیریت زیرساختشون همیشه مشکل دارن و بهشون حمله میشه و کلی اتفاق بد دیگه براشون میفته. پس اگه کسی باشه که بتونه سایت داران حرفه‌ای خدمتی ارائه بده و بهشون آزادی عمل بده که بتونن هر کاری میخوان انجام بدن و توی حجم بازدید بالا دوام بیارن و کمر خم نکنن اونها رو خوشحال میکنه.

پس اگه من بخوام تیتر وار بگم که چه کاری میخوام انجام بدم و به چه دلیلی این کار خوبه اینهاست:

  • مشکلات موجود
    • سختی مدیریت زیرساخت
    • عدم وجود امکان ساختن سایت بصورتت اتوماتیک
    • عدم وجود قابلیت افزایش کارایی سایت با توجه به تعداد بازدید
    • عدم وجود پلن‌های منطقی برای افزایش بازدید‌های لحظه‌ای(عدم وجود پلن‌های روزانه و ساعتی) که باعث افزایش هزینه سایت می‌شود.
    • دسترسی به سورس سایت جهت بهبود و اختصاصی سازی‌های مورد نیاز سایت‌های پربازدید
  • دلیل عدم استفاده از یک سرویس PaaS
    • عدم آشنایی کافی توسعه دهندگان (که خودم هم جزئی از اون هستم) با این ابزار و به تبع مدل توسعه.
    • عدم وجود بهینه‌سازی‌های خاص منظوره مورد نیاز با سیستم‌های مدیریت محتوا
  • بازار هدف
    • سایت داران حرفه‌ای که صاحب سایت‌های پربازدید هستند.

بزم سراغ کاری که میخوام انجام بدم:

  • ابزار اصلی مورد استفاده: با توجه به آنچه که در شرکت‌های مشابه در دنیا انجام شده، استفاده از مجازی سازهای سبک یا همان مجازی سازی در سطح سیستم عام یا همان container ها رمز موفقیت این تجربه‌هاست. برای آشنایی بیشتر با این تکنولوژی‌ها به اینجا و اینجا مراجعه کنید. لیست این تکنولوژی‌ها که مستندات و منابع کافی در مورد آنها در اختیار است به شرح زیر است
  • هدف نهایی
    • اینکه کاربران بصورت اتوماتیک بتوانند سایت بسازند
    • نسخه‌های سایت آنها در git یا سیستم مشابه مدیریت نسخه‌های ذخیره شود
    • هر سایت دو سایت کمکی برای وضعیت stage و dev داشته باشد که از نظر ساختار شبیه سایت نهایی باشد
    • هر سایت بتواند در صورت نیاز افزایش کارایی پیدا کرده (با اجرا شدن کانتینرهای دیگر)
    • هزینه سرویس بصورت ساعتی محاسبه شود
    • به فایل‌های سایت(عکسهای آپلود شده و سایر مستندات) دسترسی معمول مثل ftp وجود داشته باشد
    • سایت بصورت on demand فعال و غیر فعال شوند تا در هزینه‌ها صرفه جویی شود.
  • مراحل اجرا
    • فاز اول(انجام شده):
      • استفاده از docker به عنوان تکنولوژی
      • استفاده از fig به عنوان سیستمی که سایت‌ها و کانتینرها را سر هم میکند
      • ایجاد یک image خاص منظوره برای cms ها استفاده شده. علی الحساب برای drupal و WordPress
      • استفاده از git برای نگهداری نسخه‌های مختلف سورس سایت‌ها
    •  فاز دوم:
      • ایجاد یک سیستم توزیع بار برای امکان افزایش کارایی
      • ایجاد یک سیستم برای share کردن فایلهای سایت بین کانتینرهای مختلف
      • رفع اشکال سیستم
    • فاز بینهایت
      • پیاده سازی service discovery در سیستم توزیع بار
      • پیاده سازی کانتینرهای on demand
      • پیاده سازی پرتال مشتریان برای انجام این عملیات بصورت اتوماتیک
  • چالش‌های کار
    • انتخاب تکنولوژی کانتینرها
    • سخت بودن service discovery و on demand بودن سیستمها
    • سخت بودن بازاریابی و جلب اعتماد سایت‌داران بزرگ
    • نیاز به سرمایه قابل توجه انسانی و مالی

نمیدونم چیزی از قلم افتاده یا نه ولی فعلا همین!

اینم یه تجربه پراکنده دیگه!

سر کار اخیرا نیاز شد که یه سیستم با قابلیت virtualization نصب کنیم. خوشبختانه همکارمون که مسئول این کار بود از من در این مورد مشورت گرفت. توی کارهای خیلی جدی شرکت معمولا از vmware ESXi استفاده میشه اما اینجا من و این دوستمون علاقه‌مند شدیم که از یه تکنولوژی دیگه استفاده کنیم. هر دومون با kvm و linux آشنایی داشتیم پس مطمئن بودیم که میتونیم در بدترین حالت با استفاده از لینوکس مشکل رو حل کنیم. پس من پیشنهاد دادم بریم سراغ smartos. یه شرکت به نام joyent از این سیستم عامل پشتیبانی میکنه که اسپانسر nodejs و چیزهای دیگه هم هست. همونطور که قبلا هم گفته بودم این سیستم عامل یه مدته «چشم من رو گرفته» دلایلش هم ایناست

  1. ریشه اش به سولاریس برمیگرده که سیستم عامل بسیار خوبیه!
  2. از zfs پشتیبانی میکنه که اون هم سیستم فایل محشریه!
  3. از kvm به عنوان مجازی ساز سخت افزار استفاده میکنه
  4. از zone های سولاریس به عنوان مجازی سازی سبک(مراجعه کنید به این و این) پشتیبانی میکنه

کاری که ما میخواستیم انجام بدیم این بود که میخواستیم علی الحساب یه ماشین مجازی pfsense توش نصب کنیم و یه کارهایی باهاش انجام بدیم در حین این کار نکات جالب و قابل توجهی برخوردیم که میخوام اینجا مستندشون کنم

نکات جالب در برخورد من با این سیستم عامل اینهاست

  1. کل سیستم نیاز به نصب نداره! و فقط کافیه که روی هارد بتونه سیستم فایل zfs رو تشخیص بده. پس بروز رسانی در حد خاموش و روشن کردن سیستم هزینه داره. از اون سمت با استفاده از pxe میشه سیستم رو بوت کرد که یعنی کل هاردهای سرور جهت ذخیره سازی اطلاعات بکار میره
  2. از json برای توصیف ماشین‌های مجازی و zone هاش استفاده میکنه. که این قضیه برنامه نویسی کردن برای اون رو به شدت ساده میکنه

نکات قابل توجهی که من در حین کار بهش برخوردم اینا بود

  1. کارت شبکه mainboard یکم مشکل داشت و smartos هم درست ازش استفاده نمیکرد
  2. مدت زمان لازم برای reboot شدن ماشین مجازی pfsense زیاد بود(حدود ۵ دقیقه)
  3. نمیشد از توی pfsense سیستم رو reboot کرد
  4. نصب واسط گرافیکی برای راحت‌تر کار کردن لینوکس و یونیکس نابلدها با سیستم به نظر پر دردسر میرسید!

علی الحساب همین تا باز هم بیشتر باهاش کار کنم و نتایج رو بهتون بگم!

اینم یه تجربه پراکنده دیگه!

همینطور که قبلا نوشته بودم(لینک، لینک، لینک) من تقریبا دوسال میشه که یه سیستم تمام وقت روشن توی خونه دارم که باهاش کارهای بسیاری میکنم که لیست اون کارها از این قراره:

  1. یه ماشین مجازی کوچک دارم و pfsense مسئولیت مسیریابی خونه رو به عهده داره
  2. روش minidlna دارم  که مسئولیت تفریحات فیلمی خونه رو برعهده داره
  3. روش یه samba server دارم که مسئولیت اشتراک فایل رو برعهده داره
  4. روش یه seafile سرور دارم که مسئولیت بک آپ اتوماتیک از تصاویر تلفن‌ها و اطلاعات مهم لپ تاپ‌ها رو برعهده داره.
  5. روش یه deluge دارم که شبها تورنتها رو دانلود و آپلود میکنه
  6. روش یه سرور taskwarior دارم که نقط بک آپ مدیریت لیست کارهایی هست که در هفته انجام میدم

کانفیگ سیستم هم اصلا جدید نیست و یه سیستم میشه گفت بسیار قدیمیه

  1. سی پی یو: AMD sempron 3000+ AM2
  2. رم : ابتدا ۱ گیگ و سپس ارتقا به ۲٫۵ گیگ
  3. هارد: ۵۰۰ گیگ
  4. سیستم عامل: اوایل ubuntu server و mint

این سیستم تقریبا با ثبات بسیار خوبی این دو سال گذشته رو خدمت رسانی کرده و من ازش راضیم خدا هم ازش راضی باشه! توی این دو سال من تجربه بسیاری خوبی در مورد مدیریت یه سیستم تنها به کمک ssh داشتم. همچنین توی این دوسال خانمم هم به مدت کوتاهی از این سیستم به عنوان دسکتاپ استفاده کرده.

اما این سیستم بعد از دوسال نیاز به بروزرسانی داره و من میخوام به دلایل زیر این سیستم رو از نظر سخت افزاری و نرم افزاری ارتقا بدم

  1. پرشدن هارد بر اثر دانلود زیاد
  2. نیاز به راه‌اندازی یک NAS به دلیل نزدیک شدن به پایان عمر مفید هارد دیسک‌های اکسترنال(حدودا سال ۸۷ خریداری شده اند)
  3. یادگیری تکنولوژی‌های جدید
  4. بهینه سازی سیستم فعلی

اما طرح من برای بهینه کردن این سیستم از این قراره که:

  1. علی الحساب میخوام سه تا هارد دو ترا به سیستم اضافه کنم که یکیش بک آپ اون دوتای دیگه باشه. همچنین نمیخوام از کارت raid استفاده کنم و ترجیحم اینه که از سیستم فایل zfs استفاده کنم.
  2. میخوام بتونم روی این سیستم از مجازی سازی سبک یا همون container های استفاده کنم که این استفاده هم کلی چیز جدید به من یاد میده
  3. میخوام سیستم عامل رو سبک کنم و میزان مصرف منابع کاهش بدم. برای این کار به نظر میرسه باید از لینوکس به یه سیستم عامل دیگه مهاجرت کنم که این مهاجرت کلی مطالب جدید به من یاد میده
  4. در صورتی که پولم برسه میخوام یه ssd بخرم و اون رو به عنوان cache به zfs اضافه کنم,

چالشهای پیش روم هم ایناست:

  1. zfs یک سیستم فایل بسیار قوی هست اما من فکر نمیکنم که هنوز به اندازه کافی اون رو بلدم که بخوام بهش اعتماد کنم و کل هاردهام رو به اون بسپارم
  2. zfs روی سیستم عامل freebsd و illumos و حتی linux وجود داره اما من نمیدونم کدوم پیاده‌سازی بهتر و با ثبات تره. البته باید بگم که پیاده‌سازی‌های موجود روی این سیستم‌ها قدیمی و با ثبات هستن
  3. تکنولوژی مجازی سازی سبک یا container‌ ها همنطور که اینجا هم بررسی کردم روی لینوکس freebsd و illumos با هم متفاوته من هیچ دید عملیاتی ندارم که کدوم بهتره.
  4. هر کدوم از این سیستم‌های یه سری کارها رو راحت کردن مثلا freebsd با freenas و nas4free کار رو برای پیاده‌سازی آسون zfs راحت کرده و شیر کردن و تورنت بازی این چیزا خیلی ساده شده. همچنین illumos با یه محصول به نام smartos مجازی سازی و مجازی سازی سبک و مدیریت اونها رو بسیار ساده کرده. که این انتخاب رو سخت میکنه

حالا با توجه به اینکه انتخاب‌های من کم نیستن بایستی یکم بیشتر بررسی کنم و انتخاب کنم.

همین!

اینم یه تجربه پراکنده دیگه!

همونطور که احتمالا همه میدونید الان بازار containerها یا همون مجازی سازی سبک در دنیا و خب در ایران داغه. من توی یه سری پست سعی میکنم (قسمت اول) که راهی رو که خودم برای درک این موضوع طی کردم رو بنویسم.

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

  • لینوکس
    • Linux-VServer: این تکنولوژی یکی از قدیمی ترین(سال ۲۰۰۱) تکنولوژی‌های مجازی سازی در سطح سیستم عامل هست که نیاز به تغییر کرنل(پچ شدن کردن) برای بوجود آوردن امکان ایزوله کردن منابع سیستم هست. این سیستم متن باز بوده ولی هیچوت تغییراتش به هسته سیستم عامل راه پیدا نکرده
    • Parallels Virtuozzo Containers : این سیستم هم بسیار قدیمی است(سال ۲۰۰۱) و بصورت تجاری توسعه پیدا کرده.
    • OpenVZ: یک محصول متن بازه که اون هم نیاز به پچ کردن کرنل داره و تغییراتش هیچوت به درون هسته لینوکس راه پیدا نکرده. شروع توسعه این ابزار به سال ۲۰۰۵ برمیگرده.
    • ابزارهای مبتنی بر cgroups و namespaces در کرنل لینوکس: این تکنولوژی در سال ۲۰۰۶ توسط مهندسان گوگل شروع شده و به کرنل لینوکس راه پیدا کرده. با توجه به این ویژگی‌ها محصولات متفاوتی تولید شده
      • lmctfy: این ابزار توسط گوگل توسعه پیدا کرده و مورد استفاده قرار گرفته. شروع توسعه این ابزار به سال ۲۰۱۳ برمیگرده.
      • LXC: این ابزار تا اونجایی که من میدونم از دل اوبانتو در اومده و تبدیل به یک ابزار قابل استفاده شده. اما به دلیل مستندات محدود خیلی مورد استفاده قرار نگرفته. شروع توسعه این ابزار به سال ۲۰۰۸ برمیگرده.
      • Docker: سازندگان این ابزار ارائه دهنده سرویس paas بودند که از روند مشابهی برای مدیریت paas خود استفاده می‌کردند و تجربیات خودشون رو در قالب این ابزار ارائه دادند. این ابزار به دلیل سادگی، مستندات خوب و معرفی راه‌حلهای کارا بسیار مقبولیت پیدا کرده. شروع توسعه این ابزار به سال ۲۰۱۳ برمیگرده.
      • libvir lxc: این ابزار هم جزئی از کتابخانه libvirt برای مدیریت تکنولوژی‌های مجازی سازی هست که ابزاری برای مجازی سازی سبک هم ارائه کرده.
  • FreeBSD Jail: در این سیستم عامل از سال ۱۹۹۸ کرنل از ویژگی‌ای به نام jail پشتیبانی میکنه که مجازی سازی سبک رو بوجود میاره. برخلاف لینوکس که چند  ویژگی مجزا کرنل برای مجازی سازی سبک استفاده میشه ویژگی jail در freebsd یک ویژگی یک پارچه برای مدیریت مجازی سازی سبک به حساب میاد ابزارهای سطح بالایی هم برای این مدیریت این ویژگی بوجود اومده که لیست کوتاه اونها در پایین اومده:
  • Solaris Containers: این تکنولوژی در هسته سولاریس از سال ۲۰۰۵ وجود داره و من اطلاع زیادی از اون ندارم
  • sysjail: این تکنولوژی در هسته netbsd و openbsd تا سال ۲۰۰۹ وجود داشته و من اطلاع زیادی از اون ندارم
  • WPARs: یک سیستم خاص منظور برای سیستم عامل AIX هست(سال ۲۰۰۷) و من اطلاع زیادی از اون ندارم
  • HP-UX Containers (SRP): این تکنولوژی مختص HPUX هست(سال ۲۰۰۷) که من باز اطلاع خاصی ازش ندارم
  • Sandboxie: این یه تکنولوژی برای ویندوز هست و من دیدم دوستانی که روی بررسی ویروسها کار میکنن ازش استفاده میکنن.

همونطور که میبیند این سیستم و تکنولوژی‌های و ابزارهای مرتبط با اونها جدید نیستن اما اخیرا دوباره مورد استفاده قرار گرفتن.

همین!

 

اینم یه تجربه پراکنده دیگه!

من سال‌هاست که به لینوکس مهاجرت کردم و روی سیستم اصلیم تنهای یک لینوکس دارم. اما بخاطر موارد متعددی همیشه مجبور بودم یه ماشین مجازی ویندوزی داشته باشم. مهمترین استفاده این ماشین مجازی اجرای office هست. امیدوارم بهم پیشنهاد نکنید که از wine یا play on linux و یا چیزای دیگه برای اجرای office استفاده کنم یا حتی بگید برم سراغ latex به این دلیل که از نظر من نگهداری windows emulator ها سخته و این سیستم ها معمولا یه باگ‌هایی دارن که کار به مشکل بر میخوره، همچنین استفاده از latex امکان collaboration یا همون همکاری روی مستندات رو از بین میبره. از liberoffice هم بخاطر به هم ریختگی متون در نسخه‌های مختلف نمیشه استفاده کرد و اگه تا بحال در دنیای واقعی با آدم‌های مختلف و متفاوت کار کرده باشید میدونید که حاضر نیستن office رو رها کنن.

همچنین واسه موارد خاص نیاز داشتم که، از مجازی سازی استفاده کنم که  امکان اتصال usb به ماشین مجازی رو داشته باشه. به همین خاطر اولین انتخاب من همیشه virtualBox بود. virtualBox مجازی ساز بسیار با کیفیت وخوبیه اما مشکل اساسیش اینه که ما رو تحریم کرده. یعنی نصب کردن و اجراش کار هر کس نیست و معمولا نیاز به جنگولک  بازی‌های بسیاری داره و این از نظر من یعنی سختی نگهداری. من از kvm هم برای حالت‌هایی که نیاز به اتصال سخت افزار خاصی ندارن استفاده می‌کردم اما به علت اینکه virtaulbox همه نیازهای من رو پوشش میداده کم کم دیگه از kvm استفاده نکردم.

تا اینکه چند شب قبل به ذهنم رسید که دوباره یه سری به  kvm بزنم اما این دفعه در کمال ناباوری دیدم که اوضاع خیلی بهتر شده. با تشکر از یه پروژه به اسم spice کلی از مشکلات من حل شده. اول اینکه کارت گرافیکی خاصی نصب میشه و اون کارت امکان تغییر اندازه اتوماتیک رزولوشن صفحه با سایز ویندوزی که اون رو نشون میده، رو فراهم میکنه. دوم اینکه یه چیزی به اسم usb redirector اضافه شده که همون حرکتی که من دوست داشتم یعنی اتصال یه usb رو هم انجام میده نکته قابل توجه هم اینه که virtualbox از usb3 پشتیبانی نمیکنه اما اینجا پشتیبانی انجام میشه. هنوز نتونستم اون ویژگی virtualbox که باهاش یک فولدر رو بین ماشین‌ها به اشتراک میگذاره راه بندازم اما به نظرم همین‌ها کافی که دردسر نصب virtualbox رو بیخیال بشم و برم کاملا سراغ kvm.

همین!

اینم یه تجربه پراکنده دیگه!

من به شخصه این مدت با توجه به ظهور پدیده ای به نام docker شرو ع به خوندن تکنولوژی‌های زیادی کردم که مهمترینشون مجازی سازی سبک یا مجازی سازی در سطح سیستم عامل هست. سعی میکنم در چند قسمت بصورت خیلی خودمونی و تو دل برو (بخوانید user friendly) بنویسم که این تکنولوژی‌های به چه دردی می‌خورن و کجاها استفاده میشن.

بصورت خیلی خلاصه کل کاری که مجازی سازی سبک انجام میده اینه که با استفاده از کرنل موجود سیستم عامل، یه ماشین مجازی سبک با سیستم عامل همخوانواده سیستم عامل ماشین میزبان بالا میاد. در حقیقت عین اینه که شما با استفاده از اون کرنل یه محیط ایزوله شده از سیستم اصلی بوجود بیارید. این موضوع و تکنولوژی‌های مرتبط باهاش جدید نیستن و از سن زیادی برخوردار هستن.

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

فعلا همین!

منتظر قسمت‌های بعدی این نوشته باشید!

پیش نوشت: یکم با خودم درگیرم که چطور باید نوشت. هدفم از نوشتن اینجا ارائه سرنخ‌هایی هست که اگه کسی خواست، بتونه بره و مابقی ماجرا رو پیگیری کنه.

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

خب تکنولوژی‌های مختلفی وجود داره که باهاش مجازی سازی صورت میگیره که خب به طبع من دوست دارم متن باز هاش رو معرفی کنم. خیلی هم هدف معرفی عمیق این تکنولوژی‌ها و سرویس‌ها نیست. هدفم اینه که از نقطه نظر خودم که یه مهندس نرم افزار یا توسعه دهنده هستم ببینم چه تکنولوژی‌هایی وجود داره و چطور میشه از اون برای «بهبود زندگی» یه برنامه نویس استفاده کرد.

لیست این تکنولوژی‌ها از این قرارن

اما نکته قابل توجهی که به نظر من مهمه اینه که از منظر یه شرکت که قراره یه سرویس مجازی سازی ارائه کنه و بفروشه یا اینکه سرویس‌های اصلی شرکتش رو به این زیرساخت‌ها مهاجرت بده مساله انتخاب بین این تکنولوژی‌ها بسیار مهم میشه. اما در سطح توسعه دهنده‌ها خیلی اهمیت خاصی نداره که از کدوم یک از این سیستم‌ها استفاده می‌شه. من تقریبا تمام کارهای خودم رو با استفاده از kvm و virtual box‌ انجام میدم. 

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

  • Redhat Enterprise Virtualization
  • Promox Ve
  • Ubuntu Cloud

البته من سعی کردم بیشتر بگردم اما سیستم‌عامل‌های دیگه‌ای پیدا نکردم اما اگه شما میشناسید سیستمی رو بگید که به این لیست اضافه شه.

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