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

המונולית שלך הופך לצוואר בקבוק בפריסה — כל שינוי דורש תיאום בין צוותים, ובאג בחיוב משבית את כל היישום. לחלופין, אתה בונה מערכת חדשה שבה יכולות שונות מתפתחות בקצבים שונים: ניהול הזמנות משתנה מדי שבוע, אך לוגיקת המלאי משתנה מדי רבעון. אתה זקוק לשירותים שניתן לפתח, לפרוס ולהרחיב באופן עצמאי, המתקשרים באמצעות אירועים ולא באמצעות קריאות API סינכרוניות שיוצרות שרשרות כשלים מדורגים.
Explore more design patterns and system architectures
אדריכלים שלנו יכולים לעזור לך לעצב ולבנות מערכות תוך שימוש בדפוס זה לדרישות הספציפיות שלך.
צרו קשרמיקרו-שירותים מונחי אירועים מפרקים מערכת לשירותים הניתנים לפריסה עצמאית המתקשרים בעיקר באמצעות אירועים אסינכרוניים. כל שירות מחזיק בנתונים שלו, מפרסם domain events כאשר המצב משתנה, ומגיב לאירועים משירותים אחרים. זה מבטל צימוד זמני — Service A אינו זקוק ל-Service B שיהיה פועל כדי לבצע את עבודתו. התבנית משלבת CQRS (Command Query Responsibility Segregation) להפרדת מודלי כתיבה וקריאה, event sourcing ללכידת היסטוריית שינויי מצב מלאה, ו-saga orchestration לניהול טרנזקציות מרובות שירותים ללא מנעולים מבוזרים.
הארכיטקטורה מתרכזת סביב event backbone (Kafka, EventBridge, או NATS) המנתב domain events בין שירותים. לכל שירות יש שלושה גבולות: command handler המעבד בקשות נכנסות ופולט אירועים, query handler המגיש היטלים ממוטבים לקריאה, ו-event processor המגיב לאירועים משירותים אחרים. saga orchestrator מתאם תהליכים עסקיים מרובי שלבים (למשל, מילוי הזמנה) על ידי האזנה לאירועים והוצאת compensating commands כאשר שלבים נכשלים.
| שכבה | טכנולוגיות |
|---|---|
| חישוב | Node.js (NestJS), Python (FastAPI), Go — לכל שירות בהתאם למאפייני העומס |
| הודעות | Apache Kafka (MSK), AWS EventBridge, NATS JetStream, RabbitMQ |
| נתונים | PostgreSQL (טרנזקציונלי), DynamoDB (מפתח-ערך), Redis (cache/נעילות), EventStoreDB |
| תזמור | Temporal (תזמור זרימת עבודה), AWS Step Functions, saga coordinator מותאם אישית |
| יכולת תצפית | OpenTelemetry (distributed tracing), Datadog, Jaeger, רישום מובנה (structured logging) עם correlation IDs |
| השתמש כאשר | הימנע כאשר |
|---|---|
| צוותים מרובים צריכים לפרוס באופן עצמאי בקצבים שונים | הצוות שלך מונה פחות מ-5 מהנדסים — מונולית מובנה היטב פשוט יותר לתפעול |
| חלקים שונים במערכת בעלי מאפייני סקאלינג שונים | אתה בונה MVP וצריך להשיק במהירות — מערכות מבוזרות איטיות לבנייה |
| אתה זקוק ל-audit trails חזקים ויכולות event replay | כל פעולה דורשת תגובות סינכרוניות ועקביות באופן חזק |
| לתחום יש bounded contexts טבעיים (הזמנות, תשלומים, מלאי) | התחום מצומד חזק — פיצולו יוצר מונולית מבוזר |
MicrocosmWorks אינו מפרק למיקרו-שירותים לפי שכבה טכנית (API service, data service, auth service). אנו מפרקים לפי גבולות דומיין באמצעות DDD (Domain-Driven Design) bounded contexts. לפני כתיבת קוד, אנו מריצים סדנת event storming כדי למפות domain events, commands, ו-aggregates — זה קובע את גבולות השירות, לא העדפות טכנולוגיות. הגרנו מונוליתים לארכיטקטורות מונחות אירועים עבור לקוחות ארגוניים, והלקח הנפוץ ביותר הוא: התחל עם פחות שירותים גדולים יותר ופצל מאוחר יותר, לא להיפך.
מודלים לא מריצים את עצמם. ה-Pipeline שמכשיר, מאמת, פורס ומנטר את המודלים שלך הוא המוצר האמיתי – המודל הוא רק תוצר אחד.
MicrocosmWorks מתכננת מערכות מונחות אירועים עם Message Brokers עמידים כמו Apache Kafka או Amazon EventBridge, השומרים אירועים עד שהצרכנים מעבדים אותם בהצלחה, מה שמבטיח אי-אובדן נתונים במהלך הפסקות פעילות. אנו מיישמים Dead-Letter Queues, מדיניות ניסיון חוזר עם Exponential Backoff, ו-Circuit Breakers כדי ש-Microservice כושל לא יחסום את כל צנרת האירועים. ברגע שהשירות במורד הזרם מתאושש, הוא מדביק פערים אוטומטית באירועים שלא עובדו ללא התערבות ידנית.
תקשורת מונחית אירועים היא הבחירה העדיפה כאשר השירותים שלך אינם זקוקים לתגובה מיידית, כאשר יש צורך לנתק את מחזורי הפריסה, או כאשר פעולה יחידה מפעילה מספר תהליכים עוקבים (downstream). MicrocosmWorks בדרך כלל ממליצה על תבניות מונחות אירועים עבור עיבוד הזמנות, צינורות הודעות, והזרמת נתוני אנליטיקה, תוך שמירה על APIs סינכרוניים עבור שאילתות המיועדות למשתמש הדורשות תגובות מהירות במיוחד (פחות משנייה). מערכות ייצור רבות שאנו בונים משתמשות בגישה היברידית עם קריאות סינכרוניות וכתיבות אסינכרוניות.
MicrocosmWorks משתמשת ב-partition-key-based ordering ב-Kafka topics כדי להבטיח שכל האירועים עבור ישות נתונה (כמו הזמנה ספציפית או משתמש) מעובדים ברצף על ידי אותו consumer instance. עבור תרחישים הדורשים cross-entity ordering, אנו מיישמים saga orchestrators עם idempotent event handlers שיכולים לעבד מחדש בבטחה הודעות שאינן בסדר. אנו גם מטמיעים vector clocks או sequence numbers ב-event payloads כדי שהצרכנים יוכלו לזהות וליישב קונפליקטים בסדר.
MicrocosmWorks מיישמת את תבנית ה-Saga עם טרנזקציות פיצוי, שבה כל מיקרו-שירות מפרסם אירועי דומיין לאחר השלמת הטרנזקציה המקומית שלו, ושירותים במורד הזרם מגיבים בהתאם או מפעילים פיצויי ביטול במקרה של כשל. אנו משלבים זאת עם תבנית ה-outbox שכותבת אירועים באופן אטומי לטבלת outbox מקומית לצד נתונים עסקיים, ולאחר מכן מפרסמת אותם באופן אמין ל-message broker. זה משיג עקביות אולטימטיבית ללא עונשי הביצועים והאמינות של two-phase commits.
MicrocosmWorks מבצעת אינסטרומנטציה לכל אירוע עם correlation IDs ו-distributed tracing headers באמצעות OpenTelemetry, מה שמאפשר לנו לדמיין את מחזור החיים המלא של business transaction בכל ה-microservices המשתתפים, בכלים כמו Jaeger או Grafana Tempo. אנו גם בונים event flow dashboards בזמן אמת המציגים throughput, consumer lag, ו-processing latency לכל שירות, מה שמקל על איתור bottlenecks. stack ה-observability הסטנדרטי שלנו כולל structured logging עם event metadata, כך שניתן לעקוב אחר כל אירוע בודד מ-producer לכל consumer תוך שניות.