העיקרון הזה, שמופיע בקטגוריה 'אופטימיזציה של הביצועים' בGoogle Cloud מסגרת Well-Architected Framework, כולל המלצות שיעזרו לכם לקדם עיצוב מודולרי. רכיבים מודולריים וממשקים ברורים יכולים לאפשר שינוי גודל גמיש, עדכונים עצמאיים והפרדה עתידית של רכיבים.
סקירה כללית של העקרונות
להבין את יחסי התלות בין רכיבי האפליקציה לרכיבי המערכת כדי לעצב מערכת ניתנת להרחבה.
עיצוב מודולרי מאפשר גמישות וחוסן (resilience), בלי קשר לשאלה אם נפרסה בהתחלה ארכיטקטורה מונוליטית או ארכיטקטורת מיקרו-שירותים. פירוק המערכת למודולים מוגדרים היטב ועצמאיים עם ממשקים ברורים מאפשר לכם להרחיב רכיבים ספציפיים כדי לעמוד בדרישות ספציפיות.
שינוי גודל ממוקד יכול לעזור לכם לבצע אופטימיזציה של ניצול המשאבים ולהפחית את העלויות בדרכים הבאות:
- הוא מקצה לכל רכיב רק את המשאבים הדרושים, ומקצה פחות משאבים לרכיבים שדורשים פחות.
- המערכת מוסיפה עוד משאבים בתקופות של תנועה גבוהה כדי לשמור על חוויית המשתמש.
- הסרת משאבים שלא נעשה בהם שימוש מספיק, בלי לפגוע בביצועים.
המודולריות גם משפרת את יכולת התחזוקה. יחידות קטנות ועצמאיות קלות יותר להבנה, לניפוי באגים ולעדכון, מה שיכול להוביל למחזורי פיתוח מהירים יותר ולסיכון מופחת.
למודולריות יש יתרונות משמעותיים, אבל חשוב להעריך את הפשרות הפוטנציאליות בביצועים. התקשורת המוגברת בין המודולים עלולה לגרום לזמן אחזור ולתקורה. חשוב לשאוף לאיזון בין מודולריות לבין ביצועים. יכול להיות שעיצוב מודולרי מאוד לא יתאים לכולם. אם הביצועים הם קריטיים, יכול להיות שגישה עם צימוד הדוק יותר תתאים יותר. עיצוב מערכת הוא תהליך איטרטיבי שבו בודקים ומשפרים באופן רציף את העיצוב המודולרי.
המלצות
כדי לקדם עיצובים מודולריים, כדאי לעיין בהמלצות שבקטעים הבאים.
תכנון לצימוד חלש
תכנון של ארכיטקטורה בצימוד חלש. רכיבים עצמאיים עם תלות מינימלית יכולים לעזור לכם לבנות אפליקציות שניתנות להרחבה ועמידות. כשמתכננים את הגבולות של השירותים, צריך לקחת בחשבון את דרישות הזמינות והמדרגיות. לדוגמה, אם לרכיב אחד יש דרישות שונות מהרכיבים האחרים, אפשר לעצב את הרכיב כשירות עצמאי. צריך להטמיע תוכנית לטיפול בבעיות שמתרחשות בתהליכי משנה או בשירותים פחות חשובים שלא משפיעים על זמן התגובה של השירותים העיקריים.
תכנון של פעולות בו-זמניות ומקביליות
כדאי לתכנן את האפליקציה כך שתתמוך בכמה משימות בו-זמנית, כמו עיבוד של כמה בקשות משתמשים או הפעלה של משימות ברקע בזמן שהמשתמשים יוצרים אינטראקציה עם המערכת. כדאי לחלק משימות גדולות לחלקים קטנים יותר שאפשר לעבד בו-זמנית בכמה מופעים של שירות. התכונה 'בו-זמניות משימות' מאפשרת להשתמש בתכונות כמו התאמה אוטומטית לעומס כדי להגדיל את הקצאת המשאבים במוצרים כמו:
איזון בין מודולריות להקצאת משאבים גמישה
במידת האפשר, צריך לוודא שכל רכיב משתמש רק במשאבים הדרושים (כמו זיכרון, אחסון וכוח עיבוד) לפעולות ספציפיות. הקצאת יתר של משאבים עלולה לגרום לעלויות מיותרות, והקצאת חסר של משאבים עלולה לפגוע בביצועים.
שימוש בממשקים מוגדרים היטב
חשוב לוודא שהרכיבים המודולריים מתקשרים ביעילות באמצעות ממשקים ברורים וסטנדרטיים (כמו ממשקי API ותורי הודעות) כדי לצמצם את התקורה משכבות התרגום או מתנועה חיצונית.
שימוש במודלים ללא שמירת מצב
מודל בלי שמירת מצב יכול לעזור לכם לוודא שתוכלו לטפל בכל בקשה או אינטראקציה עם השירות בנפרד מבקשות קודמות. המודל הזה מאפשר מדרגיות ושחזור, כי אפשר להגדיל או להקטין את השירות או להפעיל אותו מחדש בלי לאבד את הנתונים שנדרשים לבקשות או לתהליכים שנמצאים בעיבוד.
בחירת טכנולוגיות משלימות
בוחרים טכנולוגיות שמשלימות את העיצוב המודולרי. להעריך את שפות התכנות, המסגרות ומסדי הנתונים מבחינת התמיכה שלהם במודולריות.
מידע נוסף זמין במקורות המידע הבאים: