הבאג הקריטי במעבדי אינטל

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

נכון להרגע, אין נתונים רשמיים עד לתחילת שבוע הבא ככל הנראה – אבל ממה שכן ידוע, מדובר על באג במעבדי אינטל מהעשור האחרון.

בשביל להסביר לגבי הבאג, נתחיל בדברים בסיסיים: אפליקציות בד"כ רצות במצב שנקרא User Mode ויש מצב שהוא Protected Mode שאפליקציות רגילות לא מגיעות אליו למעט כשצריך גישה לציודים כמו דיסק, רשת, כרטיס גרפי ועוד. במצבים כאלו, בד"כ האפליקציה פונה למערכת הפעלה, מערכת ההפעלה פונה ל-Protected Mode, מבוצעים הדברים שצריך להתבצע ומיד זה חוזר ל-User Mode. זו הסיבה, אגב, שבמקרים לא מעטים על מנת לעדכן קושחה, צריך לעשות Boot ל-DOS כי מערכת ההפעלה חוסמת אפשרות גישה ישירה לציוד למעט במקרים מסויימים המורשים ע"י היצרן.

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

הבאג עצמו – הוא באג חומרה, כלומר תיקון דרך מיקרו-קוד לא אפשרי במקרים כאלו והוא משפיע על מעבדים לשרתים, דסקטופ, מחשבים ניידים וגם Appliances. בקיצור – כל מה שיש בו מעבד אינטל מהעשור האחרון בערך, חשוף – ובתרגום לאנשי IT: גשו לחווה שלכם, תסתכלו על השרתים שלכם, 90% מהם – חשופים.

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

איזה מחיר? בביצועים. תלוי מה האפליקציות שאתם מריצים ולאיזה ציוד הם ניגשים – הביצועים ירדו בין 3 ל-30 אחוז אחרי התקנת הטלאי (הטלאי יהיה חובה בכל מערכות ההפעלה). במילים אחרות – אם אתם לדוגמא מריצים מערכת מורכבת נניח על 10 מכונות VM, אחרי התקנת הטלאי ועל מנת לקבל את אותם ביצועים – תצטרכו בין VM ל-3 VM נוספים. ישנם דברים שאינם מושפעים והם יותר קשורים למכונות דסקטופ או מחשבים ניידים כמו משחקים, קידוד וידאו ועוד מספר דברים. הפרטים יתבהרו יותר בשבוע הבא, אבל הנה דוגמאת גרף של מעבד דסקטופ חדש (משפחת CofeeLake, מעבד i7 8700K) בהשוואה למעבד i7 מלפני 2 דורות: ה-i7 6800K (תודה לאתר phoronix.com על הגרפים)

הפס הסגול מציין מצב לפני הטמעת טלאי במערכות Linux והפס הירוק – אחרי. הבדיקה היא גישת יצירה/כתיבה/קריאה ל-4000 קבצים שנמצאים במכונה, בתוך 32 תיקיות, כל קובץ בגודל 1 מגהבייט. כפי שאתם יכולים לראות – לאחר ההטמעה כמו שניתן לראות במעבד החדש – המהירות צונחת חזק מטה. אגב, הגרף נוצר עם בדיקות על Linux אולם גם אם תשנו מערכת הפעלה, התמונה תהיה פחות או יותר אותו דבר.

אז מה ניתן לעשות לגבי איבוד אותם אחוזים יקרים מבחינת ביצועים? לא הרבה כרגע. אינטל לא יכולה לשחרר מחדש מעבדים ישנים שהם הפסיקו לייצר + תיקון ולא ניתן להחליף מעבד ישן במעבד עכשוי ללא החלפת לוח אם, זכרונות ודברים אחרים. לעומת זאת, אם קניתם מחשבים או שרתים עם מעבדים חדשים מהחודשים האחרונים, סביר להניח שאינטל תוכל להחליף ללא תשלום את המעבדים שברשותכם. האם יש מקום לאופטימיות? אני מאמין שכן – ברגע שהטלאים יצאו באופן רשמי, חברות התוכנה שהאפליקציות שלהן יהיו יותר איטיות אחרי התיקון – יוציאו גירסאות עם "מעקף" כלשהו על מנת לקבל את הביצועים בחזרה, אם כי זה יקח זמן.

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

קצת על בנקים, מודרניזציה ותשובות למר איל מוסקל

ב-דה מרקר התפרסם מאמר על חברת טאטא שגיירה מערכת שטאטא כתבו עבור בנקים אחרים – לבנקאות ישראלית "בזמן שיא". במהלך המאמר מר מוסקל מדבר על כך שהבנקים צריכים לזרוק את המערכות הישנות, הוא מדבר על COBOL כמה שהיא ישנה, על כך שהמפתחים הם מבוגרים והבנקים יכנסו לצרות כי אין דור המשך וכו'.

כעסק, "חץ ביז" נותן שרותים לבנק מסוים ובעבר בוצע פרויקט עבור בנק אחר, ואישית אני מכיר את חלק מהבנקים וחלק מהטכנולוגיות שיש להם ואיך לאמר בעדינות… יש לי השגות לגבי מה שמר מוסקל ציין בראיון. אציין כי לא שוחחתי עם אף נציג טכני משום בנק ואינני בא "להגן" על הבנקים, אבל חשוב לדעתי להציג תמונה מאוזנת.

אז נתחיל עם ה-Mainframe. רבים מהקוראים בוודאי חושבים שמדובר על טכנולוגיה עתיקה וישנהאך אין הדבר כך. נכון, IBM שומרת בקנאות פנאטית על תאימות כמה דורות אחורה, אבל מערכות Mainframe מתעדכנות מבחינת חומרה נון-סטופ ומבחינת ביצועים, מעבד כמו ה-Power9 "מרביץ" למעבדים כמו Xeon-SP בכל מובן שתבחרו. בנוסף, אחד היתרונות הגדולים של מערכות Mainframe הוא תחזוקת חומרה. בשרתים רגילים, אנחנו יכולים להחליף דיסק קשיח מבלי לכבות את השרת או ספק כח, ב-Mainframe אתה יכול להחליף כמעט הכל – מעבדים, כרטיסי PCIE, זכרונות בזמן שהמערכת פעילה והיציבות של המערכת היא אחד הדברים ש-IBM בהחלט יכולים להתגאות בו. זה פשוט לא נופל.

בעבר רוב האפליקציות שנכתבו ל-Mainframe אכן היו ב-COBOL ויש חלק לא קטן מהקוד שעדיין רץ ב-COBOL, אבל בשנים האחרונות בנקים שיש להם Mainframe החלו להשתמש בפונקציונאליות חדשה ש-IBM הכניסו: להריץ מכונות Linux כ-VM על ה-Mainframe בצורה טבעית (ללא אמולציה של X86) עם ביצועים מאוד מהירים בעזרת כרטיסים יעודיים עם מעבדי Power8 (ובזמן האחרון Power9) שמיועדים להריץ Linux. כך הבנקים נהנים מ-2 יתרונות גדולים: אפליקציות Linux שרצות באופן טבעי על Mainframe ובנוסף מערכת ה-Mainframe יציבה מאין כמוה.

לגבי שפת COBOL – נכון, היא שפת תכנות עתיקה (משנות ה-50) אולם היא עברה עדכונים רבים וסטנדרט ה-COBOL גם עבר עדכונים וכיום הסטנדרט ב-COBOL הוא ISO/IEC 1989:2014 – כלומר יש בהחלט עדכונים לשפה. נכון, היא שונה משפות כמו Python, Go, Perl וכו' אך מצד שני היא לא כזו קשה ללימוד, זו שפה שיותר מבוססת על השפה האנגלית.

אחד הדברים שמר מוסקל לא מתייחס אליהם הוא נושא פרויקטים שהבנקים (כל הבנקים) מבצעים: שכתוב מחדש של קוד COBOL ישן ל-Java מודרני. אף בנק לא מעוניין "להיתקע" עם מערכת ישנה שאין לה אף אחד שיתחזק אותה, ולכן מבוצעים הפרויקטים הנ"ל, ובבנקים נכנסים יותר ויותר לעבודה עם כלים סטדנרטיים כמו GIT, יש גם Jenkins שיודע להתחבר ל-zOS (מערכת ההפעלה העדכנית של ה-Mainframe של IBM) וגירסת Docker Enterprise Edition 17.06 יודעת להתחבר למערכות System Z (ה-Mainframe) להריץ קונטיינרים על Linux שרץ ב-Mainframe.

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

מבחינת כח אדם – האם מר מוסקל מודע לכך שבנקים כבר לא מקבלים עובדים חדשים במחלקות טכנולוגיות כעובדי בנק? אם אדם כלשהו, לא חשוב כמה הוא "פטיש" בתחומו ואותו האדם והבנק מעוניינים שהוא יעבוד עבורם, הבנק לא יעסיק אותו ישירות אלא אך ורק דרך חברה צד ג' מחברות האינטגרציה הגדולות בשוק הישראלי. האם ניתן לקצץ בכח האדם? אולי, אבל לכל בנק יש ועד חזק וכל בנק שירצה לקצץ, יצטרך לבוא בדין ודברים עם הועד של הבנק ויש כל מיני שיקולים אם לפטר או לקצץ או אם ליזום תוכניות פרישה-מרצון. אני די בטוח שכל בנק בודק את מצבת כח האדום שלו באופן תדיר ומחליט לאן ללכת עם זה.

ונקודה אחרונה מבחינה טכנית: למיטב ידיעתי, כל בנק בישראל החל "לפזול" לכיוון קונטיינרים כפתרון Scale Out כדי לעמוד בעומסים שונים, כך שמצד אחד הבנק "מגייר" אפליקציות מ-COBOL ומצד שני הבנק בודק טכנולוגיות קונטיינרים שונות. כיום, אם בנק ישאל "חץ, האם לעבור לקונטיינרים לפרודקשן?" תשובתי תהיה: "בשלב זה, התשובה היא לא" מכיוון שלדעתי בנקים יצטרכו פתרונות קונטיינרים יותר מאובטחים כמו Clear Containers של אינטל וטכנולוגיה זו היא צעירה ועדיין לא בוגרת מספיק כדי לזרוק אותה לפרודקשן.

בכל נושא גיוס הודים לישראל על מנת לסייע ב"מחסור" בכח אדם – כבר ניסו בעבר לייבא הודים לישראל וזה לא עבד ובגלל זה הפסיקו עם אותו מיזם. אין שום בעיה שכל חברה המעוניינת במתכנתים, יכולה פשוט לבנות תשתית בחו"ל ולחבר אותה ב-VPN לישראל כאשר המפתחים בחו"ל עובדים על תשתית מקומית שמסונכרנת לארץ או שהמפתחים עובדים על תשתית שנמצאת בארץ. במזרח אירופה, לדוגמא, יש לא מעט מתכנתים מאוד מוכשרים ולא מעט חברות ישראליות משתמשות בשרותי אותם מפתחים לפתח חלקים שונים לתוכנות שאותן הם משווקים. ככלל, לעניות דעתי, הבאה של כמה אלפי מתכנתים מהודו לישראל מהיום למחר לא תעזור כי הראש שונה לחלוטין מהראש הישראלי.

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

לסיכום: נכון, דברים זזים לאט בבנקים. מתי בדיוק הייתם בסופרמרקט והעברתם את הסלולרי שלכם לשלם עם חשבון הבנק או כרטיס האשראי הבנקאי בארץ? זה עדיין לא זמין ובחו"ל זה זמין עם הטלפון הסלולרי ועם השעונים החכמים מבוססי Android Wear, Tizen או ה-Apple Watch והאשמה דווקא אינה תלויה לפתחם של הבנקים בישראל (הם יכולים בתוך חודשיים שלושה להפעיל את זה) אלא בבנק ישראל. לבנקים לוקח זמן לעבור לשיטות פיתוח חדשות אבל פנימית הם בהחלט מתעדכנים. יצא לי לא פעם להציע פתרונות שונים כרעיון לקדם משהו ובמקרים רבים הופתעתי מכך שאין תשובה שלילית מיידית. בקיצור – בניגוד לרושם שנוצר מגורמים שונים, הבנקים לא נמצאים בעידן האבן. לוקח להם זמן להתקדם – אבל הם מתקדמים.

כשצריכים VPN טוב ובחינם

אם תשאל היום כל אדם או גוף מקצועי שמבין באבטחת מידע כיצד לבצע חיבור למחשבים או משאבים מרוחקים בצורה מאובטחת, הדבר הראשון שימליצו לך זה על VPN. כיום כל מחשב בעל כתובת IP חיצונית חוטף סדרות של סריקות מ-1001 גורמים וכל פורט שמתגדלה כפתוח נעשים עליו נסיונות חיבור, לעיתים נסיונות בודדים ולפעמים עשרות (או יותר) בשניה. אם אתם רוצים לראות זאת "בשידור חי" הקימו באחד מספקי הענן הציבוריים מכונת לינוקס קטנה עם SSH פתוח ועקבו אחרי קבצי הלוג, תהיו בטוחים שתוך שעות ספורות יהיו כמה סקריפטים שינסו להתחבר אליכם.

לכן, חיבור VPN הוא חשוב ורוב העסקים והחברות רוכשים קופסאות Appliance (או VM) של VPN מיצרניות מוכרות כמו Cisco, Fortinet, Juniper, Check Point, Palo Alto ועוד רבים אחרים. לאלו שמעוניינים בחיבורים בודדים, יש את ה-OpenVPN שמאפשר עד 2 חיבורים סימולטנית ללא תשלום, וניתן כמובן לרכוש רשיונות נוספים. אפשרות נוספת בקוד פתוח היא StrongSwan שמאפשר חיבוריות בין שרת VPN לכל מכונת לינוקס/מק/Windows.

אפשרות פופולרית חדשה שקיימת נקראת Wir eGuard ולמרות ש-Wire Guard אינו מתאים להחליף VPN כ-Client/Server עדיין (אין עדיין Clients ל-Windows ומק אם כי הוא יכול לשמש כ-Client/Server בין מערכות לינוקס), הוא יכול לסייע במקום אחר שהוא מאוד חשוב.

נניח ויש לנו מספר שרתים בחוות שרתים ביפו, וישנה קבוצה של עובדים שיושבים בחיפה שצריכים להתחבר לאותם שרתים. חיבור בשיטת ה-Client/Server לכל מחשב שיושב בחיפה למחשבים שיושבים ביפו אינו פתרון יעיל מכיוון שעדיף חיבור שיוצר מעין "LAN" (או ליתר דיוק: WAN) שרץ בעצם על ה-VPN, ואז בעצם אנחנו מחברים בשיטה שנקראת Site to Site VPN. כך לדוגמא עובדות חברות שיווק רבות שיש ברשותן סניפים, כאשר בכל סניף יש מספר מחשבים מקומיים.

כל היצרנים המסחריים מציעים כמובן במסגרת חבילת ה-VPN גם שרות Site to Site (או בקיצור S2S, יש כאלו שמחליפים זאת ב-StS), אך במקרים רבים השרות הנ"ל כרוך בתשלום נוסף, וכאן ל-WireGuard יש יתרון גדול.

תוכנת ה-WireGuard נכתבה בצורה כזו שהיא מפיקה לקחים מפתרונות VPN ישנים יותר (ה-WireGuard זמין בצורה יציבה בערך שנה וחצי) והיא תומכת ב-cryptographic primitives ידועים כגון: Curve25519, HKDF, ChaCha20, Poly1305, BLAKE2s, SipHash24 (אפשר לראות מה כל אחד משמש כאן). בנוסף התוכנה כתובה בצורה יעילה וכל הקובץ הבינארי שוקל … 4 קילובייט כך שטווח התקיפה הוא מאוד קטן (נסו להשוות לכל תוכנת VPN אחרת), הוא רץ ברמת Kernel והביצועים שהוא נותן עוקפים פתרונות אחרים בקוד פתוח (כפי שאפשר לראות כאן), להלן גרפים לדוגמא:

מה לגבי התקנה? היא קלה מאוד ואפשר למצוא עשרות דוגמאות לכך שתוך דקות ספורות ניתן להקים את 2 הנקודות (או יותר) בין החיבורים. כאן לדוגמא חובבי אובונטו יכולים לראות כיצד ניתן להקים את ה-Wireguard.

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

כמה מילים על הטמעת CUDA

יותר ויותר חברות משתמשות היום בתוכנות תלת מימד, תוכנות הדמיית ויזואליזציה, והמון המון חישובים מסוגים שונים, בין אם מדובר במסחר (Algotrading) והמון דברים אחרים, וגם לאחרונה CUDA נכנס גם בשימוש עם קונטיינרים – מספר קונטיינרים יכולים להשתמש ב-GPU יחיד או מספר GPU שנמצאים בשרת (זה פחות מתאים לכרטיסי GTX ויותר מתאים בכרטיסים כמו Grid, Tesla וכו').

לפני שניגש לעניינים הטכניים של הטמעת CUDA, כדאי קודם כל להכיר את הכרטיסים של nVidia שתומכים ב-CUDA. באופן עקרוני, כל צ'יפ של nVidia תומך ב-CUDA. לדוגמא: במחשב הנייד הישן שאני כותב את הפוסט הזה קיים מעבד (די עגלה) GT 720M של nVidia ולמרות שהוא ישן – הוא תומך ב-CUDA ואני נעזר בתמיכה הזו לרנדר וידאו באדובי פרמייר טרום פרסום הוידאו ביוטיוב.

בעקרון יש ל-nVidia מספר סוגי כרטיסי GPU, נתמקד כרגע על 2 סוגים: ה-GTX שיותר מתאים לצרכן שמשחק משחקים ופה ושם הוא מרנדר וידאו ואפקטים, ויש את ה-Quadro שמיועד עבור הצרכנים המסחריים שצריכים לבצע המון חישובים על ה-GPU, תלת מימד ויצירת אנימציה בתלת מימד. רבים חושבים שמכיוון ש-2 המשפחות משתמשות באותם מעבדי GPU הן ב-GTX והן ב-Quadro, אז מדובר באותם כרטיסים ופשוט אפשר לקחת את ה-GTX ולגמור עניין, וכאן הטעות הגדולה: נכון, 2 משפחות הכרטיסים משתמשים באותם מעבדי GPU אולם יש מספר שינויים:

  1. כרטיסי ה-Quadro מגיעים עם יותר זכרון (בגרסאות הדסקטופ, לא בגירסאות ה-Mobile) בהשוואה ל-GTX. בכרטיסים מסויימים יש לא פחות מ-24 ג'יגהבייט זכרון (שהוא מאוד יקר), מה שנותן לאפליקציות שמשתמשות ב-CUDA יותר מקום והביצועים מהירים פי כמה בהשוואה ל-GTX.
  2. הכרטיס כולו בנוי בצורה מעט שונה (אם כי לא רואים זאת ישר). כרטיסי Quadro מיועדים לעבוד 24/7 באופן רציף בתפוקה מלאה, וזאת בניגוד למשתמש טיפוסי של GTX שמשחק פה ושם משחקים או מרנדר וידאו מלא (או 2) ביום. הכרטיסים בנויים עם איוורור מעט שונה וגם האחריות בהתאם – לכרטיס Quadro יש אחריות ל-5 שנים.
  3. לכרטיסי Quadro יש דרייברים מיוחדים המפעילים פונקציות שאינן פעילות כלל ב-GTX. החסרון (אם אפשר לקרוא לזה כך) זה שכרטיסי Quadro אינם מתאימים כל כך למשחקים אך הם בהחלט מתאימים לעבודות מאסיביות והדרייברים מאפשרים שלל תכונות שדרושות בדיוק לסוג העבודות הללו.

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

מכאן נעבור להתקנת CUDA.

יצא לי לפגוש לא מעט מקרים בשנה האחרונה שבהם מי שהתקין את ה-CUDA במערכת – לא התקין בצורה נכונה את CUDA. כן, כל מערכת ה-CUDA רצה אך יש דברים שחשוב מאוד לעשות ולהתקין לפי כן, על מנת שהמערכת תרוץ לאורך זמן:

  • כשזה מגיע לגירסת לינוקס – אין להתקין גירסת לינוקס שמיועדת לדסקטופ, כלומר אובונטו 15,16,17 (בין אם בגרסאות 04. או 10.) שמיועדות לדסקטופ אינן מתאימות לפרודקשן הואיל והעבודות שירוצו עם ה-CUDA הן למשך מספר שנים ולא לשנה שנתיים, ובנוסף – נדרשת יציבות מקסימלית ולכן יש להתקין את אחת מהפצות הלינוקס הבאות:
    • גירסת CentOS 7.3 (ואם אתם עדיין מתעקשים על גירסה 6 של CentOS – אז CentOS 6.9)
    • SLES 12 SP2 ומעלה – של SuSE
    • Debian 8-Jessie או Debian 9-Stretch. ניתן להשתמש גם ב-Debian 7-Wheezy אולם סביר להניח שיהיו בעיות קומפילציית מודולים בהמשך, קחו זאת בחשבון.
    • אובונטו – הנה הפתעה לקוראים: הגירסה היחידה המומלצת היא Ubuntu 16.04.2 LTS (אם יש לכם 16.04.01 – בצעו שדרוג ל-16.04.02). זו הגירסה היחידה לשרתים שקנוניקל משחררת ותעמוד מאחורי גירסה זו ל-5 שנים הקרובות. שאר הגרסאות מיועדות לדסקטופ והן משתנות תדיר, דבר שממש לא מומלץ להתקין בשרת.
  • אחת הטעויות הנפוצות (במיוחד מאנשי לינוקס שהתחילו עם אובונטו) היא התקנת סביבה גרפית גם בשרת. זו טעות, במיוחד אם אתם משתמשים בכרטיס GTX לעבודות CUDA. ה-GPU צריך לרנדר את הסביבה הגרפית 60 פעם בשניה (או 50 בחלק מהמקרים) וזה סתם מוסיף עבודה ל-GPU ולכן: בשרת, לא מתקינים סביבת עבודה גרפית. תתרגלו לטרמינל, מה קרה? 🙂
  • לא להריץ update/upgrade סתם כך! במקרים רבים עדכון הפצת הלינוקס ישדרג גם את הספריות והקרנל ובמקרים רבים אין קרנל מודול ל-GPU שמקומפל לקרנל החדש, מה שמצריך או קימפול מחדש או שימוש ב-kmod/dkms כדי לקמפל מודולים לקרנל החדש. שימוש בקרנל חדש מצריך reboot ולכן עדכונים ושדרוגים – יש לבצע בסוף יום עבודה או לקראת סופ"ש על מנת שלא להפיל עבודות שמשתמשות ב-CUDA.
  • לא להפעיל RAID תוכנה על השרת. תלוי בסוג העבודה, יכול להיות שבנוסף ל-GPU, גם ה-CPU יהיה מלא בעבודה ולכן בד"כ מומלץ שלא להקים RAID תוכנה אלא RAID חומרה עם כרטיס (למעט בשרתים בהם יש RAID חומרה על לוח האם). אני מודע לכך שזו נשמעת המלצה מוזרה, אולם ראיתי מקרים כאלו ש-RAID תוכנה נפל (במיוחד שמדובר בדיסקים SATA "ביתיים" פשוטים) כשה-CPU היה חנוק עם כל הליבות שלו. כרטיס RAID פשוט עולה 50$ ואם המערכת שלכם הולכת לייצר המוני קבצים לקריאה וכתיבה סימולטנית – חברו אותה לסטורג' או במינימום NAS טוב.
  • אם יש לכם הפצת CentOS – השתדלו לא להשתמש בקרנלים מ-ElRepo Repository. ה-REPO הזה נותן קרנלים חדשים ל-CentOS אולם מנסיוני הם מלאים באגים כרימון.

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

בהצלחה.

[stextbox id='info' caption='גילוי נאות']הטמעות ותיקון תקלות הקשורות ב-CUDA זה חלק מהשרות ש"חץ ביז" נותן[/stextbox]

שידור וידאו: על קידוד וצרות של רוחב פס ומחיר (חלק 1)

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

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

בעבר אתרי אינטרנט רבים העבירו שידור וידאו או קליפים בקידוד WMV של מיקרוסופט או VC, או VCM בחלק הקטן מהמקרים, אולם כיום כולם (למעט אתרים שלא עודכנו שנים ועדיין חושבים שהעולם הוא עדיין ברובו משתמש במיקרוסופט) עברו לשדר בקידוד של MPEG-4 עם פרופיל Base או Main והאודיו מגיע או כ-AAC או כ-MP3. היתרונות של מקודדים (Codecs) אלו הוא בכך שכל מערכת הפעלה, טלפונים סלולריים וטאבלטים – תומכים בכך וכל מי שמשדר מעוניין להגיע לכמה שיותר קהל מבלי שהגולשים יצטרכו להתקין אפליקציות/תוספים מיוחדים, מה שגורם במקרים רבים לתקלות ולאנשים שאין להם תמיכה והם נוטשים וממשיכים הלאה.

אז כיצד בעצם אפשר לדחוס יותר משתמשים על אותו רוחב פס?

בשינוי קידוד כמובן. יש כל מיני מקודדים מסחריים שיתנו לכם מה ש-MP3 נותן, רק ברבע מרוחב הפס עם אותה איכות אם לא יותר מאשר MP3. הבעיה? במקרים רבים צריך לשלם תמלוגים על המקודדים פר כמות גולשים, פר חודש וכו'. אם בא לכם לשפוך כספים, אהלן וסהלן.

אבל יש פתרון אחר, שכולו קוד פתוח ונתמך בפלטפורמות כמו Wowza ואחרים (כן, גם במערכות בלוגים כמו WordPress) שנקרא Opus שמגיע מ-קרן Xiph ומהנדסים רבים בעולם עובדים בהתנדבות בזמנם הפנוי על פיתוחו. גירסה 1.2 (ו-1.2.1) שוחררה לא מזמן. אתם יכולים להיכנס לדף הזה, לגלול לאמצע ולבחור בקידוד וב-Bit Rate. אני ממליץ לבחור שם Opus 1.2 עם 32 קילוביט לשניה ולנגן ותתרשמו בעצמכם מהאיכות.

בהמשך הדף אתם תגיע לדף דוגמיות דיבור, שם אתם מוזמנים לבחור שוב את Opus 1.2 ולבחור ב-12 קילוביט לשניה, הכי נמוך, ואז לשמוע את הדברים בניבים שונים באנגלית (מה שמהווה אתגר לא קטן לקידוד, דיבור ב-Welsh וכו'). לעניות דעתי – האיכות פנטסטית.

השאלה שכמובן תישאל מיד – האם זה תואם להכל מבחינת דסקטופ, טלפונים וטאבלטים? התשובה – ברוב כן למעט iPhone. כל הדפדפנים תומכים, אנדרואיד תומכת.

אז מה עושים? לשמחתנו ב-HTML5 יש אפשרות לקבוע Fallback כך שאם הציוד של הלקוח אינו תומך ב-Opus, הוא יועבר לגירסה ב-MP3 או AAC.

לסיכום: חסכון של 75% ברוחב הפס פר משתמש אינו רע והוא שומר על איכות דגימה של 48 קילוהרץ, ואתה לא משלם אגורה שחוקה כתמלוגים על שימוש בקידוד זה.

מה רע? 🙂

בפוסט הבא נדבר על ה"חבר" של Opus – קידוד וידאו VP9.

מחשבות על Nano Scale

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

קחו לדוגמא את עניין הוירטואליזציה ואם תקפצו ל-IBM, תראו שהחברה מימשה רעיונות וירטואליציה הרבה לפני כולם ב-Main Frame שלה. קונטיינרים? קיימים במערכות יוניקס במימושים שונים כבר עשרות שנים. עם הזמן המימושים השתפרו ולעולם ה-PC נכנסה הוירטואליזציה ע"י כל מיני חברות ובראשם VMWare ובכל מה שקשור לקונטיינרים – Sun, IBM ואחרות מימשו בצורות שונות עד שהגענו ללינוקס עם קונטיינרים כפי שהם מוכרים היום ולאחרונה גם מיקרוסופט הצטרפה לעגלת הקונטיינרים (הם נכנסו לוירטואליזציה מעט אחרי ש-ESXI-3 של VMWare יצא).

תחומים "חדשים" (שוב, הם היו ממזמן ב-Main Frame במימוש שונה בעבר) היו ה-Micro Services, ה-Serverless ומושגים שהיום חזרו להיות טרנדיים רק שהם היום הרבה יותר נוחים. קחו לדוגמא את אמזון שממשת את עניין ה-Serverless בעזרת מספר חלקים קריטיים כמו Lambda, DynamoDB ועוד. בתצורה הזו אתה לא חושב על שרתים, אתה לא חושב על קונטיינרים או על תצורת מחשוב קלאסית. המושגים שונים לגמרי.

בעולם המחשוב כיום, כשמריצים אפליקציה על VM או על קונטיינר, כמעט תמיד יווצר בזבוז משאבים. אתה מקים VM של 4 ג'יגהבייט בשעה שהאפליקציה צריכה 2.5 ג'יגהבייט.נכון, טכנולוגיית Memory Balooning פותרת בעיה זו בוירטואליזציה מקומית כמו ESXI, אבל מה קורה בענן ציבורי? שם הספק לא כל כך יכול להשתמש בטכנולוגיה כזו כי הוא לא "משחק" את המשחקים של Over Provisioning מטורף כמו ספקי הוסטינג קטנים. ב-ESXI אפשר לקבוע שמכונה תוזז למכונה פיזית אחרת אם היא פתאום צריכה הרבה יותר משאבים ממה שהיא היתה צריכה לפני זמן קצר, בענן קצת קשה לעשות זאת וכלקוח אינך יכול להעביר את ה-Instance שלך ממכונה פיזית אחת לשניה כמו ב-vSphere. הבעיה קיימת פחות (אך עדיין קיימת) עם קונטיינרים – גם שם אתה צריך להגדיר לקונטיינר כמה זכרון יהיה לאפליקציה/ות בתוך הקונטיינר אולם אם הן לא משתמשות בזכרון, אז נוצר בזבוז (שוב, עם אותם הסתייגויות כמו ל-VM).

הפתרון של Micro Servicess הוא פתרון טוב, אבל לעניות דעתי פתרון טוב יותר יהיה ברמת ה-Nano.

בוא נדמיין משהו: יש לכם שדה גדול בגודל מספר דונמים שבו אנו מגדלים ירקות מסויימים. איך נשקה את השדה? או עם ממטרות, או עם טפטפות, לא? הבעיה עם 2 הפתרונות זה שלא מדובר בפתרון מדויק. ממטרות יכולות להתיז כמה מטרים קדימה ברדיוס מסוים, אבל אז צריך להתחשב בצמחים שנמצאים מתחת לרדיוס הזה ואותם ממטרה אחרת צריכה להשקות. בטפטפות העניין יותר מדויק כי שמים את הצינורות קרוב לצמחיה, אבל עדיין הכל תלוי בשורשים ואורכם. 2 השיטות עובדות, אבל השיטה הטבעית לעומת זאת (גשם) עושה עבודה הרבה יותר טובה מכיוון שהיא מכסה את כל השטח בצורה אחידה וכל עוד הגשם לא "נתקע" במקום או שאינו מגיע בצורות מזיקות (סופות, ברד) – הצמחים יקבלו 100% מצרכי השתיה שלהם. תחשבו על כך: טיפות גשם שכל אחת מהם היא כמות מאוד קטנה (ב-CC) לא עושה כמעט כלום – אבל בתצורת גשם – היא פותרת בעיה קריטית.

אותו דבר בתחם אחר (שבינתיים אנחנו שומעים עליו, הרבה פחות רואים אותו בשטח) – ה-Nano Bots, רובוטים מאוד מזעריים שאמורים להיות מוחדרים לגוף בזריקה (או בליעה? תלוי בטכנולוגיה) ואמורים לעשות פעילות ספציפית מסויימת. נניח לתקוף תאי סרטן ולהרוג אותם, כלומר הרובוטים הללו אינם מתוחכמים, הם אמורים להגיע לנקודה X, לעשות משהו ספציפי נקודתי וזהו.

תארו לכם שאפליקציות שיש כיום – יהיה ניתן לפרק אותם ל-Nano Scale, כלומר פיסות קוד שצריכות קילובייטים (ולא מגהבייטים או ג'יגהבייטים) והם יכולים לתקשר עם פיסות קוד אחרות במהירות ללא צורך בבנייה של תשתית עם האמצעים הרגילים כמו Load Balancer או HAProxy או דברים כאלו. פיסות הקוד (בחלוקה לדוגמא שכל פונקציה היא "נאנו מכונה") יוכלו לבצע פעולות, לשדר את התוצאה ולמות ופיסות אחרות יכולות לקום והכל תוך מילישניות – לפי הצרכים. הדבר שכן קיים כיום בתצורה מאוד דומה היא ב-GPU (כמו של nVidia) ששם יש אלפי ליבות וכל ליבה יכולה לעשות דברים מאוד בסיסיים אך עבודה של מאות ליבות ביחד יוצרת משהו שלם שמועבר למחשב.

כיום יש לנו משהו קרוב לכך ב-Micro Services יחד עם ה-Serverless שנותן בערך את אותו רעיון, אך עדיין זהו דבר בעייתי מכמה סיבות:

  • קשה לתרגם אפליקציה קלאסית לתצורה זו
  • החלקים אינם קטנים מספיק (זה לא בעיה כשזה רץ בענן, זה כן בעיה אם זה ירוץ על Micro Controller Unit – כלומר MCU) או על IOT או על מערכות IOT עם כמות זכרון קטנה וכו'.
  • הפתרונות הטכנולוגיים הללו עדיין לא זמינים בתצורה קלה ונוחה להרצה מקומית על תשתית וירטואליזציה של חברות או על PC מקומי בקלות.

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

השאלה – מי ירים את הכפפה.

קוד פתוח מול קוד סגור ו"נעילת" לקוחות

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

אישית – הדבר האחרון שאני רוצה להתקין אצל לקוח זה מוצר ש"נועל" את הלקוח עם אפליקציה או פלטפורמה כלשהי.

ניקח דוגמא: חברות גדולות שונות רכשו בעבר רשיונות רד-האט לינוקס לשרתים אבל יש להם גם מכונות שמריצות את אותו לינוקס בגירסת CentOS. אחרי זמן מה החברה רואה שהאנשים שעובדים עם ה-CentOS מקבלים עדכונים כמו גירסאות RHEL והחברה לא ממש משתמשת בשרותי התמיכה של רד-האט והם רוצים להעביר את מכונות הרד-האט הרשמיות ל-CentOS. רד-האט כמובן מתנגדת לרעיון ולעיתים היא יכולה לאיים שזה "לא חוקי" כי יש קניין רוחני בהפצה הרשמית, אבל מבחינה טכנית אין שום בעיה בעזרת מספר פקודות להעביר מכונה כזו ל-CentOS תוך הסרת הקניין הרוחני/גרפיקה/דברים נוספים של רד-האט. (אגב, אפשר גם לעשות את ההיפך). רד-האט יפסידו או ירוויחו מזה? לא ממש מעניין אותי ואינני רואה שום בעיה חוקית לבצע זאת. אני מציע מוצרים ואלטרנטיבות, ואינני מרוויח שקל ממכירת מוצרים. אני עושה את כספי משרותים שצריך לעשות עם המוצר הרשמי או בגרסאות הקוד הפתוח ובלבד שהעבודה שאני מבצע תהיה מלאה והלקוח יהיה מרוצה. זו, אגב, הסיבה שאני "דוחף" פה בבלוג את כל העניין של קונטיינרים – החיים למפתחים, ולמתחזקי התשתית כל-כך-קלים לאחר מכן!

אחד הדברים שאני מעוניין לשמוע מלקוחות פוטנציאליים או מתעניינים לגבי פתרון זה או אחר – הוא שימוש בקוד פתוח בחברה. באיזה כלים או פלטרפורמה הם משתמשים? האם הם מעוניינים להשתמש בקוד הפתוח ובמוצרי קוד פתוח בשאר מוצרים ובתשתית החברה? או שמבחינתם אין בעיה "להינעל" עם פתרון כלשהו שפעיל רק בזמן שמשלמים דמי מנוי חודשיים/שנתיים/דו-שנתיים/תלת-שנתיים וכו'?

הנה דוגמא: לא מעט חברות שנכנסות יותר ויותר בשימוש עננים ציבוריים "מגלים" כשהם משתמשים בלינוקס ומערכות CI/CD את האוטומציה, ותתפלאו – חברות רבות לדוגמא עד היום לא הכניסו שום אוטומציה. יש פלטפורמות אוטומציה רבות ללינוקס כמו Chef, Puppet, SALT ובוודאי עוד כמה – אולם אני ממליץ ספציפית על Ansible מכמה סיבות:

  • הקוד של "המנוע" – פתוח לחלוטין וכתוב ב-Python.
  • אין צורך ב-"שרת" Ansible. כל הפעילות היא Serverless לחלוטין.
  • הכתיבה של ה"תסריטים" (או Playbooks איך שזה נקרא ב-Ansible) היא פשוטה ולוגית. המשתמש יכול תוך שעה שעתיים אחרי שהוא קרא את התיעוד לכתוב דברים בסיסיים שיכולים לרוץ על המכונה שלו ומכונות אחרות, כך שעקומת הלימוד – היא די קטנה.
  • יש לכם שרתי Windows? אולי הגיע הזמן גם ששם תהיה אוטומציה? אז ל-Ansible יש גם מודולים ל-Windows, בין אם מדובר להתקין קבצי MSI, להגדיר IIS, להעתיק קבצים, פעולות דוט NET, ניהול משתמשים וקבוצות ודברים נוספים. העלות לחברה? יקרה מאוד .. אפס שקלים.
  • מחפשים ממשק Web? אתם יכולים לרכוש את Ansible Tower (וביחד עם זאת לקבל תמיכה רשמית מ-רד-האט) או שאתם יכולים להשתמש בממשק וובי אחר (ויותר בסיסי) בקוד פתוח שנקרא Ansible Semaphore.
  • חושבים לעבור לאוטומציה אחרת מסיבה כלשהי? לרוב המתחרים יש כלים אוטומטיים להעביר את ה-Playbooks שכתבתם אל המערכת החדשה (אם כי עדיין לא נתקלתי בחברה שעברה מ-Ansible למערכת אחרת).

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

אותו הדבר גם בכלים לניהול סביבת חיים (Life Cycle) של קונטיינרים וסביבות המורכבות מעננים פרטיים וציבוריים. ניקח לדוגמא את קטגוריית ה-CMP (כלומר Cloud Management Platform). בתחום זה יש מתחרים רבים, החל מ-VMWare עם ה-vRealize לגרסאותיו, RightScale, ועוד. האם פלטפורמות אלו מבצעות את מה שהן מבטיחות? בהחלט! אולם אם תפסיק לשלם את התשלום החודשי או השנתי, תיתקלו באחת מהסיטואציות הבאות:

  • במקרים כמו של RIghtScale – אתה "בן ערובה", כל עוד שתשלם – הכל עובד. הפסקת לשלם, תתחיל לבנות מחדש את כל מה שבנית – על מוצר אחר.
  • במקרים כמו vRealize אם אתה מפסיק לשלם, המערכת לא תתעדכן לשרותים והגדרות חדשות של עננים ציבוריים, OpenStack ואחרים, אין תמיכה ואין עדכונים לגרסאות חדשות.

לעומת זאת, במוצר כמו CloudForms שנותן לך לבצע CMP (כולל כמובן עמידה ברגולציות וכו'), אם לא בא לך לשלם יותר, אתה יכול לייצא ולייבא את ההגדרות, הקבצים והתכנים לגירסת הקוד הפתוח (ManageIQ) בדיוק כמו שאתה יכול לעבור מ-RHEL ל-CentOS מבלי לאבד פונקציונאליות או תאימות. כשזה מגיע לקונטיינרים, אתה יכול לעבור מגירסת OpenShift מסחרית ל-OpenShift Origin שמבוססת על Kubernetes כך שבעצם למעט שרותי תמיכה (שאותם תוכל לקבל מצד ג' בין כה), אינך מפסיד דבר. להיפך: אתה שומר על כל העבודה שהצוות ביצע ואפשר לאחר המרה לגירסת קוד פתוח – להמשיך לעבוד כרגיל.

לסיכום: לא חשוב אם החברה היא סטארט-אפ שממומנת בחסכונות של המייסד או אם מדובר בחטיבות מחשוב של בנק גדול ועתיר תקציבים: ה-ROI, ה-TCO והשימוש החוזר (re-usability) בפלטפורמה ובכלים הם לדעתי הדברים החשובים. ראיתי מספיק מקרים בהם הוצע ללקוחות כלי כלשהו בקוד סגור בעלות נמוכה (כי מדובר בחברה גדולה ומוכרת שרבים מקשיבים לפתרונות שהיא מקימה) ועתה כשצריך לעבור לעננים וקונטיינרים – החברה צריכה להשקיע תקציבים גדולים כדי לעבור לפלטפורמות קוד פתוח. לכן – חשוב מאוד לבדוק גם כלים בקוד פתוח או כלים מבוססי קוד פתוח וגם להשקיע במחשבה איך לא למצוא את עצמכם "נעולים" באותו כלי או באותה פלטפורמה.

שבוע טוב 🙂

למי מתאים הפצות וכלים של SuSE

שוק הלינוקס בשנים האחרונות בארץ תופס תאוצה ובשנה וחצי האחרונות נכנס כח חדש לישראל – חברת SuSE ישראל שמייצגת את SuSE העולמית ונותנת תמיכה (בגיבוי SuSE העולמית) למוצרי החברה בארץ ואף משתפת פעולה במחקר ופיתוח בחברות שונות.

לא מעט לקוחות פוטנציאליים וקיימים ששומעים על SuSE שואלים: אנחנו צריכים את זה? בשביל מה?

אז קודם כל צריך להכיר את ה"ראש" של SuSE ואת SuSE עצמה. החברה נמצאת בשוק קצת משנת 1992 (רד-האט הוקמה ב-1993) והחברה התמקדה במיוחד בשוק האירופאי ובמיוחד – השוק הגרמני. כחברה גרמנית, המסורית הייקית נמצאת בכל מוצר של SuSE – שמרנות מצד אחד (ועמידה בכל סטנדרט אפשרי) ובחירה סלקטיבית מאוד של פרויקטים בקוד פתוח שמהם היא בונה מוצרים. ב-SuSE לדוגמא לא תמצאו על כל פיפס ש-רד-האט מוציאים – מוצר מתחרה. לרד-האט לדוגמא יש את OpenShift, ל-SuSE יש את ה-CAAS (שנמצא בבדיקות בטא כיום). מדובר על 2 מוצרים שמתקיפים את עניין הקונטיינר מזוויות לגמרי שונות, כך שאלו לדוגמא שמחפשים רק לבצע deploy לקונטיינרים (ולא את כל ה"מסביב" ש-OpenShift מוסיפה) עם תמיכה מסחרית מלאה – מוזמנים להציץ בקישור לעיל.

כשזה מגיע ל-Storage, המוצר של SuSE לדוגמא יותר בשל מהמוצר של רד-האט בדיוק מאותה סיבה שציינתי לעיל: SuSE בוחרים בפינצטה ואז משקיעים רבות בהקמת מוצר עם כל התחזוקה לאורך שנים. הדוגמא הכי פשוטה היא ההקמה של המוצר: ב-SuSE נותנים לך הוראות איך להקים זאת על המחשב הנייד שלך או מחשב טסטים עם VirtualBox או VMWare Workstation או KVM והולכים איתך שלב אחר שלב בתיעוד כך שגם אדם שמעולם לא שמע על Ceph יוכל תוך זמן קצר להרים סביבת נסיון ולאחר מכן הוא יוכל להמשיך ללמוד את שאר הפונקציונאליות (ויש לא מעט שמאוד שונה מ-Storage רגיל). ב-רד האט לעומת זאת יש הרבה יותר "תיאוריה" ופחות "בשר" להקמה על המחשב הנייד/מחשב טסטים.

גם כשזה מגיע ל-OpenStack, ב-SuSE לא קפצו ישר על המערכת אלא בנו בסבלנות את המערכת ואז שילבו את השינויים והתוספות שלהם למערכת שלא רק יכולה להרים מכונות VM אלא גם קונטיינרים נפרדים ללא צורך בהוספת חלקים אחרים למערכת, וכמובן – יש תמיכה ארוכת זמן כך שהחברה יכולה להיות שקטה בכך שהיא תקבל תמיכה ל-5 שנים הקרובות לאותה גירסה שהיא מנסה עכשיו.

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

עוד נקודה חשובה: לא מעט חברות נכנסות היום לתחומי ה-Embedded/IOT ול-SuSE יש את ה-SuSE Embedded Linux הן למעבדי אינטל והן למעבדי ARM עם 64 ביט עם מערכת הפעלה רזה מאוד שנקראת Jeos ואם משווים את המוצר לזה של רד-האט, תוכלו לראות ש-SuSE מתקדמים בהרבה מהמתחרים (וכן, יש גם תמיכה רשמית מלאה למחשבים כמו Raspberry Pi לחברות שמתנסות עם המכשיר).

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

על חשיבה חיובית וראש פתוח

כעצמאי, אינני יכול לדעת בבטחון מבחינת עבודות עתידיות מה יהיה מחר. אני כאדם יכול לפעול למען קבלת יותר עבודות ולהשתכר בצורה נאותה, ויכול להיות שמחר יכנס פרויקט גדול ומחרתיים אולי מישהו ירצה שאבצע לו עבודות כריטיינר – אבל כל הדברים הללו לוקחים זמן. ברוב המקרים אף אחד לא פונה אליי (או לכל עצמאי אחר שאני מכיר) ב-7 בבוקר עם הודעה "בוקר טוב, הנה NDA, הנה חוזה, הנה אפילו מקדמה נאה – תעשה לנו עבודה XYZ". בכל עבודה חדשה, פרויקט חדש – יש את המשא ומתן על שכר, מקדמה והחלק שהכי חשוב גם ללקוח וגם לי – הוא "מהי העבודה".

וכאן הדברים מתחילים להיות מפותלים..

ישנן עבודות שהן די "ישירות" שהלקוח רוצה שתעשה מכיוון שאין לו כח אדם פנוי לעשות או שאין לו ידע לעשות, המטרה והדרך ידועים ואתה מתבקש רק להשתמש בידע שלך לעשות זאת. משימה לדוגמא שחוזרת על עצמה: לחבר את כל מכונות הלינוקס ל-AD, לדאוג שגם ההרשאות של ה-AD יעבדו על לינוקס כולל sudo. הרבה יודעים לחבר לינוקס ל-AD אבל מכאן והלאה בכל מה שקשור למיפויים שונים שצריך – יוק. כאן הלקוח מצפה שתבצע עבודה על סמך הידע והנסיון. אין יותר מדי דיונים. מדברים על מחיר ותנאי תשלום, מתי לעשות, אם זה מרחוק או מקומית אצל הלקוח – ואם הכל מסוכם, מבצעים.

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

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

ניקח סתם פרויקט דמיוני: חברת חבצלת מקימה אתר מסחרי גדול לקניון שוקי. רועי, איש ה-IT של חברת חבצלת מקבל יעוץ משמעון שהוא צריך לרכוש 10 שרתים פיזיים, סטורג' אימתני ו-Windows Server 2012 עם SQL Server Enterprise. במבט ראשון יהיו כאלו שיחשבו שאולי יש הגיון בהמלצות של שמעון, אבל שמעון לא יודע שהאתר יכתב ברובו ב-ruby, וחלק ב-Python. במחיר שחברת חבצלת תשלם רק על הרשיונות, ברזלים וסטורג' (עוד לא דיברנו על הרוחב פס) אני יכול להרים לחברת חבצלת את כל התשתית בענן כלשהו על מערכות לינוקס עם גידול אוטומטי, עם קונטיינטיזציה (אם צריך), וגם עם חברת חבצלת תיקח אותי ל-3 שנים הקרובות לעבודת ריטיינר חודשית על אותו אתר – היא עדיין לא תוציא אפילו שליש ממה ששמעון יעץ לרועי. אם רועי רוצה רק Windows אז אפשר לבצע את אותה עבודה רק מבלי לקנות את הברזלים, הסטורג' וכו' ואפשר להשתמש בשרותים של ספק הענן ושוב – חסכון כספי ענק לחברת חבצלת.

כשמדובר על פרויקט שאחרים לא ביצעו (חיפשתם בגוגל ולא מצאתם דרכים או מאמרים איך לבצע), בדרך כלל אני ממליץ לפני שרוצים לעשות POC, "לגזור" מספר שעות עבור העצמאי לבדיקת היתכנות. נעזוב לרגע את העניין אם הפרויקט ישולם פר שעה או Fixed – הזמן הוא דבר חשוב. אם החברה קבעה לעבור לפרויקט שהעצמאי מקים לאחר 2 רבעונים ורק להקים את ה-POC לוקח 5 חודשים בגלל 1001 בעיות שצצות כי לא נעשתה בדיקת היתכנות – יווצר כאן מצב בעייתי. לו היתה בדיקת היתכנות, אותו עצמאי היה יכול לאמר כי ביצוע הפרויקט אפשרי אך זה יקח זמן – ואז החברה היתה מחליטה אם להשקיע את אותם 5 חודשים או שהם מחפשים פתרון אחר או שהם משנים את הפרויקט. אני יכול לאמר מנסיון שהיו לי פרויקטים שקשורים בחומרה ושבמבט ראשון הפרויקט לא היה ניתן לביצוע, אבל הלקוח החליט לשלם על בדיקת היתכנות ואכן לאחר שבוע בדיקות נמצאה דרך לבצע את הפרויקט אם כי בשינויים מסויימים אך המטרה הסופית תושג. מצד שני היה לי לא מזמן בקשה לביצוע פרויקט והלקוח התעקש על כלי מסוים שחשדתי שהכלי אינו מתאים ולכן ביקשתי מהלקוח להקצות שבוע עבודה כדי לבדוק היתכנות ואכן כפי שחששתי – הכלי לא היה מתאים אך מצאתי כלי אחר שכן יכל לעשות את העבודה. אם הלקוח היה מסרב לבדיקת ההתכנות והייתי מבצע את הפרויקט, אף צד לא היה מרוצה כי הפרויקט לא היה מצליח להתרומם עם אותו כלי.

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

כשהאתר דורש יותר ויותר משאבים בפתאומיות

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

הבעיה הגדולה מגיעה כשיש כמות גולשים גדולה שמגיעה במכה אחת, בין אם לכמה דקות או לכמה שעות או כמה ימים. תחשבו לדוגמא על חברה שיש לה אתר מסחרי ובשבוע הקרוב מתקיים מבצע של 20-50% הנחה על מגוון מוצרי החברה ואנשים מעוניינים לרכוש. מה עושים לקראת המבצע? זה תלוי, ובד"כ יבחרו באחת (או יותרת) מהאופציות הבאות:

  • הגדלת משאבי המכונה הוירטואלית (יותר זכרון, יותר ליבות)
  • אופטימיזציה של מערכת האתר – טיוב שאלות SQL, בניה יותר טובה של Cache, אולי מעבר ל-NGINX, שינוי PHP לעבודה כ-FPM ועוד ועוד..
  • שכפול והקמת מכונה זהה ומעל המכונות Load Balancer תוך מתן פתרון גם ל-SQL (שיטות Master/Slave, Multi Master ועוד)
  • אם אתם משתמשים בשרותי ענן כמו אמזון ושרותים כמו RDS, אולי תעברו ל-Instances יותר גדולים, אחסון יותר מהיר וכו'.

אם האתר שלכם נמצא בשרותי ענן ציבורי, בד"כ תהיה אופציה נוספת שנקראת Auto Scaling שתאפשר לכם להוסיף מכונות בהתאם לעומס (אתם יכולים לבדוק עומס על ה-CPU, עומס על הרשת, כמות זכרון פנויה וכו') ובד"כ זה פתרון טוב שעובד יפה והרבה חברות משתמשות בו. גם עניין הוספת VM לזה שקיים, ביצוע רפליקציה של SQL והוספת Load Balancer היא אפשרות טובה כשצריכים אותה.

אך לשיטות האלו יש מספר בעיות:

  • אם האתר עצמו מאוחסן ב-NFS או OCFS2 לדוגמא, תקלה בקוד או חדירה ע"י פורץ ושינוי הקוד (כמו במקרים של Defacement) – תשפיע על כל השרתים שלך. כנ"ל בעת שדרוג -אם השדרוג לא מצליח, שום אתר לא באוויר וכולם מקבלים את אותה שגיאה. בנוסף, אתם מייצרים צוואר בקבוק חדש מכיוון שכל פעם שהאתר צריך ולו את הקובץ הכי קטן – הוא צריך לבצע קריאה ל-Storage, ו-NFS לדוגמא פשוט לא מתאים לזה, אתם יוצרים צוואר בקבוק חדש.
  • מחיר – להוסיף עוד VM + Load Balancer זה לא כזה יקר (לעסק שמתפרנס [גם] מהאינטרנט לדוגמא), אבל כשאתה צריך להוסיף עוד 20 מכונות VM העסק מתחיל להיות קצת יקר וזה לא חשוב אם מדובר בספק אירוח ישראלי או בענן ציבורי.
  • תחזית: כמה הולכים להיכנס לאתר? אתה לא יודע. אתה יכול להעריך בהערכה גסה, אבל אתה לא תדע אם יכנסו פחות או יותר ואם אנשים לא עפו מהאתר או לא הצליחו להיכנס בגלל שהשרתים היו עמוסים, בגלל תקלה, ובקיצור – עניין הניחוש הזה קשה כמו לנחש כמה אנשים יגיעו לחתונה..

כלומר הפתרון הכי טוב כיום זה שאם המערכת שלך נמצאת בענן, לבנות אותה כך שהיא תשתמש ב-Auto Scaling של ספק הענן (כל ספקי הענן הציבורי מספקים את השרות). כך אתה לא צריך לנחש את כמות המבקרים שיגיעו, המערכת תגדל לבד ותענה לצרכים שלך, ולאחר שכמות המבקרים תקטן, המערכת תדע גם "להרוג" Instances מיותרים ולהשאיר מספיק מכונות שהאתר שלך יעבוד בצורה תקינה ולא תחטוף "חשבונית שוק".

מכונות VM הם פתרון טוב, אבל יש כיום פתרון יותר טוב והוא כמובן קונטיינרים: אפשר להקים קונטיינרים שיריצו את הקוד PHP, קונטיינרים שיתנו את שרות ה-WEB עצמו, קונטיינרים ל-SQL, קונטיינרים ל-Cache וכו'. הקונטיינרים עצמם אינם דורשים משאבים גדולים – מכיוון שהקונטיינר לא צריך את כל מערכת ההפעלה מותקנת בו אלא אך ורק חלק שצריך להריץ אפליקציה ספציפית, אפשר להפעיל קונטיינרים עם כמות זכרון קטנה (נניח 512 מגהבייט זכרון) בהתאם לצרכים. בנוסף, קונטיינרים הם דבר שניתן לשכפל מאוד מהר (בניגוד ל-VM – קונטיינר משוכפל בשניות). כך בעצם ניתן "להמיר" את האתר שלך למספר קונטיינרים שישוכפלו בין מכונות VM (או Instances), תקבל Load Balancer בחינם, והמערכת תדע לגדול ולקטון בהתאם לצרכיך.

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

  • להקים מספר קונטיינרים שיתפזרו בין VM שונים, יאוחדו לקבוצות וכך המערכת תוכל "לדבר" בין החלקים
  • אם יש תקלה בקונטיינר מסוים, אפשר להרוג אותו והמערכת תקים מיד קונטיינר אחר זהה, כך שאם לדוגמא מישהו פרץ לקונטיינר מסוים, הפגיעה היא מקומית (תלוי כמובן בהגדרות היכן נמצאים הקבצים שנפגעו – בקונטיינר או על NFS/OCFS2 וכו'), ניתן להרוג את הקונטיינר ולהמשיך (כדאי כמובן לתקן את הקוד)
  • עם מערכת כמו Kubernetes ניתן לבצע תהליך הטמעה של גירסה חדשה כך שעדיין ישמרו גירסאות ישנות ולעבור לחדשות לפי קצב שיוחלט (לפי גילוי באגים ותיקונם וכו') וכך יחסך מצב של השבתת מערכת רק כי צריך להחליף גירסה.
  • אפשר להשתמש בהפצות לינוקס אחרות (או בקונטיינרים של Windows – אם אתם מריצים WIndows Server 2016) בתוך הקונטיינרים כך שאין זה משנה מה ההפצת לינוקס שמותקנת על ה-VM עצמו.
  • אין צורך בהגדרות זהות פר VM – ישנה מערכת ETCD שדואגת שההגדרות בין ה-Nodes יהיו זהות לחלוטין בין אחת לשניה באופן אוטומטי.
  • יעילות פר VM – הפצות כמו Atomic, CoreOS, RancherOS ואחרות – ניתן להתקין אותן על ה-VM ובכך לחסוך RAM שתפוס בד"כ על ידי הפצת הלינוקס ב-Node עצמו (אחרי התקנת הפצות כפי שציינתי לעיל – הזכרון התפוס נע בין 50-100 מגהבייט בלבד וה-Node גם עושה Boot מאוד מהר) ובאותו זכרון פנוי ניתן להשתמש לטובת הקונטיינרים.
  • על אותה מערכת Kubernetes ניתן גם להעלות קונטיינרים אחרים עם גרסאות שונות של האתר, לא צריך VM חדש לשם כך.
  • ויש עוד יתרונות.

במילים אחרות: מערכת Kubernetes מאפשרת לכם בעצם לעבוד בצורה יותר מאורגנת כאשר כל חלק הוא נפרד ורץ בקונטיינר משלו, כך שיותר קל לטפל בבעיות שצצות במקום "לנחש" היכן הן. בנוסף, מערכת Kubernetes כוללת כבר את כל עניין גדילה, High Availability, שרידות, Load-Balancing ללא צורך בתשלום על שרותים אלו בנפרד.

אפשר כמובן לעבוד על Kubernetes בלבד (ויש כמובן גם API – שהוא יותר "client") לשפות שונות כמו PHP, Python, דוט.נט ועוד, אולם אם בחברה יש מספר מפתחים לאתר, אני ממליץ להשתמש בכלי כמו OpenShift Origin כדי לבצע את כל הדברים ב-Kubernetes (כולל דברים ש-Kubernetes לא עושה כמו בניית קונטיינרים, עבודה כמשתמשים וקבוצות ועוד) או בכלי אוטומציה אחרים לבצע הן את הדברים דרך Kubernetes והן את ה"מסביב".

מבחינת עבודה עם Kubernetes – המערכת הזו כתובה ופועלת מעולה – כשזה נמצא על ספק ענן ציבורי כמו גוגל או אמזון. אם זה בתשתית של ספק אירוח מקומי, יש צורך לבצע "שמיניות באויר" בכדי להתחבר למכונות הללו מבחוץ כי היא פשוט בנויה לשימוש פנימי כאשר תקשורת מבחוץ מגיעה דרך תשתית ספק הענן. ב-OpenShift לעומת זאת, פתרו זאת עם HA-PROXY ועם ניתוב חכם כך שאין צורך להסתמך על שרות כמו Load Balancing של ספק ענן חכם ואפשר להשתמש בפתרון המובנה.

מבחינה טכנית, לאלו שיש כבר אתרים גדולים, אין היום שום כלי למיטב ידיעתי שיכול לעשות לאתר שלכם המרה ממצב שהוא רץ על Shared Hosting או VPS/VM או Instance למצב קונטיינר. את הדברים יש צורך לבצע ידנית ויכול להיות שיהיה צורך לבצע מספר שינויים קטנים בתהליך העבודה (שימוש ב-GIT, הפרדה בין תהליכים ועוד) וכמובן יש צורך במחשבה ובבניית תהליך כיצד להכניס את OpenShift לעבודה אצלכם (כך שלא מדובר במשהו שמבצעים בכמה שעות או ביום עבודה אחד).

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

[stextbox id="info" caption="גילוי נאות"]מעבר לקונטיינרים הוא שרות שניתן ע"י חץ ביז[/stextbox]