GH GambleHub

אלגוריתמי קונצנזוס

1) מהו קונצנזוס ומדוע הוא נחוץ

קונסנזוס - משא ומתן על אותו ערך/רצף ערכים בין צמתים מרובים לכישלונות ועיכובים. באופן מסורתי, הבעיה של שכפול מצב (State Machine Reception, SMR) נפתרת: יש מכונת מצבים דטרמיניסטית וסדר פעולות כללי.

הבחנה:
  • קונסנזוס (SMR): סדר פקודות כולל אחד = = אחסון/רישום ליניארי, אשכול metadata, מתאם העברות.
  • פעולות קוורום ללא סדר מוחלט (Dynamo-like, CRDT): לאפשר דיברגנץ ומיזוג לאחר מכן; אין להחליף את הקונצנזוס במקום בו דרושה סריאליזציה עולמית.

2) מודל זמן וכישלון

2. מודל זמן 1

רשת אסינכרונית: עיכובים הם בלתי מוגבלים; משפט FLP אינו יכול להבטיח ביטחון ולביאה ללא הנחות נוספות.
לאחר T לא ידוע, המערכת ”מתנהגת” בצורה סינכרונית - רוב האלגוריתמים (רפסודות, פאקסוס) מסתמכים על כך.
סינכרוני: מגבלות זמן קפדניות לערוצים (לעיתים נדירות במכירות, למעט רשתות מיוחדות/PRT).

2. 2 מודל כישלון

צומתי יכול ליפול/לתלות אבל לא להתנהג בזדון.
צמתים יכולים לשקר/לזייף הודעות. דורש 3f + 1 קשר לסובלנות f ביזנטית.

3) מאפייני הקונסנזוס

בטיחות: עקביות (שני צמתים נכונים לא יפתרו ערכים שונים).
אם הרשת היא ”בריאה”, פתרון מושג.
ליניאריזביליות (ליניאריות): פעולות ”נתפסות” כאטומיות בסדר יחיד.
עמידות: החלטות המתקבלות אינן מגולגלות לאחור (log/quorum protection).

4) קוורומים, מוקדים וצמתים

בעולם ה-CFT, הקלאסי: quorum> N/2. רשומות ובחירות מנהיג להשתמש חציית מניין, כך שני הפעולות ”תקפות” לא לסכסך.
בעולם BFT: מניין 2f + 1 של 3f + 1 מספק צומת של לפחות f + 1 צמתים ישרים.

כלל מעבר: כל שני מניין חייב להיות בעל צומת הוגן משותף 1 (CFT) או f + 1 (BFT).

5) שכפול מצב (יישום רישום +)

פקודות מתווספות לרישום עם מזהים (index/era). עיקרון: "תחילה מסכים על רישום (מחייב), ואז דטרמיניסטי על המדינה. "כדי לשלוט בצמיחה, לעשות:
  • Snapshots (פרוסה מהמצב שאחריו ניתן למחוק את הרישומים המוקדמים).
  • דחיסה יומנית וטריאם יומן.
  • בדיקת דטרמיניזם (אותה גרסת קוד/הגדרה).

6) מנהיגות ומזימות שאינן מנהיגות

מנהיגות (Rapt, Multi-Paxos, ZAB): מנהיג אחד מקליט רשומות פי יותר קלות מבחינה מנטלית ומבחינה אופרטיבית.
מנהיג/רב-מנהיג (EPaxos, Caesar): יותר מקביליות וסובלנות למנהיג, אבל יותר קשה ליישם ולפתרון-קונפליקט; רווח גלוי לעימותים קטנים של צוותים.

7) אלגוריתמי CFT קלאסיים

7. 1 Paxos/Multi-Paxos (ופרקטיקות)

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

תכונות:
  • גמיש אבל קשה ליישם מודל.
  • הגדרות מחדש באמצעות רשומות מיוחדות (קונצנזוס משותף).
  • בפועל, ספריות/מנועים (דור Chubby/Spanner).

7. 2 רפסודה

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

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

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

7. 3 ZAB (שידור אטומי שומר )/שכפול חותמת צפייה (VRR)

ZAB: מוביל משדר עסקאות, שלב התאוששות, zxid (אינדקס epoch +).
VRR: "Views' עם העתק עיקרי, בדומה ל-Multi-Paxos ברוח.

8) Non-Leader/Multi-Leader CFTs

8. 1 EPaxos

אין מנהיג קבוע: כל צומת יכול ליזום פקודה.
צוותי קונפליקט מקבלים סדר חלקי; ללא סכסוך - להתחייב 1-2 RTT מקומי.
רווח בהתפלגות גאו עם קונפליקט נמוך, אבל תלות/קודי גרף מורכבים.

8. 2 קיסר, מנסיוס

וריאציות שמייעל איזון/איזון והפעלת WAN.

9) אלגוריתמי BFT ומשפחת POS

9. 1 PBFT (BFT מעשי)

שלושה שלבים (הכן/הכן/התחייב), דורשים 3f + 1 קודקודים.
איחור נמוך ברשתות מקומיות, כבישים רבי שלבים והודעות O (N).

9. 2 Tendermint (סגנון BFT-POS)

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

9. 3 דברים חמים (ונגזרות)

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

9. 4 PoW/קונצנזוס מצטבר (בקיצור)

לא BFT במובן הקפדני, אלא התכנסות הסתברותית (השרשרת עם הכי הרבה עבודה). יתרונות: פשטות/פתיחות; חסרונות: אנרגיה, ~ שניות דקות עד סופיות.

10) קורא: לינארי, רציף, ומטמון

ליניארי קורא: Leader עם חכירה פעילה או באמצעות Read-index (רפסודה) = אישור באמצעות מניין.
ניתן לקרוא אותו מכל צומת, אך ללא ערבויות של רעננות.
העוקב קורא: מותר תחת דרישות חלשות; עבור מטמונים - בסדר.

11) הגדרות מחדש (שינוי הרכב אשכול)

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

12) ביצועים וכיוונון

12. עיכובים 1

אלגוריתמי מנהיגות: 1 RTT לכל כתב (עם מוביל יציב) + שכפול.
הפצה גאוגרפית: WAN RTT שולט = = שימוש באזורים מקומיים + שכפול חוצה-אזורי או גישות EPaxos/HotStuff.

12. 2 תפאורה

חבורה (מקבץ פקודות), נספחים מקבילים, מטמון דף יומן, יישום מקביל (כאשר מבצעים מתחלפים).
דיסקים: NVMe/Log על התקן נפרד, 'O _ Direct '/AIO, מרווח גדול' fsync 'עם הגבלות SLA (פשרת עמידות/איחור).

12. 3 פלי 99

הימנע מקשרים חמים (תמיד יש מנהיג אחד): סיבוב תקופתי או קריאה-לפרוק על עוקבים.
Monitor GC Pauses (JVM/Go), CPU pins, NUMA.

13) גאוגרפיה וטופולוגיות

1 אזור, 3 אזורים: אשכול CFT קלאסי (N = 3/5).
2 אזורים: להימנע - אין מניין אמין ב 1-1 פיצול.
3 + אזורים: מוביל באלגוריתמים ”באמצע” או ללא הנהגה; חזיתות אזוריות/מקומיות עם יומן אסינכרוני אפשריות.

14) סוגיות מעשיות

14. 1 צילומים והתאוששות

סף לפי גודל היומן/מספר העסקאות.
העברה של תמונה לצמתים חדשים; בדיקת צ 'קסום.

14. 2 ניטור

מנהיגות: מי המנהיג, כמה מונחים השתנו.
Signative: "append _ latency", "polise _ index - applied_index'.

בריאות מניין: ”האם הרוב בחיים/2f + 1?”

גודל רישום/מהירות דחיסה, תור תמונות.

נתח הצבעה, חתימות זרוק, עיכובי QC

14. 3 אבטחת קוד/עקביות

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

15) אנטי דפוסים

שימו את הקונסנזוס ”למען האופנה” שבו די בקריאת DBMS או מניין ללא סריאליזציה.
Mix CP ו ־ AP ללא גבולות ברורים (CAP) # UX בלתי צפוי.
הערכת יתר של PoW/POS עבור משימות יזמות עם עשרות צמתים (קשה/יקר).
התעלם מהתצורה מחדש ו ”צומת מניין” כאשר ההרכב משתנה.
מחסור במחסום קריאה (חכירה/קריאה) = קריאה מלוכלכת.
הפעלת אשכולות 2-צומת (ללא רוב).
ממעיט בערכו של דיסקים ו ־ fsync: ”הכל עף בזיכרון” - עד האתחול הראשון.

16) רשימת בדיקות בחירה

1. מודל כישלון: CFT (קריסות) או BFT (זדוני)?
2. גאוגרפיה: אזור אחד/שלושה אזורים או WAN? אר-טי-טי מחליט.
3. קריאת סמנטיקה: האם קריאות לינאריות נחוצות? חכירה/קריאה-אינדקס/המשך.
4. עומס: ציפיות ב ־ p50/p99, תפוקה; האם יש צורך במנהיגות מרובה.
5. מורכבות תפעולית: Library/off-the-shef engine (etcd/ZK/Consul/Raft-liebs) נגד יישום מקומי.
6. הגדרה מחדש: תכוף? אנחנו צריכים קונצנזוס משותף וכלי נדידה.
7. אינטגרציה: תופעות לוואי חיצוניות - האם יש סיף על ידי epoch/מונח?
8. אבטחה: אימות מארח, הצפנת ערוץ, בקרת גירסה פרוטוקול.
9. ספרי משחק: מחיצה, ג 'י-סי-סטופ, המנהיג ההרוג, הדיסק האיטי, השעון.
10. תצפית: Leader/Lags/Journal and Assess Metrics מוגדרים.

17) מיני-מדריך: מתי לקחת מה

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

& gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & gt; & g

Dynamo-like/CRDT כאשר אין צורך בקונסנזוס, אך נגישות/קנה מידה עם מיזוג לאחר מכן חשובה.

18) דוגמאות של ממשקים (פסאודו)

18. רישומים מחויבים 1 (סגנון רפסודה)

pseudo client -> leader: Propose(cmd)
leader. appendLog(cmd)
leader. replicateToQuorum()
if quorum_acked:
leader. commit(index)
leader. apply(index)
leader. reply(client, ok)

18. 2 קריאה-אינדקס לקריאה לינארית (רפסודה)

pseudo client -> any: LinearizableRead node -> leader: ReadIndex?
leader -> quorum: Heartbeat (barrier)
leader -> node: ReadIndex=commit_index node. wait_until(applied_index >= ReadIndex)
node. reply(client, state_at(ReadIndex))

18. 3 תצורה משותפת

pseudo old_conf + new_conf # quorums must intersect commit (entries under joint)
switch_to(new_conf)

18. 4 BFT (חומר חם משוער)

pseudo propose(block)
collect votes -> QC lock on highest QC commit when have consecutive QCs across phases

19) FAQ

קיו: למה לא להשתמש בשני קשרים ושובר שוויון?
א ': שני צמתים ללא פוסק שלישי לא נותנים מניין בחלוקה. יש צורך ב- 3 (CFT) או 3f + 1 (BFT).

קיו: מהו פסוס ”הפשוט” יותר? ‏

א ': פירוק ברור, אינווריאנטים מובנים של הלוג והתצורה; קל יותר ליישם ולשמור.

קיו: איך אתה קורא מהר בלי להעמיס את המנהיג?
A: Follower-reades (ברצף) עבור לא-ביקורתי, או חכירה-קריאה/קריאה-אינדקס עבור ליניארי; מטמון.

קיו: מה הורג את פי ־ 99? ‏

א ': WAN-RTT, Disk fsync, GC-stop, מנהיג חם מדי, תמונות גדולות בשעת העומס.

Q: האם המטמון/קטלוג זקוק לקונסנזוס?
א ': אם מספיק בסופו של דבר עקביות - לא. אם נדרשים ביקושים עסקיים, כן.

20) סיכומים

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

Contact

צרו קשר

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

התחלת אינטגרציה

Email הוא חובה. Telegram או WhatsApp — אופציונליים.

השם שלכם לא חובה
Email לא חובה
נושא לא חובה
הודעה לא חובה
Telegram לא חובה
@
אם תציינו Telegram — נענה גם שם, בנוסף ל-Email.
WhatsApp לא חובה
פורמט: קידומת מדינה ומספר (לדוגמה, +972XXXXXXXXX).

בלחיצה על הכפתור אתם מסכימים לעיבוד הנתונים שלכם.