האם ה-Backend הניתן להרחבה שלך הוא פצצה מתקתקת?

מפתחים רבים חושבים ש-scaling פירושו הוספת שרתים נוספים. הם משתמשים בכלים cloud-native ובמסדי נתונים מבוזרים כדי לטפל ביותר משתמשים. אך זה לעיתים קרובות יוצר בעיה חדשה. אתם לא בונים מבצר. אתם בונים בית קלפים.

Scaling אופקי ללא תוכנית רק מרחיב את ה-failure domains שלכם. אם למערכת שלכם חסרה fault tolerance, שגיאה קטנה אחת יכולה להפיל הכל.

עליכם להתמקד בשני תחומים כדי לבנות מערכת אמיתית:

  1. Fault Tolerance הוספת instances נוספים אינה מונעת כשלים מתואמים (correlated failures). עליכם לבודד כשלים כדי שלא יתפשטו.
  • השתמשו במספר Availability Zones.
  • פזרו instances קטנים של שירות במקום להשתמש בשניים גדולים.
  • השתמשו ב-quorum-based consensus כמו Raft או Paxos. זה מונע תרחישי split-brain שבהם שני אזורים חושבים שהם ה-leader.
  • השתמשו במנגנוני fencing כדי לכבות אזורים תקולים במהלך network split.
  1. Data Consistency eventual consistency מצוין למהירות. הוא נורא עבור לוגיקה עסקית קריטית. עבור תשלומים או יתרות בחשבון, אתם זקוקים ל-strong consistency.
  • אל תסתמכו על distributed transactions שמאטים את המערכת שלכם.
  • השתמשו ב-Transactional Outbox Pattern.
  • כתבו את הנתונים העיקריים שלכם ומשימת "outbox" למסד הנתונים המקומי שלכם בטרנזקציה אחת יחידה.
  • השתמשו ב-relayer כדי לשלוח את המשימות הללו לתור הודעות (message queue).
  • ודאו שהשירותים ה-downstream שלכם הם idempotent כדי שיוכלו לטפל בהודעות כפולות בצורה בטוחה.

scalability אמיתי עוסק ב-resilience. אם תתעלמו מעקרונות אלו, אתם רק בונים מגרש משחקים גדול יותר לכשלים. תכננו עבור תרחיש ה-worst-case כבר היום.

מקור: https://dev.to/prabashanadev/is-your-scalable-backend-a-ticking-time-bomb-6o7