האם ה-Backend הניתן להרחבה שלך הוא פצצה מתקתקת?
מפתחים רבים חושבים ש-scaling פירושו הוספת שרתים נוספים. הם משתמשים בכלים cloud-native ובמסדי נתונים מבוזרים כדי לטפל ביותר משתמשים. אך זה לעיתים קרובות יוצר בעיה חדשה. אתם לא בונים מבצר. אתם בונים בית קלפים.
Scaling אופקי ללא תוכנית רק מרחיב את ה-failure domains שלכם. אם למערכת שלכם חסרה fault tolerance, שגיאה קטנה אחת יכולה להפיל הכל.
עליכם להתמקד בשני תחומים כדי לבנות מערכת אמיתית:
- Fault Tolerance הוספת instances נוספים אינה מונעת כשלים מתואמים (correlated failures). עליכם לבודד כשלים כדי שלא יתפשטו.
- השתמשו במספר Availability Zones.
- פזרו instances קטנים של שירות במקום להשתמש בשניים גדולים.
- השתמשו ב-quorum-based consensus כמו Raft או Paxos. זה מונע תרחישי split-brain שבהם שני אזורים חושבים שהם ה-leader.
- השתמשו במנגנוני fencing כדי לכבות אזורים תקולים במהלך network split.
- 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