אז אחת ולתמיד – מה יותר טוב, VMware, Docker או VirtualBox?

אז אחת ולתמיד – מה יותר טוב, VMware, Docker או VirtualBox?

Print Friendly, PDF & Email

אנשים שעבדו איתי בעבודתי הקודמת היו אומרים עליי שאחת המגרעות הרציניות שלי היא שלא ניתן להוציא ממני תשובה פשוטה של כן או לא… זה בדרך כלל הלך ככה:

– תגיד, מה יותר טוב, X או Y? אבל בחייך, אין לי זמן – אז תוכל במילה אחת, פשוט כן או לא…

– לא.

– טוב, טוב אז בשתי מילים….

– כן ולא…

– ???!!….

 

את השאלה הזו בניסוחים שונים שמעתי די הרבה… אז אני אנסה לעשות קצת סדר בג'ונגל הזה של הוירטואליזציה.

וירטואליזציה היא למעשה תהליך של הפשטה (אבסטראקציה). ישנה וירטואליציה של חומרה (Hardware virtualization) אשר למעשה גורמת למחשב לעבוד ללא תלות בחומרה האמיתית שעליה הוא מותקן, על מנת לבצע זאת מייצרים עבור מערכת ההפעלה את כל הקלטים הדרושים על מנת שהיא תניח שכרטיס המסך שלה הוא כזה וכזה, שכרטיס הקול שלה כזה וכזה וכו' וכו'. הרכיב המבצע וירטואליזציה מסוג כזה מכונה Hypervisor. רובינו לדעתי, מכירים את המושג מחיי היום-יום:  נניח למשל שהבן שלי רוצה טלפון חדש כי לטענתו הטלפון הנוכחי שלו (שנקנה לפני שבוע…) איטי מידי, זה מציב אותי בתור הורה אחראי אל מול שתי ברירות: להחליף לו טלפון או או להחליף… בן. בעזרת וירטואליזציה מתאימה אני יכול לשכנע את הבן שלי להאמין שהטלפון שלו הוא בדיוק מה שהוא חלם עליו וכך להשיג את שני היעדים…

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

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

וירטואליזציה שמבוצעת ישירות על החומרה היא וירטואליזציה של מחשבים וירטואליים אשר השרת אשר מארח את אותם מחשבים וירטואליים מריץ מערכת הפעלה ייעודית מצומצמת מאד אשר מאפשרת לו לבצע אך ורק את הוירטואליזציה. וירטואליזציה כזו תהיה כמובן מהירה ויעילה בהרבה ולכן משמשת בעיקר שרתים אשר מעוניינים להריץ עליהם שרתים וירטואליים. בנוסף, תוכנות מסוג זה מאפשרות לקבוע במדוייק ולנטר במדויק את הקצאת המשאבים לכל מחשב וירטואלי, קרי כמות מעבדים, כמות זיכרון (זיכרון מסך וזיכרון רגיל), שטחי דיסק ובחלק מהתוכנות והגרסאות גם את רוחב הפס המוקצה לה לתקשורת ומאפיינים נוספים כגון תיעדוף במקרה של עומס. דוגמא טובה לתוכנת שרת שכזו היא VMware ESXi או Microsoft Hyper-V או KVM.

וירטואליזציה שמבוצעת על מערכת הפעלה כלשהי היא בהחלט איטית יותר ויעילה פחות אבל מסוגלת במרבית המקרים ליצור אינטראקציה טובה מאד עם המחשב המארח ולכן מתאימה מאד כאשר מעוניינים להפעיל שרתים וירטואליים על תחנות עבודה. למשל, נניח שיש לך אפליקציה מבוססת Web שלא יודעת לרוץ על Windows אבל כל מה שצריך כדי להשתמש בה הוא דפדפן ואתה מעוניין להפעיל את האפליקציה הזו על מחשב נייד כדי לעבוד בה גם מחוץ למשרד, במקרה כזה תוכל להתקין שרת וירטואלי על מחשב ה-Windows שלך, להתקין בו את תוכנת השרת ומערכת ההפעלה הנחוצה לה ואז לגלוש מתוך דפדפן על המחשב הנייד שלך מתוך ה-Windows למחשב הוירטואלי שיצרת וכך להפעיל את התוכנה גם מחוץ למשרד. דוגמא נוספת: נניח שאתה מעוניין להריץ תוכנה שמסוגלת לרוץ רק על מערכת הפעלה אחרת, נגיד שעל מחשבך רצה תוכנת Windows 10 אבל התוכנה הזו שבה אתה מעוניין יודעת לרוץ כהלכה רק על Windows 98 תוכל להקים מחשב וירטואלי על מחשבך אשר יריץ את מערכת ההפעלה Windows 98 ואת התוכנה המדוברת ולמעשה, למשתמש הקצה, לא ייראה כאילו הוא משתמש במחשב אחר, יהיה לו אייקון על שולחן העבודה אשר יריץ את התוכנה המדוברת בחלון בדיוק כפי שהיה רגיל אבל למעשה מאחורי הקלעים התוכנה הזו תרוץ במחשב וירטואלי עם מערכת הפעלה של Windows 98 ויהיה ניתן לבצע (למשל) העתקה והדבקה של תכנים ממנה לתוכנות אחרות שרצות על המחשב המארח ואל או מאת מחשבים וירטואליים אחרים הרצים עליו. דוגמא טובה לתוכנת וירטואליזציה כזו תהיה VirtualBox אשר מאפשרת תכונות מתקדמות של אינטגרציה מלאה עם המחשב המארח.

אז מה עם Docker? טוב תודה… 🙂
Docker היא תוכנה שמטרתה אחרת… פרויקט Docker הוקם (כפי שניתן לראות גם בלוגו של הפרויקט) להקל על הפצתה של תוכנה למערכות Linux על ידי יצירת Container שיכיל את כל מה שהתוכנה זקוקה לו על מנת לרוץ. באופן כזה ניתן להתקין בקלות רבה תוכנות שבאופן רגיל היה צורך להתקין רכיבי תשתית רבים עבורן פשוט על ידי לחיצת כפתור או הקלדת פקודה פשוטה. למעשה Docker לא מבצעת וירטואליזציה של מחשב או תוכנה אלא רק אורזת את התוכנה כך שיהיה ניתן להפעיל אותה ללא תלות במה שיש במחשב היעד ולכן לא מסוגלת לקבוע את ניהול המשאבים של התוכנות השונות ואילו האינטראקציה תהיה חלקית, כלומר – מערכת הקבצים של תוכנה שרצה ב-Docker image תהיה שונה מזו של השרת המארח אבל ישנם פתרונות על מנת ליצור סנכרון כלשהו ביניהן.

 

מקווה שהצלחתי לעשות קצת סדר בג'ונגל של נושא הוירטואליזציה,

נשתמע בפעם הבאה…

 

השאר תגובה