סקאלביליות לאביונים
מאת ימי גליק | 2 תגובותפיתוח סטארט אפ בשלביו הראשונים דורש התמקדות בפיתוח מהיר והצגת תוצאות. הבעיה היא כשהמיזם מתחיל להשיג תוצאות וכמות נאה של משתמשים מגיעים לאתר אך עדיין אין לכם תקציב ל- DBA או איש סרברים במשרה מלאה – והשרת שלכם קורס. פתרונות לסטארטפאים עמידים יש ללא סוף אך מה יעשו האביונים? כולם יגידו לכם לעשות Load Balancing ולארגן קונפיגורציה של מספר שרתים אבל האופרציה של הקמת תשתיות כאלה – כספית, מקצועית ומבחינת משאבי זמן – לא עומדת על הפרק (או שמא?). איך משפרים בקלות את הסקאלביליות ללא הוצאות ענק בחומרה ובאנשי מקצוע?
ישנם שלושה עקרונות יסוד שיעזרו לכם. הראשון והעיקרי שבהם הוא קיצור זמני תגובה. ככל שהפעולות הבודדות בשרת יבוצעו מהר יותר כך תחסך עבודה של השרת על מספר רב של משימות במקביל. ניהול מספר רב של משימות מקבילות מטיל עומסים קשים על הזכרון, המעבד והדיסק. שנאמר במקורותנו – כל המזרז פרוסס אחד כאילו זרז עולם ומלואו. השני, גם הוא לקוח מארון השרתים היהודי הוא "לא לפחד כלל" – אתם הולכים להדרש לצלילה להגדרות השרת ועדיף להגדיר כראוי שרת אחד מלשכפל תצורת שרת גרועה אל האינסוף. אל דאגה לרוב הבעיות בהן תתקלו ישנם פתרונות פשוטים (או פשוטים למחצה) ששוים את השקעת הזמן שלכם. השלישי הוא: צריך לדעת מתי לוותר ולפנות לפתרונות ביניים, כמו למשל לאחסן חלק מהתוכן בשרותים שנועדו לספק סקלאביליות, ועל כך בהמשך.
כדי לחסוך לכם את קריאת שאר המאמר הייתי מתחיל בהמלצה אחת: השתמשו בכל מנגנון Cache אפשרי בשרת הווב, בסיס הנתונים ושפת הפיתוח בהם אתם משתמשים. למנגנונים אלו שתי מטרות עיקריות: העברת הפעולות הנפוצות מהדיסק לזיכרון ואחזור תוצאות הפעולות הנפוצות כך שפעולה שבוצעה פעם אחת במשאבים גבוהים תפיק בפעם הבאה תוצאה כמעט ללא כל משאבים. לעיתים זה יהיה נטול כאבים לחלוטין ולעיתים ידרוש מכם קצת יותר עבודה אבל זה תמיד משתלם. ברמת שרת הווב אביא כדוגמה את APC, מערכת המתיישבת על שרתי Apache ושומרת את עיבודי קוד ה- PHP לשימוש חוזר. בעשרים דקות תוכלו להתקין את APC ולהביט בהשתאות בתוצאות.
עוד פעולה משמעותית להקלה על שרת הווב היא שמירת המדיה ודפי נחיתה סטטיים ב- CDN. אלו הם שירותים המתמחים באספקה יעילה של דפי ווב, תמונות, פלאש וכל קובץ ווב אפשרי מסביב לעולם. השרת שלכם מקצה משאבים לכל קריאה, בין אם לקוד מסובך ובין אם לתמונה בגודל פיקסל בודד. תנו למישהו אחר לטפל בתמונות (ובטח ובטח שבקבצים גדולים יותר) ופנו את השרת שלכם לטפל בדברים החשובים. בכמה עשרות עד מאות בודדות של דולרים לחודש תוכלו להציג דף כבד בשבריר מהזמן הנדרש לו היום – כמעט בכל מקום בעולם.
בסיס הנתונים הוא פעמים רבות החוליה החלשה בתהליך. עם חמישה משתמשים בו זמנית הוא מבצע את הקריאות כהרף עין גם אם פיתחתם ללא כל התחשבות בו, אך עם כמה מאות משתמשים במקביל הוא יכול להראות סימני מצוקה. אז מה אפשר לעשות? לחסוך בקריאות – והדרך הפשוטה ביותר לעשות זאת היא לא לקרוא לבסיס הנתונים. לכלי פיתוח רבים יש מערכות קאש פנימיות שמאפשרות לשמור תוצאות של דפים או רכיבים דינאמיים בקבצים סטטיים. אין סיבה שהתפריט הראשי (או המשני) של האתר שמשתנה פעם בחודש ייקרא מאות אלפי פעמים ביום מבסיס הנתונים. אין פיצ'ר כזה בכלי הפיתוח? צרו חלקי-דפים סטטיים בעצמכם. שימוש במנגנון שכזה יחסוך גם לשרת הווב שלכם זמן עיבוד יקר ומיותר של קוד.
ומה אם עדיין רב העומס על בסיס הנתונים? קינפוג שרת בסיס הנתונים הוא אומנות מורכבת אך ישנם כלים שיעשו עבורכם את מרבית העבודה. לסביבת לינוקס / mysql הייתי ממליץ על mysqltuner שלא רק מציג תמונה עדכנית ומאירת עיניים על מה קורה בשרת וכיצד הוא מתמודד עם העומס אלא גם מורה לכם כיצד בדיוק לפתוח את הסתימות בביצועים. הציל אותי ויציל אתכם.
הגעתם לקצה הדרך של שימוש בשרת אחד? עדיין יש מה לעשות במחיר יחסית סמלי. הפעולה הראשונה היא, במידה ועדיין לא עשיתם זאת, להפריד את שרת בסיס הנתונים משרת הווב. כך תוכלו להנות מביצועים מוגברים ועדיין לשלם רק על שני שרתים זולים. עדיין לחוץ? עומדות לפניכם שתי אפשרויות: מחשוב ענן או ריבוי שרתים בחווה. הנטיה הטבעית שלי, כמי שעבד עם "ברזלים" יותר מעשרים שנות עשיה מקצועית, היא להקים עוד ועוד שרתים אך למרבה הצער זאת האפשרות הפחות טובה. מרגע שהגעתם לשרת הווב השני שלכם אתם מתחילים להגדיל את כאב הראש שלכם עם כל שרת נוסף. בעיות חומרה, תכנה, סנכרון שרתים ועוד כהנה וכהנה עניינים. אם אתם בקטע של "עשה זאת בעצמך" אז אולי תמצאו בכך שעשוע אבל אם אתם רוצים לשמור את המרץ שלכם לדברים שבאמת חשובים לכם לכו על מחשוב ענן. אמנם יקח לכם יום יומיים של למידה כדי להבין מה קורה אבל היתרונות עצומים. להקים שרת חדש שהוא עותק מדוייק ומתפקד של שרת אחר לוקח דקותיים, לבצע Load Balancing ביניהם – עוד חמש דקות. להוסיף חמישה שרתים נוספים – עוד עשר דקות. הכל מנוטר, הכל מסודר ואתם משלמים על מה שאתם משתמשים בו בפועל – לא עוד עלות אחזקת ברזלים ליום סגריר. יש לכם קמפיין חשוב? תוכלו לבקש מהמערכת להוסיף לכם אוטומטית שרתים. נגמר הלחץ? היא תסיר אותם אוטומטית. הגעתם לגרסת שרת יציבה? שמרו אותה בצד. זהו חלומו של כל יזם והעלות נמוכה להפליא. שתי המובילות בשוק זה הן Amazon ו- RackSpace. בדקו אותן.
אלו היו שני הסנט שלי בעניין. אין גבול למה שאפשר לעשות כדי להוציא עוד תפוקה ממערכת מחשוב צנועה אבל אלו הם עיקרי הדברים כפי שאני חוויתי אותם.
יש לכם שיטות מעניינות משלכם? ספרו!


