עקביות ב-Cloud Storage

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

פעולות עם מודל עקביות חזק

Cloud Storage מספק מודל עקביות חזק גלובלי בשביל הפעולות הבאות:

  • הצגת קטגוריות
  • קריאה של קטגוריה אחרי יצירה
  • קריאה של קטגוריה אחרי עדכון מטא-נתונים
  • קריאה אחרי מחיקה של קטגוריה
  • קריאה אחרי כתיבה של אובייקט
  • קריאת אובייקט אחרי עדכון מטא-נתונים
  • קריאה אחרי מחיקה של אובייקט
  • הצגת אובייקטים

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

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

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

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

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

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

פעולות עם מודל עקביות הדרגתי

לפעולות הבאות יש מודל עקביות הדרגתי:

  • הענקת גישה למשאבים או ביטול גישה למשאבים.
  • יצירה מחדש של קטגוריות אחרי מחיקה.

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

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

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

בקרת המטמון ועקביות

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

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

פעולות אטומיות

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

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

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

המאמרים הבאים