מחשבות על 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.

גילוי נאות
מעבר לקונטיינרים הוא שרות שניתן ע"י חץ ביז

פרויקט נסיוני: קונטיינרים ו-Raspberry Pi-3

גילוי נאות / תודות
מכשירי ה-Raspberry Pi-3 ניתנו לי ע"י SuSE ישראל

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

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

כשזה מגיע לפיתוח, בין אם מדובר בפיתוח Low Level או בפיתוח בשפות אחרות, רוב הזמן המפתחים יכתבו את הקוד על ה-PC שלהם וישתמש ב-Cross Compile עם הקומפיילר החביב עליהם כדי ליצור קבצים בינאריים לציוד מבוסס ARM. אחרי הכל, לקמפל דברים על ARM זה לא כיף (זה איטי … אלא אם יש עליך איזה 500$ למערכת Jetson TX2 של nVidia ששם זה עובד יפה). הבעיה מתחילה בכל מה שקשור לבדיקות הרצה "על הברזל". פתרון של אמולציה זה לא רע (במיוחד אם האפליקציה לאנדרואיד וכתובה Native ב- ++C), אבל לפעמים צריך להריץ את האפליקציה "על הברזל" – במיוחד אם האפליקציה מתקשרת דרך ה-GPIO של הלוח (או דרך USB, יציאות סריאליות בלוח, JTAG וכו') – במקרים כאלו אמולציה לא תעזור ולחבר PC, להריץ אמולציה, למפות כתובות לתוך האמולציה בשביל להריץ את האפליקציה – זה סיבוך עם פוטנציאל להרבה נקודות כשל.

בקטע הזה – קונטיינרים על ARM יכולים להיות פתרון מעולה:

  • האפליקציות עצמם יכולות לרוץ אפליקציה פר קונטיינר על ה-Pi-3 ועוד קונטיינר יכול לשמש כ-DB קטן לדוגמא (SQLite) או אפליקציה קטנה שמקבלת תוצאות טסטים מהקונטיינר הראשון ואפשר להרחיב ולהרים קונטיינר נוסף שמקבל סדרות טסטים להריץ משרת כלשהו, כך שקונטיינר A (שמריץ את האפליקציה העיקרית) מתחבר לקונטיינר C (שמקבל משרת חיצוני את הטסטים שיש צורך להריץ), מבצע את הפעולות ומדווח את התוצאות לקונטיינר B (שמריץ DB או אפליקציה קטנה שאוספת לוגים ויוצרת סטטיסטיקות קטנות). שלושת הקונטיינרים רצים על מכשיר Pi-3 יחיד שמשמש בעצם כ-Node ומנוהל ע"י Master עם Kubernetes או OpenShift (שהם רצים על שרת רגיל).
  • לא צריך לכתוב גרסאות שונות של האפליקציה מחדש ל-eMMC, מערכת ה-Scheduling של הקונטיינר תעיף את הקונטיינר עם הגירסה הישנה ותפעיל על אותו מכשיר קונטיינר חדש. לא צריך Reboot, לא צריך להגדיר מחדש כלום. המפתח מוציא 20 גרסאות ביום עם תיקונים שונים? זמן ההקמה לבדיקה מתקצר בעשרות אחוזים.
  • לא חשוב מה המעבד ARM שיש, כל עוד יש לו גירסת לינוקס וחיבור רשת (ולא מדובר ב-MCU שעליו מבחינת חוסר משאבים לא ניתן להריץ קונטיינרים – כמו במקרים שיש לך כמה קילובייטים בודדים) – ניתן לעשות את הדברים הללו.
  • הקץ לאמולציות איטיות 🙂

ביצעתי בימים האחרונים טסט קטן שכולל 3 לוחות Raspberry Pi-3 ששימשו כ-Nodes ומכונת CentOS אחת שהריצה את OpenShift (שבתוכו יש את Kubernetes). מכיוון שהח"מ אינו חברת שמייצרת פתרונות חומרה, הקמתי מערכת שמריצה LAMP (שהתוכן מאוחסן ב-NFS) ו-2 מכונות וירטואליות שמריצות 20 קונטיינרים רזים (שמריצים ab כ"דפדפנים"). זה לא היה טסט לבדיקת ביצועים, אבל במחשבה שניה – כל Pi-3 הצליח להחזיק בערך כמה עשרות חיבורים סימולטניים. הפלתי כל פעם לוח (ניתוק חשמל) מתוך 3 לוחות ה-Pi-3 ולקח בממוצע כ-8 שניות עד שהמערכת זיהתה Node לא פעיל והזיזה את התקשורת ל-Nodes התקינים האחרים.

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

הכלים שמתאימים לניהול תשתיות וירטואליזציה

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

כיום – הכל השתנה. המייל שלכם, סביר להניח שיושב אצל ספק ענן כלשהו (כמו מיקרוסופט או גוגל), אולי יש לכם גם תשתית וירטואליזציה בענן, אולי אתם משתמשים גם בכמה שרותי SAAS שונים לאחסן דברים חיצונית או לקבל שרותים חיצוניים מספק כלשהו בתשתיות SAAS/PAAS/IAAS וכו' ובקיצור: יותר ויותר דברים כבר אינם בבעלותכם הפיזית המלאה ואתם בעצם משלמים על שרותים שונים כשמי שמנהל את הברזלים לאותם שרותים – הוא אותו ספק, לא אתם. לכם מעתה יש "תשתיות" שמורכבות מדברים שיש לכם ב-DC המקומי ועוד דברים חיצוניים.

נוסיף לזה דברים שהם יותר מודרניים כמו קונטיינרים, ואם יש אצלכם בחברה מחלק/ות פיתוח אז אולי חושבים (או עברתם) לעבוד בשיטות Agile. דברים כמו אוטומציה שפעם זה היה נחשב ל"רעיון נחמד" – היום הם Must ומצפים מהצוותים השונים לעשות את הדברים כמה שיותר אוטומטיים ולא ידניים, והדובדבן בקצפת – חברות רבות רוצות לקצר תהליכים: אם פעם בשביל להקים VM היה תהליך שלוקח כמה שבועות עד חודשים (מכיוון שהיה צורך באישורים של מחלקות שונות) – היום מצפים שהדברים יתרחשו בדקות, שעות או מקסימום ימים ספורים. בחברות רבות כיום המשקיעים לוחצים על ההנהלה שלוחצת על המחלקות השונות "לתקתק דברים" ולא "להתמרח".

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

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

ענן פנימי

יש לכולם כיום תשתיות וירטואליזציה כמו vSphere או Hyper-V ואותן תשתיות עושות את העבודה בצורה לא רעה, אבל לפעמים צריך להתרחב – להוסיף דברים כמו קונטיינרים, ושרותי AAS שונים פנימיים, בין אם זה DB, Storage, imaging ועוד ועוד והפתרונות שהזכרתי בהתחלה לא בנויים לתת את השרותים הללו (אם שמוליק מהפיתוח צריך DB של 2 ג'יגהבייט, עם הפתרונות שהזכרתי בהתחלה תצטרך להקים לו VM או להקצות לו ב-DB הראשי מקום, והקצאה לטסטים לדוגמא ב-DB הראשי זה לא בדיוק רעיון טוב).

בשביל זה יש לדוגמא את OpenStack. מערכת OpenStack בעצם משתמשת בתשתית הוירטואליזציה הקיימת (וגם מאפשרת לנו להתרחב לתשתית וירטואליזציה חדשה נוספת שאינה דורשת תשלום גבוה) כדי להקצות מכונות VM (ובגירסה האחרונה – גם קונטיינרים) ושרותים שונים עבור המחלקות וה"לקוחות" בחברה. מבחינת משאבי תמיכה וטיפול – ככל שמשתמשים יותר ב-OpenStack, המערכות וירטואליזציה הישנות צריכות פחות תחזוקה כי מערכת OpenStack יודעת לפנות לתשתית ולארגן את הדברים (יצירת מכונות, מחיקה, הקצאת משאבים וכו') כך שהוספת Open Stack לא מחייבת הוספת איש נוסף קבוע לשנים הקרובות אלא רק בהתחלה מומלץ לקחת מישהו חיצוני שמקים את התשתית, מדריך את צוות ה-IT ונותן "ברקע"  תמיכה טכנית ופתרונות.

מערכת Open Stack קיימת כקוד פתוח שניתנת להורדה כאן ובנוסף היא קיימת כפרויקט RDO למשתמשי Fedora/CentOS/RedHat. שימו לב, המערכת מאוד מורכבת ואינה מקבלת תמיכה רשמית.

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

קונטיינרים

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

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

תוכנת Docker היא תוכנה טובה להקים קונטיינרים בודדים ולהפעיל אותם, אולם כשצריך להפעיל קונטיינרים רבים שירוצו על שרתים פיזיים או על מכונות VM שונות, יש צורך בדבר שנקרא Scheduler שיודע להפעיל קונטיינרים (תוך שימוש ב-Docker), להזיז אותם בין מערכות (Nodes) שונים, לאגד אותם תחת שם שרות מסוים (כך שניתן יהיה לפנות ישירות לשם שרות – כמו mysite), להקים קונטיינרים חדשים במידה ויש עומס, לאזן עומסים בין קונטיינרים שונים ועוד.

ישנם פתרונות רבים בקוד פתוח לבצע את הדברים הנ"ל אולם הפתרון הכי פופולרי הוא Kubernetes שמאפשר דרך ה-Shell/CLI לעשות את הדברים הללו וכמובן ניתן להכניס את הכל לסקריפטים. Kubernetes מתאים למי שמכין קונטיינרים בעצמו / משתמש בקונטיינרים שניבנו ע"י אחרים, אולם Kubernetes אינו כולל את כל ה-Life Cycle של קונטיינרים ואינטגרציה עם כלי CI/CD, ממשק משתמש טוב, ניהול משתמשים ופרויקטים ועוד פונקציות רבות ש-Kubernetes אינו כולל.

לפיכך הכלי שאני ממליץ לדברים אלו הוא OpenShift (גירסה מסחרית) או OpenShift Origin (גירסת קוד פתוח) – של רד-האט. כלי נוסף שאני ממליץ עליו הוא Rancher שיתרונו הגדול על פני OpenShift הוא בכך שזו מערכת Multi Platform.

ניהול תשתיות וירטואליזציה

בין אם יש לכם בחברה OpenStack, קונטיינרים, vSphere, Hyper-V, או תשתית בעננים ציבוריים כמו Amazon AWS, Google Cloud Platform או Microsoft Azure – ניהול דברים אלו מצריך כלי ניהול נפרדים (או במקרה של כלי אוטומציה – כתיבת חלקים נפרדים).

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

חשוב לציין – Cloudforms הוא "כלי מתרחב" – כלומר זהו כלי שניתן להרחבה לא רק ע"י תוספים אלא ע"י כתיבה ב-YAML כל מיני פונקציות נוספות שמתאימים לארגון. רבים מנסים להשוות את Cloudforms ל-"vcenter עם תמיכה בתשתיות נוספות", אך השוואה זו מוטעית. Cloudforms יכול להתרחב בצורה משמעותית בהשוואה ל-vcenter/VCSA והוא כולל מערכת שלמה לביצוע Orchestration, Life Cycle, עמידה בסטנדרטים פנימיים ועוד.

תשתית וירטואליזציה מתחרה

מקודם התייחסתי ל-OpenStack שיכול להתאים להקמת ענן פרטי בחברה, אולם לעיתים חברות מחפשות מערכת "פחות מפלצתית", משהו שיותר מזכיר את ה-vSphere או את ה-Hyper-V. הסיבות יכולות להיות קשורות בתקציב קטן או שאין תקציב גדול להרחבת תשתית וירטואליציה ב-R&D, מעבדות וכו'. איך אמר לי לקוח פעם "תבנה לי מטוס בתקציב של רכב סובארו".

כולם מכירים כמובן את VirtualBox, אך כלי זה אינו מתאים לסביבה מעבר לכמה מכונות VM בודדות שרצות על ברזל יחיד. הפתרון הכי טוב שיש בקוד פתוח הוא oVirt (גירסת קוד פתוח) או RHEV (בגירסה המסחרית) של רד-האט. שתי המוצרים מבוססים על פלטפורמת KVM בלינוקס והמוצרים יודעים לא רק להתממשק לסביבות וירטואליזציה אחרות (במידה וצריך), אלא לעשות את כל מה שמצפים מתשתית וירטואליזציה: Live Migration, Cloning, High Availability, Fault Tolerance, Load Balancing ועוד.

סיכום

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

קונטיינרים: ה"קרב" בין OpenShift ל-Docker DataCenter

בפוסט הקודם שכתבתי כאן על קונטיינרים וחברות מסחריות, ניסיתי להסביר מעט על קונטיינרים ועל המוצרים שנמכרים בארץ כאשר התרכזתי ב-2 מוצרים: ה-Docker DataCenter ומולו ה-OpenShift (גירסה מסחרית או גירסת Origin שהינה קוד פתוח) – עבור שוק ה-Enterprise. בפוסט זה אשווה קצת יותר (בצורה כללית) בין המוצרים ואנסה להסביר היכן כדאי להוציא הזמנת רכישה והיכן כדאי "לדלג".

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

בימים האחרונים השתמשתי בגירסת ה-Trial ל-Docker DataCenter (ובקיצור: DDC), למדתי אותה, הקמתי אותה אצלי ב-LAB הקטן שלי. השתמשתי ב-Swarm שבתוכו (שזה בעצם ה-Scheduler ועוד) ובשאר הכלים שגירסת ה-Enterprise כוללת. הייתי צריך להקים כ-5 מכונות וירטואליות (Nodes) כדי שהדברים יעבדו, עוד לפני שיכלתי להקים קונטיינר אחד. בסופו של דבר, המערכת עבדה בצורה טובה, יחסית. (אם כי נתקלתי באיזה באג או 2 שמצאתי להם "עיקוף").

מבחינת מחיר: DDC אינו זול. מחיר גירסת ה-Enterprise פר Node הוא 1500$ לשנה (כפי שניתן לראות כאן, גללו לאמצע הדף). על מנת להרים מערכת Enterprise, תצטרכו לרכוש לפחות 5 רשיונות: manager, registry, cache – אלו הם חלקים שרצים כ-VM נפרדים ב-DDC, עוד Node ל-Worker (שעליו בתכל'ס רצים הקונטיינרים) ותצטרכו מינימום עוד אחד אם אתם רוצים שרידות ועמידה בעומסים. (אפשר כמובן להריץ את החלקים השונים כקונטיינרים, אבל Docker ממליצים להרים את החלקי ניהול כמכונות VM נפרדות), כלומר אנחנו מתחילים במחיר של 7500$ לשנה. כל Node נוסף – עוד $1500.

הבעיות עם DDC פחות קשורות לבאגים או תכונות, אלא בעיה כללית שיש לחברת Docker בכל מה שקשור ל-Enterprise. הבעיה הראשית שלהם מאוד מזכירה את ההתנהגות של חברת רד-האט בצעירותה: רד-האט היתה משחררת גירסת לינוקס חדשה כל שנה ושוברת את התאימות הבינארית בין גירסה לגירסה. גירסה 5 לא תאמה לגירסה 4, גירסה 6 לא תאמה ל-5, גירסה 7 היתה עולם אחר לגמרי שלא תאם לגרסאות קודמות מבחינה בינארית. כלי ניהול הגיעו ונעלמו כלעומת שבאו, ויצרני תוכנה וחומרה התעצבנו מכל המהלכים הללו והן הביעו את דעתן בשיחות מול רד-האט ובעיתונות הטכנולוגית. לקח לרד-האט במשך שנתיים להבין שהדרך הזו אינה מקובלת לא על יצרני תוכנה וחומרה, ולא על Enterprise וכך נולדה משפחת ה-RHEL (כאשר כל הפיתוחים ושבירת התאימות עברו לגירסת Fedora), וכיום RHEL ניתנת עם תמיכה ועדכונים ל-10 שנים. ב-Docker לעומת זאת, שבירת התאימות היא עניין שבשגרה לגבי מוצרי הקוד פתוח, ומה לגבי הגירסה המסחרית שחברות משלמות? אה, לזה הם מוכנים לתת עדכונים ותיקונים למשך .. שנה אחת. מי בדיוק ה-Enterprise שמוכן לקנות מוצר שיהיה לו תמיכה ותיקונים לשנה אחת בלבד ובשנה אחר כך ב-DDC תישבר התאימות? שאלה מעולה!

ב-רד האט, למודי הנסיון, הדברים שונים לחלוטין.

ברד-האט יודעים שחברות לא ששות כל כך מהר לשלם עבור מוצרים שמיועדים לסביבות פיתוח, טסטים, QA, סביבות אוטומציה וכל דבר שאינו פרודקשן, ולכן רד האט אומרת: קחו את מוצר ה-OpenShift Container Platform (ובקיצור: OSCP) בחינם או את גירסת OpenShift Origin היציבה (נכון להרגע זו גירסה 1.4, כל עוד אתה מארח את הכל על התשתית שלך או תשתית הענן שלך), רק תזכור – זה לא מקבל תמיכה! כלומר את OSCP אפשר להרים על הלאפטופ (מספיק מכונת VM אחת או על הפצת הלינוקס במכונה ללא VM) או בשרתים הפנימיים לפיתוח וכו'. מעוניין בגירסה מסחרית עם תמיכה? הנה המחירון של Grey Matter. כפי שאתם יכולים לראות, על כל Node המחיר הוא 2724 ליש"ט ואם ה-Node הוא שרת פיזי, המחיר הוא 6810 ליש"ט (זה לפני מו"מ כמובן) עם תמיכה לשנה, ויש גם מחיר ל-3 שנים תמיכה, סטנדרט או פרימיום.

כלומר אם נניח יש לך 4 מכונות VM בפרודקשן שיריצו את ה-OpenShift והקונטיינרים, ושאר המכונות הם פיתוח, טסטים וכו' ואתה רוצה שרות תמיכה מרד-האט למכונות הפרודקשן, אתה יכול לרכוש 4 רשיונות. זה בדיוק כמו שאצל חברות רבות שרתי הפרודקשן מריצים RHEL עם רשיונות ואילו שאר המכונות של העובדים, פיתוח, טסטים וכו' – מריצים CentOS.

בסופו של יום, 2 המוצרים מציעים טכנולוגיות שונות. האחת (DDC) משתמשת ב-Swarm כדי לנהל את ה-Scheduling, Load Balancing, FT וכו' ואילו השניה משתמשת ב-Kubernetes. רוצה לדעת מי יותר פופולרי? תשאל את המפתחים ואנשי ה-Devops בחברתכם מי מכיר מה, אתה תקבל תשובה מהר מאוד מדוע Kubernetes כה פופולרית (כי היא קלה להתקנה וניהול בהשוואה ל-Swarm). ה-OpenShift של רד-האט תומך בגדילה של עד 1000 Nodes, ועד 120,000 pods. במילים אחרות, עם מערכת OpenShift אחת אתה יכול תיאורתית לארח את האתרים ואפליקציות בגדלים ענקיים!

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

על תשתית קונטיינרים לחברות מסחריות

גילוי נאות
"חץ ביז" הינו עסק שמוכר שרותי אינטגרציה ויעוץ למספר מוצרים לתשתית קונטיינרים
מערכות קונטיינרים בפלטפורמות שונות (קרדיט: Wikibon)

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

אז אולי נתחיל בדבר הכי בסיסי: תשתית הוירטואליזציה אינה מתייתרת בגלל הכנסת קונטיינרים, אלא להיפך – תשתית הקונטיינרים משתמשת בפתרונות וירטואליזציה (ולא חשוב איזה פתרון וירטואליזציה יש לך!) כדי להריץ קונטיינרים. אפשר כמובן להתקין מערכת הפעלה על הברזל עצמו כמו Red Hat Atomic (או הגירסה החינמית מבוססת CentOS) ולהתקין עליה קונטיינרים, אבל אז בעצם .. איך תנהל את השרתים? מערכת Atomic לא מאפשרת להתקין תוכנות נוספות על הברזל עצמו אלא אך ורק להריץ קונטיינרים, לכן בד"כ הדבר המומלץ הוא להשתמש במערכת לניהול וירטואליזציה, ויצירת מכונות VM שעליהן ירוץ פתרון הקונטיינרים.

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

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

עתה נחלק ל-2 את החברות בארץ: יש כאלו שקוד פתוח זה "בעורקים" שלהם – יש להם צוותים שמכירים לינוקס מאוד לעומק, נסיון עשיר ב-Python ו-Go והם יכולים לקמפל לינוקס קרנל בין פיהוק למשנהו ואם יש בעיה בתוכנת קוד פתוח – מישהו בצוות יכול לחטט ולתקן. לאותן חברות שמחפשות פתרון קונטיינרים מקיף אני פשוט ממליץ ללכת על OpenShift Origin על תשתית וירטואליזציה ולהתחיל להשתמש. כל מה שאתם צריכים בשביל להריץ קונטיינרים, להקים, לבנות, Load balancing, HA וכו' וכו' – הכל כבר שם. תורידו מה-GIT ותתקינו ואין לכם צורך לשלם על כלום.

ב-95% מהמקרים האחרים – חברות בד"כ יעדיפו מוצר מסחרי עם תמיכה מלאה של היצרן, עדכונים מהיצרן וכו' וכאן בישראל נמכרים 2 מוצרים: Docker Datacenter שנמכר ע"י מטריקס ו-OpenShift שנמכר ע"י העסק שלי (אם כי, לשם הגילוי נאות וה"פרסומת", העסק שלי אינו היחיד שמוכר אותו, רק שכאן תקבלו משהו .. טיפה יותר מקצועי. הדגמות וידאו על Open Shift, אגב, בקרוב יופיעו בערוץ יוטיוב של חץ ביז).

מכיוון שאינני מרוויח רווחים גדולים ממכירות מוצרים, אין לי בעיה להיות הגון ולהמליץ אלו מהמוצרים לסיטואציות שונות:

  • אם אתם חושבים להקים מכמות של כמה מכונות בודדות (VM או פיזי) ועד כמה עשרות כאלו (הם נקראים Nodes) – אז מבחינת תמחור, ה-Docker Datacenter זול בהרבה מהפתרון עם OpenShift. בנוסף, אם מערכת ההפעלה העיקרית שלכם היא Windows והקונטיינרים שלכם יריצו קוד שרץ על מערכות מיקרוסופט – Docker Datacenter הוא הפתרון היחידי כרגע המתאים לפלטפורמות מיקרוסופט.
  • אם לעומת זאת אתם מתכננים על מאות Nodes ומעלה – הפתרון של OpenShift שווה יותר (וזול יותר)
  • אם אתם מעוניינים להקים תשתית חדשה לגמרי שתהיה נפרדת מתשתית הוירטואליזציה הנוכחית שלכם ושאותה תשתית חדשה תריץ קונטיינרים – אז אני ממליץ לרכוש את ה-OpenStack החדש (שם קוד: Magnum) שדואגת גם לתשתית כולה (Compute, Network, Storage, Authentication, Images וכו') וגם להרצת קונטיינרים, בניה, LB, HA וכו'. גם רד-האט וגם SuSE ישראל מוכרים את OpenStack Magnum. אינני יכול לפרסם מחירים של אף מוצר אבל מה שאני כן יכול לרמוז – זה שכדאי להתעניין אצל 2 הספקים במחירים. התחרות רצחנית!

כדאי לזכור משהו חשוב: אין מעבר קל בין Docker Datacenter ל-OpenShift. שתיהן אמנם משתמשות ב-Dockerfile כדי להרים קונטיינרים מבוססי Docker, אולם כל המערכות "מסביב" הינן שונות לחלוטין. ב-Docker Datacenter משתמשים ב-Docker Swarm ואילו ב-OpenShift משתמשים ב-Kubernetes. אפשר לייצא ולייבא קונטיינרים דרך סקריפטים אבל מנסיון – זה לא כיף גדול וזה די מורכב.

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

לחשוב בחיוב על העסקת עצמאים

 

הערה
הפוסט הזה נכתב בכלליות על עצמאים בתחום ההיי-טק בארץ.

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

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

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

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

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

סתם דוגמא מלפני מספר חודשים: ללקוח שלי ישנה מערכת שכתובה בשפה שאינני מכיר אותה מספיק טוב ויש בקוד מספר תקלות רציניות (הוא ידע על כך מראש והוא לא לקח אותי כדי לכתוב באותה שפה אלא לדברים אחרים לחלוטין). הצעתי לו שאחפש לו ללא תשלום מישהו אחר שיעשה ספציפית והוא ישלם לאותו לקוח בנפרד. הגיעו 2 הצעות מחברות, חברה אחת הציעה מחיר של 600 שקל לשעה עם מינימום 5 שעות עבודה, והחברה השניה הציעה 650 שקל לשעה (עם מינימום 4 שעות עבודה). סתם לשם השוואה, מאותו לקוח גביתי כ-300 ש"ח לשעה. בסופו של דבר מצאתי עצמאי שגבה מאותו לקוח 280 ש"ח לשעה עם מינימום 3 שעות עבודה (היו הרבה שעות עבודה בין כה). האם אותו לקוח חסך? בהחלט, בכך שהוא לקח את העצמאי לעשות את אותה עבודה (ואותו עצמאי בסופו של דבר קיבל מאותה חברה פרויקט גדול נוסף בעקבות עבודתו המעולה).

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

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

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