חזרה לבלוג
טכנולוגיה3 בפברואר 20264 דקות קריאה

System Design Labs: ללמוד ע״י בנייה, לא קריאה

מחברות Python אינטראקטיביות ללימוד תבניות System Design דרך התנסות מעשית עם תשתית אמיתית.

#System Design#Python#Docker#Redis#PostgreSQL#ארכיטקטורה

מבוא

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

לכן יצרתי System Design Labs - אוסף של מחברות Jupyter אינטראקטיביות שמאפשרות להריץ, לשבור ולתקן מערכות מבוזרות אמיתיות על המחשב שלכם.

הבעיה עם לימוד System Design

גישות לימוד מסורתיות נכשלות מכמה סיבות:

קראתם ש-"optimistic locking עדיף כשהתנגשויות נדירות" - אבל מה זה באמת אומר? כמה זה נדיר? מה קורה כשההתנגשויות לא כל כך נדירות?

System Design Labs מאפשר לכם:

  • להריץ קוד אמיתי שמדגים כל תבנית
  • לראות כשלונות קורים ולהבין למה
  • להשוות גישות זו לזו עם מדדים אמיתיים
  • להתנסות בחופשיות ללא השלכות של production

מה בפנים

הריפו מכסה 7 תבניות מרכזיות עם 42 מחברות בסך הכל:

תבניתתיאורמחברות
עדכונים בזמן אמתPolling, SSE, WebSockets, Pub/Sub7
התמודדות עם Contentionנעילות, optimistic concurrency, CRDTs5
סקיילינג קריאותקאשינג, read replicas, materialized views6
סקיילינג כתיבותSharding, partitioning, write buffering6
טיפול בקבצים גדוליםChunked uploads, presigned URLs, CDN6
משימות ארוכותתורים, workers, DLQ, backpressure6
תהליכים מרובי שלביםWorkflows, sagas, Temporal6

טעימה: בעיית כרטיס הקונצרט

אחת המחברות האהובות עליי מדגימה race conditions עם תרחיש של כרטיס קונצרט:

ציר זמן של Race Condition:
────────────────────────────────────────────
הבקשה של אליס          הבקשה של בוב
────────────────────────────────────────────
קריאה: "1 מושב פנוי"           
                         קריאה: "1 מושב פנוי"
בדיקה: 1 >= 1 ✓                    
                         בדיקה: 1 >= 1 ✓
עדכון: מושבים = 0        
                         עדכון: מושבים = -1
                         
תוצאה: שניהם קיבלו את אותו מושב! 🔥
────────────────────────────────────────────

אתם לא רק קוראים על זה - אתם מריצים את הקוד וצופים בו נכשל. אז אתם מיישמים פתרונות: pessimistic locking, optimistic concurrency, ונעילות מבוזרות. אתם רואים בדיוק מתי כל גישה עובדת ומתי לא.

תשתית אמיתית כלולה

כל תבנית מגיעה עם Docker Compose לשירותים אמיתיים:

שירותמטרה
PostgreSQLפעולות מסד נתונים, טרנזקציות, נעילות
Redisקאשינג, תורים, pub/sub, נעילות מבוזרות
MinIOאחסון blob תואם S3
Temporalאורקסטרציית workflows
Adminerויזואליזציה למסד נתונים
RedisInsightניטור Redis

כל כלי הויזואליזציה כלולים - אתם יכולים לצפות בנעילות נרכשות, מפתחות cache פגים, והודעות זורמות דרך תורים בזמן אמת!

יישומים בעולם האמיתי

אלה לא תבניות תיאורטיות - אלה פתרונות שעברו מבחן קרב בחברות שאתם מכירים:

חברהבעיהתבנית בשימוש
Ticketmasterהתנגשויות בהזמנת מושביםPessimistic locking
Instagramמונה לייקים בפוסטים ויראלייםמונים מבוזרים
YouTubeמיליארדי עדכוני צפיותאגרגציה היררכית
Uberמיקום נהגים בזמן אמתWebSockets + pub/sub
WhatsAppמסירת הודעותSSE + presigned URLs

התחלה מהירה

להתחיל לוקח רק 3 פקודות:

# שכפול הריפו
git clone https://github.com/ShonP/system-design-patterns.git
cd system-design-patterns

# בחירת תבנית (לדוגמה real-time-updates)
cd patterns/real-time-updates

# הרצת התשתית ופתיחת המחברות
docker compose up -d
pip install -r requirements.txt
jupyter notebook notebooks/

דרישות מקדימות: Python 3.10+, Docker & Docker Compose, uv (מומלץ) או pip

מסלול לימוד

אני ממליץ לעבור על התבניות בסדר הזה:

  1. עדכונים בזמן אמת - קונספטים בסיסיים (HTTP, WebSockets)
  2. התמודדות עם Contention - קריטי לכל מערכת רב-משתמשית
  3. סקיילינג קריאות - בעיית הסקיילינג הנפוצה ביותר
  4. סקיילינג כתיבות - כשקריאות לא מספיקות
  5. משימות ארוכות - יסודות עיבוד אסינכרוני
  6. קבצים גדולים - תבניות לטיפול במדיה
  7. תהליכים מרובי שלבים - אורקסטרציה מתקדמת

נסו בעצמכם

תפסיקו לקרוא על System Design. תתחילו לבנות אותו.

🚀 התחילו כאן: github.com/ShonP/system-design-patterns

כל מחברת בנויה על הקודמת, כך שאתם מפתחים הבנה עמוקה במקום היכרות שטחית. תשברו דברים. תתקנו אותם. ככה לומדים באמת.