מהי התיאוריה של CAP ואיך היא קשורה לעולם הדאטה

shay Sarussi Elshten

מהי התיאוריה של CAP ואיך היא קשורה לעולם הדאטה

CAP Theorem

משפט CAP הוא אחד המשפטים היסודיים ביותר בתחום מערכות מבוזרות. הוא מתאר טרייד- אוף מובנה בעיצוב מערכות מבוזרות.


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

עקביות(Consistency )
עקביות אומרת שכל בקשת קריאה מוצלחת מקבלת את תוצאת בקשת הכתיבה האחרונה.
המושג של עקביות במשפט CAP שונה לחלוטין מהמושג של עקביות ב ACID.
(אם אתם לא מכירים את המושג ACID מוזמנים לקרוא את המאמר שלי על ACID Transactions and Stored Procedures)


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


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


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


סבילות חלוקה – (Tolerance Partition)
Tolerance Partition במערכת מבוזרת נוצרת כאשר מתרחש תקלת תקשורת בין ה leader ל follower כלומר ה leader לא מצליח לשלוח הודעות באופן תקין ל follower.
גורמים שונים יכולים לגרום לזה, כמו תקלות רשת, בעיות חומרה, או כל אירוע אחר שמונע מחלק מהצמתים לתקשר זה עם זה.
(אם אתם לא מכירים את המושג follower-leader מוזמנים לקרוא את המאמר שלי על רפלקציות)
אם במערכת קיים Tolerance Partition, זה אומר שהיא יכולה להמשיך לפעול למרות תקלות רשת, ובכך למנוע קריסה שלמה של המערכת.


במשפט CAP, נחשבת Tolerance Partition כמובנת מאליה. חשוב מאוד להבין שסבילות לחלוקה אינה תכונה שאנו יכולים לוותר עליה.
מדוע? התשובה פשוטה. האם אנחנו יכולים להבטיח במערכת מבוזרת בעולם האמיתי שאף פעם לא יהיה בה בעיות תקשורת, חומרה או כל דבר אחר?? – התשובה לא !!! רק בעולם מושלם.
לפיכך במערכת מבוזרת, תמיד קיים הסיכון לנפילת רשת. אם זה קורה, המערכת צריכה להחליט אם להמשיך לפעול ולפגוע בעקביות הנתונים, או להפסיק לפעול ולפגוע בזמינות.
כתוצאה מכך, מה שהמשפט CAP ״באמת״ אומר הוא:
ניסוח הסופי של משפט ה-CAP
לפי הניסוח הסופי של משפט ה-CAP, מערכת מבוזרת יכולה להיות עקבית או זמינה בהינתן שקיים סבילות חלוקה.
הוכחה:
בואו ננסה להוכיח את המשפט הזה באופן פשטני וסכמטי. בואו נדמיין מערכת מבוזרת המורכבת משני צמתים, כפי שמוצג באיור.

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

משתמש של המערכת מבצע כתיבה, ואז קריאה – אפילו שני משתמשים שונים יכולים לבצע את הפעולות הללו.
כעת למערכת יש שתי אפשרויות:
.1 המערכת יכולה להכשיל את אחת הפעולות, ולשבור את תכונת הזמינות (אבל להרוויח עקביות).
במקרה הראשון אני יכול להכשיל את פעולת הקריאה ע״י זה שנפיל את ה follower( כלומר הוא לא יהיה זמין יותר). נשים לב שבמקרה שאני אפיל את הfollower
אני יכול לנתב את התנועה שלי לצמתים אחרים וכך לבסוף לבצע קריאה.

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

משפט ה-PACELC

משפט ה-PACELC הוא הרחבה של משפט CAP, שכתוב במאמר נפרד. והוא קובע את הכלל הבא:
״במקרה של חלוקת רשת (Tolerance Partition), המערכת חייבת לבחור בין זמינות (Availability) לעקביות (Consistency)                                                                         אחרת (E), כאשר המערכת פועלת באופן רגיל בהיעדר חלוקת רשת, המערכת צריכה לבחור בין עיכוב (Latency) לעקביות (Consistency). "
וגם זה משפט שיחסית קל להסביר אותו:
במצב שאין לי שום הפרעה
*שימו לב שיש לנו כאן מצב שאין לנו בעיית תקשורת בין הצמתים

זוכרים שדיברנו במאמר של Replication על Replication Synchronous כנגד Replication Asynchronous
מוזמנים להיזכר כאן 
ֿ
מצד אחד אם ניישם Replication Synchronous נצליח להשיג זמינות (Availability)ועקביות (Consistency) אבל יהיה לה עיכוב (Latency),
מצד שני אם ניישם Replication Asynchronous אז נשיג זמינות (Availability)לא יהיה לי עיכוב (Latency)
אבל מצד שלישי נאבד את העקביות (Consistency).

מצד ימין אתם יכולים לראות איזה מהדטה- בייסים
ממשים את תכונות PACELC
Consistency – C
A – Availability
Partition Tolerance – P
E – else – if the system absence of network
partitions
Latency – L

הערה חשובה:
אם תכתבו Theorem CAP באינטרנט תראו המון מדריכים שאולי קצת שונים מההסבר שהבאתי לעיל, או שתראו מדריכים שממש מסבירים את מה שאני הסברתי פה.
בפוסט הבא של ממציא התיאוריה kleppmann.martin
יש תגובות ממש די מעניינות על נושא התאוריה של קאפ.
ובכלל התאוריה הזאת הרבה יותר עמוקה ממה שהבאתי פה על קצה המזלג (האיש הוציא ספר של 400 עמודים!!! על הנושא של עולם הדאטה-בייסים).
מקווה שנהנתם 🙂

פוסטים ומאמרים נוספים ניתן למצוא בדף הלינקדין shay Sarussi Elshten 

 

שתפו את הפוסט

דילוג לתוכן