مجازی سازی و تکنولوژی‌های مرتبط

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

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

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

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

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

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

  • Redhat Enterprise Virtualization
  • Promox Ve
  • Ubuntu Cloud

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

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

چرا گنو/لینوکس را دوست دارم؟ یا چه جوری کل پهنای باند ممکن رو نوش جان کنید

خب به نظر میرسه وبلاگ من رو خاک گرفته! میدونم و تنها دلیلی که دارم الان مینویسم اینه دلم رزبری پی میخواد. البته بگم که من یه دونه پاندابرد دارم ولی دلم یکی از اینا رو هم میخواد.

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

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

کل کاری که من کردم این بود که اولا تعداد آی پی هام توی لینوکسم که اگه اشتباه نکنم یه فدورا ۱۵ بود زیاد کردم. یه برنامه پیدا کردم که بتونیم بین پراکسی‌های مختلف تقسیم بار انجام بدم و خب یه سری بازی wii داشتم که میخواستم از megaupload خدا بیارمز دانلودش کنم. خب سعی میکنم که مرحله به مرحله توضیح بدم که چیکار کردم

اول : تقسیم بار روی سرور ها اولین کاری که کردم با استفاده از یه دستور خوب لینوکس به اینترفیس شبکه ام به تعداد کافی آی پی دادم

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

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

دوم: دانلود بدون نظارت از megaupload چند تا مشکل توی دانلود از megaupload وجود داشت. یکی اینکه مگا آپلود فی…ل…تر بود. خب راه حلش چی میتونست باشه. من گشتم و گشتم تا متوجه شدم که میشه آدرس سایت رو به این صورت هم استفاده کرد whateveryoucouldthinkof.megaupload.com خب این کشف بزرگی بود و خوشبختانه اکثر این آدرسا فیلتر نبود. پس اول مشکل به حول و قوت خود مگا آپلود حل شد. مشکل بعدی این بود که این سایت برای اینکه بگذاره ما ازش دانلود کنیم نیاز به یوزر نیم و پسورد داشت که معنیش این بود که باید یه بروزر بصورت دستی لاگین بشه تا بشه ازش استفاده کرد. راه حل این مساله هم خدا رو شکر ساده بود. با استفاده از گوگل و یکم سرک کشیدن اینور اونر متوجه شدم اگه بتونم کوکی لاگین رو بسازم میتونم به خیلی از برنامه های دانلود که از خط فرمان پشتیبانی میکنن این کوکی رو میخونن و کارشون رو انجام میدن. خط فرمانی که من برای لاگین کردن به مگا آپلود پیدا کردم این بود

که یه فایل کوکی به نام cook میساخت. حالا میموند اینکه من از یه برنامه با تعداد کانکشن زیاد و بصورت همزمان فایلها رو دانلود کنم. اونم به کمک دانلودر قوی aria2 حل شد. با استفاده از این دانلودر میتونستم لیستی از فایلها رو بهش بدم و بگم به چند تا کانکشن همزمان اونها رو دانلود کن. دستور دانلودم هم این بود

خب بعدش واسه اینکه کل فایلها رو یکجا بتونم دانلود کنم از یه شل اسکریپت دیگه استفاده کردم که اونم اینجا میارمش

خب حالا بریم سراغ مرحله بعد.

مرحله سوم : استخراج اتوماتیک لیست فایلها از متن یک صفحه وب بسیاری از جزئیات این بخش رو یادم نمیاد و خب خیلی هاش رو هم دستی انجام دادم. اما کلیت این بود که متن‌های تکرار شونده (تگ های html و …) توی لیست رو پیدا کردم و حذف کردم. بعدش یه پارسر با سی پلاس پلاس نوشتم‌(اون زمان به awk و sed و …) مسلط نبودم و فایلها رو استخراج کردم که توی هر کردوم یه چیری شببه این بود

همین به کسی پیشنهاد نمیکنم که این کار رو انجام بده اما من انجام دادم و لذتش رو بردم. یادم رفت بگم من اون زمان میتونستم توی یک شب تا صبح (چون در طول روز نامردی بود استفاده از این تریک) میتونستم نزدیک به ۸۰ گیگ از اینترنت دانلود کنم و بخاطر این موفقیت به خودم و لینوکسم میبالم!