וירטואליזציה

[300px|ממוזער|[VirtualBox]]
**וִירְטוּאָלִיזַצְיָה** היא הפעלת תוכנה באופן בלתי תלוי בתשתיות המחשב, באמצעות דימוי של תשתיות אמיתיות.

## עקרונות הווירטואליזציה
בדרך כלל מתייחס המושג לדימוי תשתיות חומרה אמיתיות באמצעות הקצאת משאבי חומרה כגון (מעבדים, זיכרון ודיסק קשיח) מתוך תשתית חומרה רחבה יותר. כך למשל, ניתן לחלק שרת למספר מחיצות או מספר שרתים וירטואליים כשבכל אחד מהם מתבצע מופע של מערכת הפעלה. דוגמה נוספת לווירטואליזציה מתייחסת ליחידות אחסון. בקר וכונני הדיסקים המסורתיים המותאמים לשרתים מסוימים ולמערכות הפעלה מסוימות, מוחלפים על ידי שרתי דיסקים התומכים בו זמנית במספר מערכות ומופעי מערכות. שרת הדיסקים מחלק את משאבי האחסון המנוהלים על ידו בין המערכות ומדמה עבור כל אחת מהן דיסקים ייעודיים ובקרים ייעודיים. במקרים רבים מתבצעת וירטואליזציה של מכלול רכיבי חומרה, למשל: בהרצת מספר מופעים של מערכות הפעלה על שרת פיזי מתבצעת וירטואליזציה של מעבד מרכזי, זיכרון, יחידות אחסון כגון: דיסקים ורכיבים נוספים.

הסבר אחר לווירטואליזציה הוא: וירטואליזציה היא שכבת הפשטה (Abstraction Layer) המנתקת את הצימוד בין החומרה הפיזית לבין מערכת ההפעלה או תשתיות תוכנה בסיסיות אחרות.

היחס בין המשאבים הפיזיים למערכות הווירטואליות הוא רבים לרבים (M:M), כלומר: אין מדובר רק בחלוקה של משאב פיזי אחד למספר מערכות וירטואליות, אלא ייתכן גם שמספר משאבים פיזיים (למשל: מספר שרתים) ירכיבו מכונה וירטואלית אחת. ייתכן למשל שכל השרתים במרכז מחשבים מרכיבים מספר מכונות וירטואליות ללא קשר הכרחי לגבולות הפיזיים של כל שרת. ייתכן גם שמספר מרכזי מחשבים באתרים פיזיים שונים ומרוחקים זה מזה מרכיבים את קבוצת המכונות הווירטואליות.

## היסטוריה
להלן מספר ציוני דרך בהתפתחות הווירטואליזציה של המחשוב:
* מערכת הפעלה VM - מערכת הפעלה וירטואלית במחשבים מרכזיים של IBM. לפירוט ראו מכונה וירטואלית.
* זיכרון וירטואלי - מנגנוני מערכת הפעלה המאפשרים ליחידות עבודה לדמות זיכרון מרכזי המוקצה לה ללא צמידות להקצאות האמיתיות של זיכרון מרכזי ולמפרטי הגודל האמיתיים של הזיכרון הפיזי האמיתי. סוף שנות ה-70.
* חלוקת מחשב מרכזי למחיצות לוגיות באמצעות מנגנוני מיקרוקוד - סוף שנות ה-80.
* שימוש בדיסקים בתפיסת RAID וירטואליזציה של דיסק פיזי באמצעות מערך של דיסקים קטנים - החל מסוף שנות ה-80.
* Solid State Disk דיסק אלקטרוני בעל נפח קטן ומהירות גבוהה ה"מתחזה" לדיסק מכני רגיל - סוף שנות ה-80.
* שרתי דיסקים הטרוגניים - מחלקים בקר ושטחי דיסק לבקרים ודיסקים לוגיים למערכות הפעלה שונות ולסביבות חומרה שונות
* שפת Java ו-Java Virtual Machine המאפשרת אי-תלות בין האפליקציה ומערכת ההפעלה בה היא מתבצעת החל משנות ה-90 המאוחרות.
* וירטואליזציה של מערכות הפעלה בסביבות של מערכות הפעלה מבוזרות UNIX, Windows ובמועד מאוחר יותר גם לינוקס. וירטואליזציה זו מאפשרת איחוד של שרתים כלומר: הפעלת מספר מופעים של מערכת הפעלה על שרת פיזי אחד. לפירוט ראו VMware ו-Xen.
* מחשוב סריגי - וירטואליזציה של מיקום השרתים או מחשבי הקצה בהם מבוצעות עבודות מחשוב או חלקים מהן
* מחשב מרכזי עם תמיכה מובנית בחלוקת משאבים בין מופעים של מערכות הפעלה שונות כולל לינוקס כולל דגמי חומרה ייעודיים המאפשרים הרצת מספר רב של מופעי לינוקס תוך שימוש במיקרוקוד בלבד. הדור הראשון של מחשוב וירטואלי התבסס על חלוקה של מחשב למחיצות וירטואליות. בדורות מתקדמים התווספו גם מרכיבי ניהול.

## מושגי יסוד
* מכונה וירטואלית - יחידה בסיסית של תוכנה הכוללת מערכת הפעלה ויישומים המתבצעים תחתיה.
* Hypervisor - מערכת הפעלה או מערכת מיקרוקוד הצמודה למשאבים הפיזיים האמיתיים בשרת (לא וירטואלית) המנהלת את המכונות הווירטואליות המתבצעות על השרת. מרכיבים חשובים ב-Hypervisor:
# מרכיב המטפל במשאבים פיזיים ומייחס אותם למכונות וירטואליות
# מערכת קבצים ברמת ה-Hypervisor
# מרכיבים ניהוליים: ניהול קונפיגורציה, ניהול גיבויים, ממשק משתמש לקונסול מרכזי משותף למכונות וירטואליות
# מרכיב להעברה דינמית של מכונה וירטואלית משרת אחד למשנהו.
אף על פי שבמקרים רבים וירטואליזציה מתייחסת לשרתים, וירטואליזציה מיושמת גם בתחנת עבודה של משתמש ומאפשרת לו התחברות בו זמנית מאותה תחנה פיזית למספר שרתים ומספר מערכות.

ניתן לבצע וירטואליזציה גם ברמת אפליקציה ולא רק ברמת מערכת ההפעלה למשל בהפעלת Java Virtual Machine. בווירטואליזציה של אפליקציה לכאורה האפליקציה מותקנת תחת מערכת ההפעלה בה היא מתבצעת אף על פי שבפועל היא עשויה להיות מותקנת תחת מופע אחר של מערכת ההפעלה או תחת מערכת הפעלה אחרת ומנגנוני וירטואליזציה יאפשרו הפעלתה.

## הצורך בווירטואליזציה
מערכות המחשוב נעשות מורכבות יותר וכתוצאה מכך יש מספר רב של שרתים ומספר רב של יישומים המופעלים על ידי אותו משתמש. וירטואליזציה מאפשרת ניהול גמיש וקל יחסית של משאבים:
*גמישות וזריזות - Agility.
* חיסכון במשאבי מחשב - כך למשל יישומים המתבצעים בשרתי Windows ושרתי UNIX מנצלים במקרים רבים רק כ 20% עד 30% ממשאבי המעבד של השרת. וירטואליזציה מאפשרת ניצול גבוה יותר של משאבי המעבד של השרת באמצעות הגדרת מספר מופעים של מערכת הפעלה על שרת פיזי אחד.
* גמישות בניצול משאבי מחשב - ניתן להגדיל ולהקטין באופן דינמי את כמות המשאבים האמיתיים המוקצית לשרת וירטואלי. יכולת זו מאפשרת למשל הגדלת כמות המשאבים המוקצית ליישום מקוון אליו מתחברים משתמשים בשעות הבוקר והעברתם לשרת וירטואלי אחר המבצע גיבויים בשעות הערב.
* ניהול קל ופשוט יותר כתוצאה מהקטנת כמות יחידות החומרה הפיזיות בארגון. כך למשל וירטואליזציה של דיסקים עשויה לחסוך ניהול יחידות דיסקים פיזיות שונות במערכות הפעלה שונות בארגון ומאפשרת ריכוזן בשרת דיסקים אחד משולב.
* ביצועים ו-QOS - ההפרדה בין יישומים למכונות וירטואליות שונות, מאפשרת הקטנה משמעותית בתלות בין עבודות מבחינת צריכת משאבי מחשב. באמצעות וירטואליזציה ניתן להבטיח לעבודות בעלות העדיפות הגבוהה את משאבי המחשב הנדרשים על מנת לשמור על ביצועים טובים ויציבים ורמת שירות נאותה.
* קלות הגדרת סביבות ניסוי למערכות - מאפשר ביצוע יעיל ומלא יותר של ניסויים ובדיקות.
* אפשרות לנייד עבודות לסביבות מחשוב אחרות ללא פגיעה ברציפות העבודה.
* חיסכון באנרגיה - משתלב עם המגמה של מרכזי מחשבים "ירוקים" שפוגעים פחות בסביבה.
* ביצוע קל ונוח של תוכנית התאוששות מאסון (DRP), משום שהיא נעשית ברמה הווירטואלית ולא באמצעות מרכז מחשבים ייעודי להתאוששות.
* תחזוקה והתקנות ללא הפסקת שימוש במערכות.
* שימוש אפשרי בציוד זול וישן יחסית כשנעשית לו וירטואליזציה של ציוד חדש ויקר יותר.

## בעיות ואתגרים בווירטואליזציה
* קלות בהגדרת מכונות וירטואליות, עשויה לגרום לבזבוז משאבי מחשב אם לא תהיה מדיניות ולא יתבצע Governance.
* עלולות להישאר מכונות וירטואליות שמוגדרות ולא נעשה בהן שימוש.
* קושי בניהול.
* תקורות.

## וירטואליזציה ו-SOA
המשותף בין ארכיטקטורה מוכוונת שירותים (SOA) לבין וירטואליזציה הוא הסתרת המימוש הפיזי באמצעות הפשטה (Abstraction). בווירטואליזציה מוסתרות היחידות הפיזיות (שרת, זיכרון דיסק וכיוצא בזה) וב-SOA מוסתר המימוש של השירותים. השונה ביניהם הוא שווירטואליזציה היא בעיקרה תפעולית בעוד ש-SOA ממוקדת בארכיטקטורה. נקודת המפגש היא בארכיטקטורת ריצה (Deployment Architecture). במילים אחרות חלק קטן מהשירותים בתפיסת SOA הם שירותי תשתית ולא שירותים אפליקטיביים. שירותים אלה ממומשים במקרים רבים תוך שימוש במנגנוני וירטואליזציה.

## ראו גם
* Microsoft Hyper-V
* מכונה וירטואלית
* VMware
* Xen
* Java Virtual Machine
* Cloud Computing
* מחשוב ענן
* וירטואליזציית אחסון
*Singularity (תוכנה)

## קישורים חיצוניים

*