How to choose between cache-aside, read-through, write-through, client-side, and distributed caching strategies כפי שציינו לאחרונה פוסט, אנחנו שמחים שפיקה אנברג החליטה לכתוב אנו גאים לתמוך בשלושת הפרקים האלה. למה להסתיר נתונים? ספר שלם על הלטיניות קבל את הספר Latency תמצית PDF קבל את הספר Latency תמצית PDF קבל את הספר Latency תמצית PDF כמו כן, Pekka רק שיתף קלטות מפתח מהספר הזה ב (היא זמינה כעת על פי בקשה) תגיות: Low Latency Apps בואו נמשיך את שלנו הספר מופיע במגוון פרקים נוספים מ-Pekka's Caching Chapter.It's reprinted here with permission of the publisher. איטיות * *עריכה בעת הוספת קישוריות ליישום שלך, עליך תחילה לשקול את אסטרטגיית הקישוריות שלך, אשר קובעת כיצד קריאות וכתובות מתרחשות מהקאש והאחסון הבסיסי, כגון מסד נתונים או שירות. במילים אחרות, כאשר היישום שלך מסתכל על ערך מהקאש, אבל הערך אינו שם או נעלם, אסטרטגיית הקאש מגדירה אם זה היישום שלך או הקאש שמחזיר את הערך מהחנות האחורית. תגית: aside caching Cache-side caching הוא כנראה האסטרטגיה הכי טיפוסית caching אתה תתמודד עם.כאשר יש כיבוי זיכרון, עיכוב גישה לנתונים נשלט על ידי עיכוב תקשורת, אשר הוא בדרך כלל קטן, כפי שאתה יכול לקבל קטע זיכרון קרוב על שרת זיכרון זיכרון או אפילו באזור זיכרון היישום שלך. עם זאת, כאשר יש מחסור במקלדת, עם חיבוי בצד המקלדת, המקלדת היא מחסן פסיבי מעודכן על ידי היישום, כלומר, המקלדת מדווחת רק על מחסור והיישום אחראי על איסוף נתונים מהחנות האחורית ועדכון המקלדת. תמונה 1 מציגה דוגמה ל-cache-aside caching בפעולה.An application looks up a value from a cache by a caching key, which determines the data the application is interested in. אם המפתח קיים במקלדת, המקלדת מחזירה את הערך הקשור למפתח, אשר יישום יכול להשתמש בו. עם זאת, אם המפתח אינו קיים או נעלם במקלדת, יש לנו אובדן המקלדת, אשר היישום חייב להתמודד עם. נניח שאתה מחובר למידע של המשתמש ומשתמש ב-ID המשתמש כמפתח החיפוש. במקרה זה, היישום מבצע שאילתה על ידי ה-ID המשתמש כדי לקרוא מידע של המשתמש מהבסיס. המידע של המשתמש שהוחזר מהבסיס מתהפך לאחר מכן לתבנית שניתן לאחסן ב-Cache. לאחר מכן, התבנית מתעדכנת עם ה-ID של המשתמש כמפתח ה-Cache והמידע כערך. Cache-aside caching הוא פופולרי כי זה קל להגדיר שרת cache כגון Redis ולהשתמש בו כדי לטעון שאילתות מסד נתונים ותשובות שירות. עם cache-aside caching, שרת cache הוא פסיבי ואינו צריך לדעת איזה מסד נתונים אתה משתמש או איך התוצאות מפותחות לכיסוי. ברוב המקרים, קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קי לדוגמה, אם יש לך מספר קוראים מקבילים המחפשים מפתח ב-cache, עליך להתאים את היישום שלך כיצד אתה מתמודד עם אובדן מקבילה מקבילה; אחרת, ייתכן שתגיע עם גישות מסד נתונים מרובות ועדכוני מקבילה, אשר עשויים להוביל לחיפושים מקבילים הבאים שמחזירים ערכים שונים. עם זאת, עם קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קישורי קיש קריאה באמצעות Caching קישוריות קריאה היא אסטרטגיה שבה, שלא כמו קישוריות קישוריות בצד, קישוריות היא מרכיב פעיל כאשר קישוריות קישוריות חסרות.כאשר קישוריות קישוריות חסרות, קישוריות קריאה מנסות לקרוא ערך עבור המפתח מהחנות האחורית באופן אוטומטי. איור 2 מציג דוגמה של קישוריות קריאה בפעולה.היישום מבצע חיפוש קישוריות על מפתח, ואם יש חוסר קישוריות, הקשייה מבצעת קריאה למסד הנתונים כדי לקבל את הערך עבור המפתח.הקשייה מעדכנת את עצמה ומחזירה את הערך לאפליקציה.מנקודת מבט של יישום, חוסר קישוריות קישוריות הוא נקי משום שהקשייה תמיד מחזירה מפתח אם קיים, ללא קשר אם היה חוסר קישוריות או לא. קריאת קייטרינג דרך היא מורכבת יותר ליישם כי קייטרינג צריך להיות מסוגל לקרוא את אחסון האחסון, אבל הוא צריך גם להפוך את תוצאות מסד הנתונים לתבנית עבור הקייטרינג. לדוגמה, אם אחסון האחסון הוא שרת מסד נתונים SQL, אתה צריך להמיר את תוצאות השאילתה לתבנית JSON או דומה כדי לאחסן את התוצאות ב- קייטרינג. עם זאת, מכיוון שהקאש מתאם את העדכונים ואת מסד הנתונים קורא עם קריאת דרך קח, זה יכול לתת אחריות עסקית ליישום ולהבטיח עקביות על פסולת קח במקביל.בנוסף, אם כי קח קריאה דרך הוא מורכב יותר מנקודת מבט של אינטגרציה יישום, זה מסיר את מורכבות ניהול קח מהיישום. כמובן, אותו אזהרה של קידוח זנב חלה על קידוח קריאה כפי שהם עושים עבור קידוח זנב. חריג: כמרכיבים פעילים, קידוח קריאה יכול להסתיר את הקידוח טוב יותר, למשל, עם קידוח עדכון קדימה. כאן, הקידוח מעודכן באופן אסינכרוני את הקידוח לפני שהערכים נופלים – ולכן מסתיר את קידוח הגישה של מסד הנתונים מהיישומים לגמרי כאשר ערך נמצא בקייסה. כתיבה באמצעות caching Cache-side and read-through caching are strategies around caching reads, but sometimes, you also want the cache to support writes. In such cases, the cache provides an interface for updating the value of a key that the application can invoke. In case of cache-side caching, the application is the only one communicating with the backing store and, therefore, updates the cache. However, with read-through caching, there are two options for dealing with writes: write-through and write-behind caching. קישוריות דרך כתיבה היא אסטרטגיה שבה עדכון לקישוריות מתפשט באופן מיידי לחנות האחסון. בכל פעם שהקישוריות מתעדכנות, הקישוריות מתעדכנות באופן סינכרוני את קישוריות דרך כתיבה עם הערך המוזכר. האינטנסיביות של קישוריות דרך כתיבה נשלטת על ידי האינטנסיביות של כתיבה לחנות האחסון, אשר עשויה להיות משמעותית. כפי שמוצג באיור 3, יישום מעדכן קישוריות באמצעות ממשק המסופק על ידי הקישוריות עם מפתח וזוג ערכים. קחי דרך כתיבה נועד לשמור על קחי דרך כתיבה ואת אחסון הסינכרון בסנכרון. עם זאת, עבור קחי דרך שאינם עסקיים, קחי דרך כתיבה וחנות דרך כתיבה עשויים להיות מחוץ לסנכרון בנוכחות שגיאות. לדוגמה, אם כתיבת דרך קחי דרך כתיבה מצליחה, אבל כתיבת דרך חנות דרך כתיבה נכשלת, השניים יהיו מחוץ לסנכרון. לדוגמה, אם אתה מתעדכן נתונים משתמש שבו מזהה המשתמש משמש כמפתח ומסמך JSON מייצג את הערך, אזהרה חייבת להיות מסוגלת להפוך את ייצוג JSON של מידע משתמש לעדכון מסד נתונים. עם ה- write-through caching, הפתרון הפשוט ביותר הוא לעתים קרובות לאחסן את JSON במסד הנתונים. החסרון העיקרי של ה- write-through caching הוא האינטנסיביות הקשורה לעדכוני ה- cache, אשר ביסודו של דבר שווה ל- database commit latency. עקבו אחרי caching caching אסטרטגיית ה- write-behind caching מעודכנת את ה- cache באופן מיידי, בניגוד ל- write-through caching, אשר מפנה את העדכונים של מסד הנתונים.במילים אחרות, עם ה- write-behind caching, ה- cache עשוי לקבל עדכונים מרובים לפני העדכון של אחסון האחסון, כפי שמוצג באיור 4, שבו ה- cache מקבל שלושה עדכונים של ה- cache לפני העדכון של מסד הנתונים. אינטנסיביות הכתיבה של קישוריות כתיבה מאחורי הכתיבה נמוכה יותר מאשר עם קישוריות כתיבה מאחורי הכתיבה, משום שהחנות האחורית מתעדכנת באופן אסינכרוני. כלומר, קישוריות הכתיבה יכולות להכיר את הכתיבה מייד ביישום, וכתוצאה מכך לכתוב באינטנסיביות נמוכה, ולאחר מכן לבצע את עדכון החנות האחורית ברקע. עם זאת, החסרון של קישוריות כתיבה מאחורי הכתיבה הוא שאתה מאבד את תמיכת העסקה משום שהחנות האחורית אינה יכולה עוד להבטיח כי קישוריות כתיבה מאחורי הכתיבה נמצאות בסנכרון. הלקוח בצד Caching אסטרטגיה לעיכוב בצד הלקוח פירושה שיש לה את המחיצה על שכבת הלקוח בתוך היישום שלך, בעוד ששרתים כמו Redis משתמשים במחיצת הזיכרון, היישום חייב לתקשר דרך הרשת כדי לגשת למחיצת הזיכרון באמצעות פרוטוקול Redis. אם היישום הוא שירות המופעל במרכז נתונים, שרת קישואים הוא מצוין עבור קישואים כי הסיבוב של הרשת בתוך מרכז נתונים הוא מהיר, ואת המורכבות של קישואים הוא בקאש עצמו. עם קישוריות בצד הלקוח, שילוב של קישוריות קריאה וכתבה מאחור הוא אופטימלי מנקודת מבט של עיכוב, כי הן קוראות והן כותבות במהירות. כמובן, הלקוח שלך בדרך כלל לא יוכל להתחבר למסד נתונים ישירות, אלא לגשת למסד נתונים באופן עקיף באמצעות פרוקי או שרת API. עבור יישומים רבים הדורשים קישוריות לקוח בצד הלקוח נמוכה, הגישה המקומית הראשונה לתיקון עשויה להיות מעשית יותר.אבל עבור קישוריות קריאה פשוטות, קישוריות בצד הלקוח יכול להיות פתרון טוב כדי להשיג קישוריות נמוכה. Caching מפוזר עד כה, דיברנו רק על קישוטים כאילו קיים דוגמה אחת של קישוטים. לדוגמה, אתה משתמש ב-Cache בתוך היישום או בשרת Redis יחיד כדי לקשט שאילתות ממסד נתונים של PostgreSQL. עם קישוריות מפוזרות כאלה, יש לך דוגמאות רבות של קישוריות שעובדות באופן עצמאי או בקבוצת קישוריות. עם קישוריות מפוזרות, יש לך הרבה מהסיבוכים והחששות האלה כפי שהוזכרו בפרק 4 על רבייה ופרק 5 על חלוקה. עם קישוריות מפוזרות, אתה לא רוצה להתאים את כל הנתונים המפוזרים על כל דוגמאות, אלא יש לך נתונים קישוריות מחולקים בין המשותפים. באופן כללי, קישוריות מפוזרות היא חזית של היתרונות והבעיות של קישוריות, חלוקת והרפיקה, אז היזהר אם אתה הולך עם זה. * *עריכה כדי להמשיך לקרוא, מתוך ScyllaDB או . הורד את הפרק 3 Latency Excerpt חינם לקנות את הספר המלא של Manning אודות Cynthia Dunlop סינתה היא מנהל בכיר של אסטרטגיה תוכן ב ScyllaDB. היא כותבת על פיתוח תוכנה והנדסת איכות במשך 20+ שנים.