הדף הזה מסביר לאילו פעולות ב-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 מספק ערבויות אטומיות לרוב הפעולות שכוללות אובייקטים נפרדים, כמו העלאת אובייקט, עדכון המטא-נתונים של אובייקט, החלפת אובייקט ומחיקת אובייקט. לדוגמה, אם העלאת אובייקט נקטעת בגלל כשל ברשת, לא מתבצעת העלאה של נתונים חלקיים לקטגוריה. האובייקט יהיה גלוי בקטגוריה רק אחרי שההעלאה כולה תושלם בהצלחה והשרת ישלח תגובה של הצלחה.
בקשות למחיקה של כמות גדולה, שמצברות פעולות נפרדות לבקשה אחת, הן לא אטומיות, כי יכול להיות שחלק מהפעולות שנכללות במחיקה של כמות גדולה ייכשלו וחלקן יצליחו.
שמירה במטמון עלולה לגרום לכך שתקבלו גרסאות לא עדכניות של אובייקט, ואם תבצעו קריאות בטווח בלי לציין מספר דור, הנתונים עלולים להיפגם אם האובייקט יידרס בין קריאות בטווח עוקבות. מומלץ להשתמש בתנאים מוקדמים כדי לוודא שאתם מאחזרים את הגרסה הנכונה של האובייקט.
המאמרים הבאים
- מידע על השימוש בתנאים מוקדמים כדי למנוע מרוץ תהליכים.
- מידע נוסף על שמירה במטמון ב-Cloud Storage
- הנחיות לגבי קצב בקשות ופיזור גישה