مجازی سازی سرور Server Virtualization



سرورها یا همان ماشین هایی كه وظیفه میزبانی فایل ها و نرم افزارهای كاربردی را بر روی شبكه های كامپیوتری برعهده دارند، باید بسیارقدرتمند باشند. بعضی از این سیستم ها به واحدهای پردازنده مركزی (cpu)  با هسته های پردازنده ی متعددی مجهز شده اند كه توانایی اجرای آسان وظایف پیچیده را برای آن ها فراهم می كنند.
مدیران شبكه های كامپیوتری به طور معمول هر سرور را به یك نرم افزار كاربردی و یا وظیفه ویژه اختصاص می دهند. بسیاری از این وظایف به خوبی با بقیه به همزیستی نمی پردازند زیرا هر كدام از آنها به ماشین اختصاصی خودشان نیاز دارند. وجود یك نرم افزار كاربردی بر روی هر سرور، باعث می شود كه ردیابی مشكلات بسیار آسان تر باشد. این یك روش آسان برای ساده و مؤثر كردن یك شبكه كامپیوتری از نقطه نظر فنی است.

با این حال، شیوه مذكور مشكلاتی را نیز به همراه خواهد داشت. مشكل نخست این است كه در شیوه مذكور قدرت پردازش كامپیوترهای سرور مدرن به طور كامل مورد استفاده نمی گیرند. اكثر سرورها فقط كسر كوچكی از كل توانایی پردازش خود را بكار می گیرند. مشكل دوم این است كه وقتی یك شبكه كامپیوتری بزرگتر و پیچیده ترمی شود، سرورها به تدریج فضای فیزیكی بسیار زیادی را اشغال می كنند. یك مركز داده در این شرایط می تواند با رك ها (Racks) سرور انباشته شود كه مصرف برق و تولید گرمای بسیار زیادی دارند.

مجازی سازی سرور (Server Virtualization) تلاش می كند تا هر دو مشكل را با یك حركت قاطع برطرف سازد. با استفاده از نرم افزارهایی كه از طراحی اختصاصی برخوردارند، یك مدیر شبكه می تواند یك سرور فیزیكی را به چند ماشین مجازی تبدیل كند. هر سرور مجازی، شبیه به یك ابزار فیزیكی منحصر به فرد عمل می كند و می تواند سیستم عامل خودش را اجرا كند. به طور نظری، شما می توانید سرورهای مجازی كافی را برای استفاده از تمام قدرت پردازش یك ماشین ایجاد كنید، البته انجام این كار همیشه بهترین ایده نخواهد بود.

مجازی سازی از یك مفهوم جدید نمی آید. دانشمندان علوم كامپیوتر، ایجاد ماشین های مجازی بر روی سوپر كامپیوترها را از چند دهه پیش آغاز كرده اند. با این حال، تنها چند سال است كه مجازی سازی به یك فرآیند امكان پذیر برای سرورها تبدیل شده است. در دنیای فناوری اطلاعات (IT)، مجازی سازی سرور به یك عنوان داغ تبدیل شده است. البته مجازی سازی سرور هنوز یك فناوری جوان است و شركت های مختلف روش های متفاوتی را برای آن پیشنهاد میكنند.

تا همین اواخر، تنها روش ممكن برای ایجاد یك سرور مجازی این بود كه نرم افزار خاصی را با هدف وادار كردن پردازنده سرور به تامین قدرت پردازش لازم برای چند ماشین مجازی، طراحی كنیم. امروزه شركت های تولیدكننده پردازنده نظیر اینتل و AMD، محصولاتی را ارائه می كنند كه از قابلیت پشتیبانی توكار سرورهای مجازی برخوردارند. با این حال، سخت افزار عملا سرورهای مجازی را ایجاد نمی كند و مهندسان شبكه هنوز برای ایجاد آنها به نرم افزار مناسب  نیاز دارند.

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

مجازی سازی سرور، روشی را در اختیار شركت ها قرار می دهد تا افزونگی (Redundancy) را بدون خرید سخت افزار اضافی تجربه كنند. افزونگی، به اجرای یك نرم افزار كاربردی واحد بر روی چند سرور اشاره دارد. این یك پارامتر ایمنی است زیرا اگر یك سرور به هر دلیل دچار خرابی شود، سرور دیگری كه همان نرم افزار كاربردی را اجرا می كند می تواند جای آن را بگیرد. به این ترتیب، وقوع هرگونه وقفه در سرویس به حداقل خواهد رسید.

ایجاد دو سرور مجازی كه نرم افزار كاربردی مشابهی را اجرا می كنند بر روی یك سرور فیزیكی واحد به هیچ وجه منطقی نخواهد بود. در این شرایط اگر سرور فیزیكی دچار نقص فنی شود. هر دو سرور مجازی نیز از كار می افتند. در اكثر موارد، مدیران شبكه سرورهای مجازی افزونه (Redundant) را بر روی ماشین های فیزیكی متفاوت ایجاد می كنند.

سرورهای مجازی، سیستم های مستقل و تفكیك شده ای را در اختیار برنامه نویسان قرار می دهند كه می توانند نرم افزارهای كاربردی و یا سیستم های عامل جدید را در آنها آزمایش كنند. به جای خرید یك ماشین فیزیكی اختصاصی، مدیر شبكه می تواند یك سرور مجازی را بر روی یك ماشین موجود ایجاد كند. به این دلیل كه هر سرور مجازی از تمام سرورهای دیگر مستقل است، برنامه نویسان می توانند نرم افزار مورد نظر خود را بدون نگرانی در مورد تاثیر آن ها بر سایر نرم افزارهای كاربردی اجرا كنند.

سخت افزار سرور در نهایت كهنه و ازكار افتاده خواهد شد و انتقال از یك سیستم به سیستم دیگر نیز می تواند مشكل ساز باشد. برای ادامه ارائه سرویس های تامین شده توسط این سیستم های قدیمی (كه گاهی اوقات تحت عنوان سیستم های موروثی از آنها نام برده می شود)، یك مدیر شبكه می تواند یك نسخه مجازی از سخت افزار را بر روی سرورهای مدرن ایجاد كند. از نقطه نظر نرم افزار كاربردی، هیچ تغییری به وجود نیامده است. برنامه طوری به كار خود ادامه خواهد داد درست مثل اینكه هنوز بر روی سخت افزار قدیمی اجرا می شود.
 
این شرایط می تواند زمان كافی برای انتقال به رویه های جدید را برای شركت فراهم كند، بدون آنكه درباره خرابی های سخت افزاری نگرانی داشته باشد، به خصوص اگر شركت تولیدكننده سخت افزار موروثی دیگر وجود نداشته باشد و یا نتواند تجهیزات معیوب را تعمیر كند.

“مهاجرت” (Migration) یك گرایش تازه در مجازی سازی سرور به شمار می آید. مهاجرت به انتقال یك محیط سرور از یك مكان به مكان دیگری اشاره دارد. با سخت افزار و نرم افزار مناسب، امكان انتقال یك سرور مجازی از یك ماشین فیزیكی در شبكه به ماشین فیزیكی دیگری وجود خواهد داشت. در ابتدا، این فرآیند تنها در شرایطی عملی بود كه هر دو ماشین فیزیكی از سخت افزار، سیستم عامل و پردازنده یكسانی استفاده می كردند. با این حال، اكنون امكان مهاجرت سرورهای مجازی از یك ماشین فیزیكی به یك ماشین فیزیكی دیگر وجود دارد، حتی اگر این دو ماشین دارای پردازنده های متفاوتی باشند، البته تنها در صورتی كه پردازنده های آنها محصول یك تولیدكننده واحد باشند.

در حالی كه مهاجرت یك سرورمجازی از یك ماشین فیزیكی به یك ماشین فیزیكی دیگر موضوع نسبتا جدیدی به شمار می آید، اما فرآیند تبدیل یك سرور فیزیكی به یك سرورمجازی نیز مهاجرت نامیده می شود. به طور خاص، این فرآیند تحت عنوان مهاجرت P2V (Physical to Virtual) شناخته می شود.

انواع مجازی سازی سرور:
سه روش مختلف برای ایجاد سرورهای مجازی وجود دارند: مجازی سازی كامل، مجازی سازی ناقص (Para- Virtualization)  و مجازی سازی سطح سیستم عامل. هر سه روش مذكور دارای چند خصوصیت مشترك هستند. سرور فیزیكی تحت عنوان میزبان (Host) و سرورهای مجازی تحت عنوان مهمان (Guest) شناخته می شوند. سرورهای مجازی درست مثل ماشین های فیزیكی رفتار می كنند. هر سیستم از یك روش متفاوت برای تخصیص منابع فیزیكی به نیازهای سرور مجازی استفاده می كند.

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

Hypervisor  بر منابع سرور فیزیكی نظارت می كند. هنگام اجرای نرم افزارهای كاربردی بر روی سرورهای مجازی، Hypervisor منابع را از ماشین فیزیكی به سرور مجازی مربوطه “رله” می كند. Hypervisorها هم نیازهای پردازشی خودشان را دارند، به این معنی كه سرور فیزیكی باید مقداری از منابع و قدرت پردازش خود را برای اجرای نرم افزار كاربردی  Hypervisor رزو كند. این موضوع می تواند بر عملكرد كلی سرور تاثیر گذاشته و سرعت نرم افزارهای كاربردی را كاهش دهد.

روش مجازی سازی ناقص، تا حدودی متفاوت است. بر خلاف روش مجازی سازی كامل، سرورهای مهمان در یك سیستم مجازی سازی ناقص از وجود یكدیگر اطلاع دارند. یك نرم افزار Hypervisor در ساختار مجازی سازی ناقص به قدرت پردازش زیادی برای مدیریت سیستم های عامل مهمان احتیاج ندارد، زیرا هر سیستم عامل می داند كه سایر سیستم های عامل از سرور فیزیكی چه مطالباتی دارند. كل سیستم در مجموع به صورت یك واحد “به هم پیوسته” (Cohesive) كار می كند.

در روش مجازی سازی سطح سیستم عامل، اساسا از یك  Hypervisor استفاده نمی شوند، بلكه قابلیت مجازی سازی در واقع بخشی از سیستم عامل میزبان به شمار می آید كه تمام توابع یك Hypervisor كاملا مجازی سازی شده را انجام می دهد. بزرگترین محدودیت روش مذكور در این است تمام سرورهای مهمان باید سیستم عامل مشابهی را اجرا كنند. هر سرور مجازی، مستقل از تمام سرورهای مجازی دیگر خواهد ماند، اما شما نمی توانید بر روی آنها از سیستم های عامل متفاوتی استفاده كنید. به خاطر اینكه تمام سیستم های عامل مهمان باید یكسان باشند، این مجموعه با عنوان یك محیط “همگن” (Homogeneous) شناخته می شود.

كدام شیوه بهترین است؟
جواب صحیح تا حدود زیادی به نیازهای مدیر شبكه بستگی دارد. اگر همه سرورهای فیزیكی مدیر شبكه در حال اجرای یك سیستم عامل واحد باشند، روش مجازی سازی سطح سیستم عامل می تواند به بهترین گزینه تبدیل شود. پیكربندی های سطح سیستم عامل معمولا سریعتر و كارآمدتر از سایر روش ها هستند. در عین حال، اگر سرورهای مورد استفاده مدیر شبكه، سیستم های عامل متفاوتی را اجرا می كنند، روش مجازی سازی ناقص گزینه بهتری خواهد بود. یك نقیصه احتمالی سیستم مجازی سازی ناقص، پشتیبانی است. در واقع این روش نسبتا جدید بوده و تنها تعداد اندكی از شركت ها نرم افزار مجازی سازی ناقص را ارائه می كنند. بیشتر شركت ها از مجازی سازی كامل پشتیبانی می كنند، اما توجه به مجازی سازی ناقص رو به افزایش است و به احتمال زیاد پس از مدتی جایگزین مجازی سازی كامل خواهد شد.

جمع بندی:
فواید مجازی سازی سرور می تواند تا حدی وسوسه كننده باشد و باعث شود به آسانی فراموش كنیم كه این روش نیز محدودیت های خاص خود را دارد. برای یك مدیر شبكه بسیار مهم است كه پیش از تلاش برای مهندسی یك راه حل، به تحقیق درباره مجازی سازی سرور و همچنین معماری و نیازهای شبكه خود بپردازد.

برای سرورهایی كه به نرم افزارهای كاربردی با تقاضای سنگین برای قدرت پردازنده اختصاص یافته اند، مجازی سازی به هیچ وجه یك گزینه مناسب به شمار نمی آید، زیرا مجازی سازی اساسا قدرت پردازش سرور را بین سرورهای مجازی تقسیم می كند. وقتی قدرت پردازش سرور نتواند از عهده برآورده كردن مطالبات نرم افزار كاربردی برآید، همه چیز كند خواهد شد. بنابراین كارهایی كه تكمیل آنها نباید مدت زیادی طول بكشد ، می توانند ساعت ها ادامه پیدا كنند. بدتر اینكه، اگر سرور نتواند با درخواست های پردازشی انطباق پیدا كند، امكان از كار افتادن (Crash) سیستم وجود دارد. مدیران شبكه پیش از تقسیم یك سرور فیزیكی به چند ماشین مجازی، باید دقیقا بر میزان به كارگیری CPU نظارت و توجه داشته باشند.

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

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

اگر یك سرور فیزیكی نیازمند نگهداری باشد، انتقال سرورهای مجازی به ماشین های دیگر می تواند مدت زمان از كار افتادگی (Downtime) نرم افزار كاربردی را كاهش دهد. اگر امكان مهاجرت وجود نداشته باشد، تمام نرم افزارهای كاربردیی كه بر روی سرورهای مجازی میزبانی شده در سرور فیزیكی اجرا می شوند، در طول فرآیند نگهداری غیرقابل دسترسی خواهند بود.

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

از آنجایی كه شبكه ها از سرورهای خود در شرایطی نزدیك تر به پتانسیل كامل آنها استفاده می كنند، می توانیم شاهد شبكه های كامپیوتری بزرگ تر و كارآمدتری باشیم. اغراق آمیز نیست كه بگوییم سرورهای مجازی می توانند به یك تحول كامل در صنعت رایانش (Computhing) تبدیل شوند، تنها باید منتظر ماند و دید!