הגירה אסטרטגית ממונולית למיקרו-שירותים. אנו מפרקים יישומים מונוליתיים למיקרו-שירותים ניתנים להרחבה תוך שימוש בתבניות מוכחות ובגישות מצטברות.
התחילו
פירוק מונולית למיקרו-שירותים הוא אחד השינויים הארכיטקטוניים בעלי הסיכון הגבוה ביותר והתגמול הגבוה ביותר שחברה יכולה לבצע. ליווינו עשרות צוותים במעבר זה — בזיהוי גבולות השירות הנכונים, בניהול אתגרי בעלות על נתונים, ובביצוע ההגירה מבלי לשבש עומסי עבודה בפרודקשן.
אנו משתמשים ב-Kubernetes לתיאום (orchestration), ב-Apache Kafka להזרמת אירועים (event streaming), ב-Istio או Linkerd עבור service mesh, וב-ArgoCD עבור פריסות GitOps. כל שירות מקבל CI/CD עצמאי, מאגר נתונים משלו (datastore), וניטור מקיף של עקבות מבוזרות (distributed tracing) עם Jaeger ו-Prometheus.
ארגוני הנדסה שבהם המונולית מגביל את האוטונומיה של הצוות, תדירות הפריסה או מדרגיות המערכת. אם מהדורות (releases) דורשות תיאום בין צוותים, עומס של רכיב יחיד משפיע על כל המערכת, או שקליטת מפתחים חדשים אורכת חודשים — הגיע הזמן לפרק.
ניתוח הדומיינים של המונולית, זיהוי bounded contexts, ומיפוי הצמדה (coupling) בין רכיבים.
תכנון ארכיטקטורת שירות יעד, תכנון פיצול נתונים, ותיעדוף רצף החילוץ לפי ערך עסקי.
בניית תשתית משותפת — Kubernetes, תבניות CI/CD, service mesh, ומחסנית observability.
חילוץ שירותים בזה אחר זה, יישום שכבות למניעת שחיתות (anti-corruption layers) וניתוב תעבורה בהדרגה.
הקמת בעלות על שירות, פרקטיקות כוננות (on-call), מעקב SLO, וממשל ארכיטקטוני רציף.
בואו נתכנן נתיב בטוח ומצטבר מהמונולית שלכם לשירותים ניתנים להרחבה ולפריסה עצמאית.
אנו מזהים bounded contexts באמצעות domain-driven design, מחלצים שירותים באופן הדרגתי החל מהמודולים המקושרים באופן הרופף ביותר, מיישמים API gateways לניתוב, ומשמרים backward compatibility לאורך כל תהליך ההגירה.
הגירת monolith ל-microservices ב-MicrocosmWorks מתומחרת ב-$25-$50 לשעה. ההשקעה הכוללת תלויה בגודל ה-monolith, במורכבות הצימוד, ובמספר השירותים שיידרשו לחילוץ.
ציר הזמן משתנה באופן משמעותי בהתאם לגודל ולמורכבות של ה-monolith. בדרך כלל אנו מחלצים את השירות הראשון תוך 4-8 שבועות, כאשר הגירה מלאה נמשכת 6-18 חודשים. הגישה האינקרמנטלית שלנו מספקת ערך בכל שלב, במקום לדרוש שכתוב מלא.
אנו מיישמים REST סינכרוני או gRPC עבור דפוסי בקשה-תגובה, והודעות א-סינכרוניות באמצעות Kafka או RabbitMQ לתקשורת מונעת אירועים. אנו משתמשים ב-saga pattern עבור טרנזקציות מבוזרות וב-API gateways לניתוב חיצוני.
אנו עוקבים אחר תבנית ה-database-per-service, מחלצים טבלאות ספציפיות לשירות לתוך מסדי נתונים ייעודיים באופן הדרגתי. במהלך המעבר, אנו משתמשים בתצוגות מסדי נתונים (database views), ב-CDC, או בקריאות API כדי לשמור על גישת נתונים תוך כדי ניתוק הדרגתי של תלויות מסד הנתונים המשותפות.