סקירה כללית על רמת ביצועים בזיכרון
השכבה בזיכרון היא הגדרה ברמת האשכול שמשתמשת בצמתים מיוחדים. לפני שקוראים את הדף הזה, חשוב להבין מהם מופעים, אשכולות וצמתים. מומלץ גם לקרוא על המגבלות.
שכבת הזיכרון של Bigtable היא שכבת זיכרון משולבת כחלק מצומת Bigtable, שמאפשרת שכבות נתונים חלקות ומותאמות לעלויות על סמך דפוסי גישה וצרכי ביצועים, והכול דרך API יחיד. באמצעות גישה ישירה לזיכרון מרוחק (RDMA), שכבת הזיכרון של Bigtable מצמצמת באופן משמעותי את זמני התגובה, מפחיתה את נקודות החמות ומבטיחה תפוקה גבוהה לנתונים שרגישים לזמן האחזור. מידע נוסף זמין במאמר בנושא הסבר על הביצועים.
מתי כדאי להשתמש בשכבת הנתונים בזיכרון
מומלץ להפעיל את רמת הביניים בזיכרון במקרים הבאים:
- דרישות זמן אחזור של פחות מאלפית השנייה: עומסי עבודה שדורשים זמני אחזור של קריאה של פחות מ-1ms, בדרך כלל באמצעות הצבת פתרון מטמון בניהול עצמי לפני מסד נתונים.
- קריאות נקודתיות עם תפוקה גבוהה: אפליקציות עם דרישות תפוקה גבוהה של תעבורת קריאה בדגימות משנה ספציפיות של נתונים.
- הפחתת עומס בנקודות חמות: עומסי עבודה עם תפוקה גבוהה שעשויים לכלול עליות פתאומיות בתנועה או נקודות חמות במפתחות שורות מסוימים.
- אופטימיזציה של העלויות: תרחישים שבהם רוצים להפחית את מספר הצמתים של Bigtable על ידי העברת נפחי קריאה גבוהים לרמה חסכונית יותר בזיכרון.
איך פועלת שכבת הזיכרון
התמיכה בשכבת הזיכרון מסופקת על ידי צמתים של אחסון היברידי. הצמתים המיוחדים האלה מרחיבים את הפירוק של יכולות העיבוד והאחסון של Bigtable, וכוללים שכבת זיכרון עם תפוקה שניתנת להתאמה לעומס (scaling) אנכית. יכול להיות שיחלפו עד 30 דקות עד שהקצאת הצמתים של רמת הזיכרון הייעודית ב-Bigtable תושלם. במהלך התקופה הזו, Bigtable ממשיך להציג תנועה מאחסון קבוע.
אפשר להפעיל את שכבת הנתונים בזיכרון ברמת האשכול.
השכבה בזיכרון פועלת באופן הבא:
- קבלת נתונים ברמת הזיכרון: רמת הזיכרון מציעה התנהגות של קריאה דרך מטמון. שורות נכנסות לרמת הזיכרון עם פעולות קריאה דרך פרופיל אפליקציה שמוגדר לרמת הזיכרון. פעולת כתיבה מכל פרופיל אפליקציה מעדכנת את רמת הזיכרון אם נתוני השורה כבר נמצאים ברמת הזיכרון.
- מדיניות פינוי וביטול תוקף: השכבה בזיכרון משתמשת בפינוי לפי Least Recently Used (LRU) ברמת השורה, ומיישמת מדיניות ביטול תוקף של Time to Live (TTL) כדי למקסם את יחס הפגיעה בשכבה בזיכרון.
- שמירה במטמון של תשובות שליליות: השכבה בזיכרון זוכרת אם משאב חסר למשך תקופה מסוימת, כדי למנוע עומס יתר על העורף.
- אבטחה: השכבה בזיכרון תומכת בהצפנה במנוחה ובהעברה (TLS).
- שכפול: במופע מרובה אשכולות, רמות הזיכרון של אשכולות שונים לא מסונכרנות. כל רמת זיכרון קובעת באופן עצמאי אילו נתונים לטעון לזיכרון על סמך תנועת הקריאה שהיא מקבלת, לכן יכול להיות שבזיכרון של אשכולות שונים יהיו מפתחות שורות שונים. Bigtable טוען נתונים לזיכרון ממאגר ה-SSD של האשכול המקומי. פעולת כתיבה לשורה מעדכנת אותה בסופו של דבר בכל רמות הזיכרון שבהן היא נמצאת, בהתאם למודל השכפול הרגיל של Bigtable של מודל עקביות הדרגתי.
- התאמה אוטומטית של קבוצות Pod לעומס (VPA): שכבת הנתונים בזיכרון תומכת בהתאמה אוטומטית של קבוצות Pod לעומס ברמת הצומת, שפועלת לצד התאמה אוטומטית של Bigtable לעומס.
רמת הזיכרון האופטימלית לגישה לנתונים עדכניים עם ביצועים גבוהים. כדי לשמור על הביצועים האלה, רק הגרסאות העדכניות ביותר של שורה עם חותמת זמן נמצאות בשכבת הזיכרון. בקשות לגרסאות קודמות של נתונים, שנקראות גם תאים היסטוריים, מדלגות אוטומטית על רמת הזיכרון ומוגשות מאחסון קבוע.
עקביות הנתונים
ב-Bigtable, הנתונים בשכבת הזיכרון תואמים לנתונים הקבועים ב-SSD או בשכבת אחסון עם גישה לא תדירה. הארכיטקטורה ההיברידית הזו מאפשרת ל-Bigtable לספק מודל אחסון עקבי בכל רמות האחסון, כך שתוכלו לגשת לנתונים שלכם דרך אותו ממשק סמנטי, בלי קשר למיקום הפיזי שלהם ב-RAM או באחסון קבוע. אם מפעילים את רמת הביניים של Bigtable בזיכרון, נשמרת עקביות של קריאה-כתיבה ברמת האשכול.
שינוי גודל אנכי
הפעלת רמת הביניים בזיכרון מאפשרת לכל צומת להשתמש בשינוי גודל אנכי כדי לשנות את קיבולת התפוקה של רמת הביניים בזיכרון. כל צומת כולל 8 GB של RAM לרמת הביניים בזיכרון, ומתחיל עם קיבולת בסיסית של 40,000 קריאות לשנייה. כדי לנהל עליות פתאומיות בתנועה של קריאות נקודתיות, הצמתים יכולים להתרחב אוטומטית במרווחים של 40,000 קריאות לשנייה, ולהגיע למקסימום של 120,000 קריאות לשנייה לכל צומת.
תכונת ההרחבה האנכית הזו משולבת עם שינוי הגודל האוטומטי של Bigtable. אם הקיבולת המקסימלית של רמת הביניים בזיכרון הגיעה לכל הצמתים באשכול והשינוי האוטומטי של גודל האשכול פעיל, Bigtable מקצה באופן אוטומטי צמתים נוספים כדי לשפר עוד יותר את התפוקה של רמת הביניים בזיכרון.
המידרוג האנכי בצומת חל רק על קריאות בשכבת הזיכרון לשנייה, והוא פועל בין אם המידרוג האוטומטי ברמת האשכול מופעל ובין אם לא. חיוב על הגדלת הקיבולת (vertical scaling) מעבר ל-40,000 קריאות בסיסיות בשנייה מתבצע על ידי הכפלת העלות השעתית של הצומת. מידע נוסף זמין במאמרים בנושא תמחור ומגבלות.
מגבלות
ההגבלות הבאות חלות על רמת הביניים בזיכרון:
- השכבה בזיכרון דורשת אחסון SSD.
- רמת הביניים בזיכרון תומכת רק בפעולות קריאה נקודתיות ברמת השורה.
- השכבה בזיכרון לא משמשת לסריקות נתונים או לתמיכה בשאילתות SQL.
- פרופילי אפליקציות ברמת הזיכרון תומכים רק בניתוב של אשכול יחיד.
- הגודל המקסימלי של שורה בשכבת הנתונים בזיכרון הוא 1 MiB לכל מפתח שורה. Bigtable קורא שורות שחורגות מהמגבלה הזו מאחסון קבוע.
כדי להשתמש בשכבת הנתונים בזיכרון, צריך להשתמש בגרסאות הבאות של ספריות הלקוח של Bigtable:
- Java גרסה 2.77.0 ואילך
- BOM גרסה 26.80.0 ואילך
- גרסה 1.52.0 ואילך של Go
אין תמיכה בספריות לקוח אחרות.
בקטעי נתונים שמופעלים בהם מפתחות הצפנה בניהול הלקוח (CMEK) לא ניתן להשתמש בשכבת הנתונים בזיכרון.
השכבה בזיכרון מוגבלת ל-10 צמתים לכל היותר לכל אשכול.