rohit-tandon-105772-unsplash-reduced

יום שישי, קשינג ומה שביניהם

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

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

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

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

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

ניקח כדוגמא את מערכת Republish שם ישנם מספר מנגנוני קשינג ברמת המערכת ומעלה (מבלי להתייחס למגנוני קשינג של החומרה או של תשתיות התוכנה). לדוגמא:

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

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