שכפול נתונים

השוואה למושגים דומים

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

שכפול במערכות מבוזרות

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

שכפול בזיכרון משותף מבוזר

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

שכפול ראשי-גיבוי ושרתים ראשיים מרובים

גישות קלאסיות רבות לשכפול מבוססות על מודל ראשי-גיבוי בו להתקן אחד או לתהליך אחד יש שליטה חד צדדית על אחד או יותר תהליכים או התקנים אחרים. לדוגמה, השרת הראשי מבצע חישוב מסוים, מעביר את יומן עדכונים לתהליך גיבוי (שבהמתנה), שיכול לבצע את החישוב במקרה של כשל התהליך הראשי. גישה זו היא אחת הנפוצות ביותר עבור שכפול מסדי נתונים, למרות הסיכון כי אם חלק ביומן ייאבד במהלך הכישלון, הגיבוי לא יכול להיות במצב זהה לזה שהראשי היה בו וטרנזקציות עלולות ללכת לאיבוד.
חיסרון נוסף של גישת ראשי-גיבוי הוא הצורך בהגדרה של שני תהליכים היכולים להיות פעילים בזמן שרק אחד הוא למעשה מבצע את הפעולות כך שמתקבלת אמנם סובלנות לתקלות אבל העלות מוכפלת על מנת להשיג את התכונה הזו. מסיבה זו, החלו להיחקר באמצע שנות השמונים שיטות אלטרנטיביות של שכפול נתונים במערכות מבוזרות ומהן נוצרה קבוצה של אפשרויות שבהן קבוצת עותקים יכולה לשתף פעולה, בעוד כל תהליך מגבה את האחרים וכולם מתחלקים בעבודה.
ג'ים גריי ניתח את שיטת שכפול השרתים הראשיים המרובים במודול ההטרנזקציות ובסופו של דבר פרסם מאמר המצוטט רבות שנקרא  "The Dangers of Replication and a Solution". במאמר הוא טען כי אם לא ניתן לחלק את הנתונים בדרך טבעית כלשהי כך שניתן להתייחס למסד הנתונים כאל N מסדי נתונים הרי הקונפליקטים בבקרת המקביליות יביאו להרעה משמעותית בביצועים ברצינות מושפל וקבוצת העתקים כנראה תאט כפונקציה של N  ואכן הגישות הנפוצות ביותר עשויים לגרום להרעה בביצועים מסדר גודל של O(n³)‎ ולפיכך חלוקת הנתונים ניתנת לביצוע מעשי רק במצבים שבהם יש לנתונים יש מפתח חלוקה טבעי.
אולם למעשה המצב לא תמיד כל כך עגום, לדוגמה, ב־1985-1987, הוצע מודל וירטואלי סנכרוני והתקבל כסטדרנט שהיה בשימוש ב־Isis Toolkit, Horus, Transis, Ensemble, ־Totem, Spread, C-Ensemble ובמערכות Phoenix ו־Quicksilver והיווה את הבסיס עבור הסבלנות לתקלות של סטדרנט CORBA. כיום המודל משמש גם בלוגיקת השכפול שלIBM Websphere ושל Windows Server 2008 Enterprise clustering  של מיקרוסופט. הסינכרון הווירטואלי מאפשר את הגישה הרב ראשית בה קבוצה של תהליכים משתפת פעולה כדי למקבל היבטים מסוימים בתהליך העיבוד של הבקשה. אמנם בשיטה זו ניתן להשתמש רק עבור כמה צורות של נתונים בזיכרון אבל כאשר היא אפשרית אזי היא מאיצה את התהליך באופן התלוי ליניארית בגודל של הקבוצה.