System Design Labs: ללמוד ע״י בנייה, לא קריאה
מחברות Python אינטראקטיביות ללימוד תבניות System Design דרך התנסות מעשית עם תשתית אמיתית.
מבוא
ראיונות System Design ידועים לשמצה. שואלים אותך על סקיילינג של מסדי נתונים, טיפול בכתיבות מקבילות, או בניית מערכות התראות בזמן אמת. רוב ההכנה כוללת קריאת בלוגים וצפייה בסרטונים. אבל יש בעיה: אי אפשר באמת להבין מערכות מבוזרות עד שלא שוברים אותן.
לכן יצרתי System Design Labs - אוסף של מחברות Jupyter אינטראקטיביות שמאפשרות להריץ, לשבור ולתקן מערכות מבוזרות אמיתיות על המחשב שלכם.
📦 קוד מקור: github.com/ShonP/system-design-patterns
הבעיה עם לימוד System Design
גישות לימוד מסורתיות נכשלות מכמה סיבות:
קראתם ש-"optimistic locking עדיף כשהתנגשויות נדירות" - אבל מה זה באמת אומר? כמה זה נדיר? מה קורה כשההתנגשויות לא כל כך נדירות?
System Design Labs מאפשר לכם:
- להריץ קוד אמיתי שמדגים כל תבנית
- לראות כשלונות קורים ולהבין למה
- להשוות גישות זו לזו עם מדדים אמיתיים
- להתנסות בחופשיות ללא השלכות של production
מה בפנים
הריפו מכסה 7 תבניות מרכזיות עם 42 מחברות בסך הכל:
| תבנית | תיאור | מחברות |
|---|---|---|
| עדכונים בזמן אמת | Polling, SSE, WebSockets, Pub/Sub | 7 |
| התמודדות עם Contention | נעילות, optimistic concurrency, CRDTs | 5 |
| סקיילינג קריאות | קאשינג, read replicas, materialized views | 6 |
| סקיילינג כתיבות | Sharding, partitioning, write buffering | 6 |
| טיפול בקבצים גדולים | Chunked uploads, presigned URLs, CDN | 6 |
| משימות ארוכות | תורים, workers, DLQ, backpressure | 6 |
| תהליכים מרובי שלבים | Workflows, sagas, Temporal | 6 |
טעימה: בעיית כרטיס הקונצרט
אחת המחברות האהובות עליי מדגימה 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 |
| מונה לייקים בפוסטים ויראליים | מונים מבוזרים | |
| YouTube | מיליארדי עדכוני צפיות | אגרגציה היררכית |
| Uber | מיקום נהגים בזמן אמת | WebSockets + pub/sub |
| מסירת הודעות | 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
מסלול לימוד
אני ממליץ לעבור על התבניות בסדר הזה:
- עדכונים בזמן אמת - קונספטים בסיסיים (HTTP, WebSockets)
- התמודדות עם Contention - קריטי לכל מערכת רב-משתמשית
- סקיילינג קריאות - בעיית הסקיילינג הנפוצה ביותר
- סקיילינג כתיבות - כשקריאות לא מספיקות
- משימות ארוכות - יסודות עיבוד אסינכרוני
- קבצים גדולים - תבניות לטיפול במדיה
- תהליכים מרובי שלבים - אורקסטרציה מתקדמת
נסו בעצמכם
תפסיקו לקרוא על System Design. תתחילו לבנות אותו.
🚀 התחילו כאן: github.com/ShonP/system-design-patterns
כל מחברת בנויה על הקודמת, כך שאתם מפתחים הבנה עמוקה במקום היכרות שטחית. תשברו דברים. תתקנו אותם. ככה לומדים באמת.