דילוג לתוכן

סנכרון

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

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

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

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

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

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

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

coven שומרת כל ערך שהוחלף כערך אבוד; bae לא מציג אף אחד ולא מבטל אף אחד, ולכן אין ממשק התנגשות. כל מכשיר מתכנס לאותה תוצאה מכל סדר הגעה.

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

גרסאות סכמה

קישור למקטע הזה

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

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

מה הספק רואה

קישור למקטע הזה

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