הגדרת Memcached לשמירת מטמון של אפליקציית אינטרנט

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

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת Memcached לשמירת מטמון של אפליקציית אינטרנט
בינוני
מ- 1 יום עד 3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113
  • פיתוח אתר עבור SBH Partners
    פיתוח אתר עבור SBH Partners
    1201
  • פיתוח אתר עבור Red Pear
    פיתוח אתר עבור Red Pear
    619

מטמון Memcached: היכן אפליקציית האינטרנט מאבדת מהירות

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

זמן התגובה גדל באופן לינארי עם מספר המבקרים בו-זמנית, ומסד הנתונים מתחיל לבזבז משאבים על פעולות זהות במקום על עבודה מועילה.

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

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

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

מה נותן קישור Memcached בפרודקשן

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

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

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

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

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

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

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

מצבי עבודה של מטמון: השוואת גישות

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

כיצד לקרוא את הטבלה

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

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

מה זה נותן בפועל

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

בחירת המצב מתקבעת בקונפיגורציה ומתוארת בתיעוד — כדי שהמהנדס הבא לא יתלבט מדוע המפתח חי בדיוק כל כך הרבה ומה קורה בעת החמצה.

כיצד אנו מטמיעים מטמון Memcached: שלבי העבודה

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

  1. ביקורת האפליקציה ופרופיילינג. אנו אוספים תמונה לפי תעבורה אמיתית: עמודים חמים, שליפות כבדות, שיעור השאילתות החוזרות, והתנהגות תחת עומס שיא. בתוצר — רשימת מועמדים למטמון עם האפקט הצפוי עבור כל אחד.
  2. תכנון סכימת המטמון. אנו מגדירים מפתחות, מבנה אחסון, זמן חיים של רשומות וכללי invalidate: מה מתאפס בעת עדכון ישות, מה חי לפי טיימר, ומה אינו נשמר במטמון כלל. בנפרד אנו מתעדים אילו נתונים קריטיים להתיישנות — המטמון אינו נוגע בהם.
  3. הגדרת Memcached. אנו פורסים את השירות, מגדירים נפח זיכרון למטמון, מדיניות פינוי רשומות ומגבלות חיבורים. את התצורה אנו מתאימים לפרופיל העומס, ולא לפי ברירת מחדל — מכך תלוי שיעור הפגיעות.
  4. אינטגרציה עם האפליקציה. אנו מחברים את הלקוח, עוטפים את קטעי הקוד הנבחרים, ומוסיפים טיפול באי-זמינות של המטמון: בעת כשל האפליקציה ממשיכה לעבוד עם מסד הנתונים, ולא קורסת.
  5. בדיקת המטמון. אנו בוחנים את שיעור הפגיעות, זמן התגובה לפני ואחרי, והתנהגות בעת חימום ובעת איפוס. בנפרד אנו בודקים תרחישי invalidate — שהמשתמש אינו מקבל נתונים מיושנים.
  6. בדיקות עומס. אנו מריצים תרחישי שיא, ובודקים כיצד המערכת מתנהגת בעת הצפת זיכרון והפעלה מחדש של צומת המטמון.
  7. מסירה ותיעוד. אנו מוסרים תצורות, סכימת מפתחות, כללי invalidate והוראות תפעול — כדי שהתמיכה תוכל לעבוד עם המטמון בלעדינו.

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

מדיניות גישה ומפתחות מטמון: מה אנחנו מגדירים

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

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

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

במה שונה Memcached מ-Redis עבור מטמון?

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

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

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

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

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

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

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

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

מקרה בוחן: האצנו את האפליקציה פי שלושה באמצעות מטמון

הלקוח — שירות עם אזור אישי ופיד הזמנות — פנה בתלונה על ממשק "איטי". המדידות אישרו: חציון תגובת ה-API עמד על כ-900 מ"ש, ובשיא, כאשר מנהלים פתחו באופן המוני את רשימת הבקשות, הוא הגיע עד 2.5 שניות.

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

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

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

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

מדדים לפני ואחרי

מדד לפני אחרי
חציון תגובת API ~900 מ"ש ~300 מ"ש
תגובה בשיא העומס עד 2.5 שנ' עד 700 מ"ש
שאילתות למסד בדקה עד 1,800 ~400
עומס על המעבד של המסד 70–80% 25–30%

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

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

ספקות טכניים נפוצים בנוגע לקישוב

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

כיצד נתונים במטמון מתיישנים וכיצד זה נשלט?

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

כיצד להבטיח עקביות בין המטמון לבסיס הנתונים?

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

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

מה יקרה אם צומת הקישוב יקרוס?

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

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

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

נדון במשימת הקישור שלכם

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

תארו את המשימה — נחזור עם הערכה ותוכנית. מה כדאי לצרף לתיאור:

  • היכן כואב כעת: אילו עמודים או מתודות מגיבים לאט, תחת איזה עומס מתרחשת הדרדרות;
  • סטאק האפליקציה וגרסאות הרכיבים העיקריים — מזה תלוי בחירת הלקוח ואופן העבודה עם Memcached;
  • כיצד מאוחסנים הנתונים והאם קיימת כבר שכבת קישור (קבצית, in-memory, חיצונית);
  • פרופיל עומס: בקשות שיא בשנייה, יחס קריאה לכתיבה, שיעור המשתמשים המאומתים;
  • דרישות לרעננות הנתונים — היכן מותרת תגובה מיושנת בכמה שניות, והיכן לא;
  • תשתית: כמה שרתי אפליקציה, האם קיים צומת נפרד לקישור, כיצד בנוי הדיפלוי;
  • מגבלות: תקנות לגבי נתונים, דרישות לזמינות גבוהה, חלונות לשינויים.

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

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

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