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