Table of Contents

בנוף התוכנה המתפתח במהירות של היום, היכולת לבנות מערכות שיכולות להתאים, בקנה מידה, להישאר נשמר לאורך זמן הפך יתרון תחרותי קריטי.אדריכלות Agile היא קבוצה של ערכים, פרקטיקות, ושיתוף פעולה התומכים בעיצוב פעיל, אבולוציוני ואדריכלות של המערכת. גישה זו מייצגת שינוי יסודי בתכנון אדריכלי מסורתי, נוקשה למתודולוגיה דינמי יותר אשר מחבקת את החשיבה הDevOps, ומאפשרת לאדריכלות להתפתח באופן מתמשך כדי לתמוך בצרכים הנוכחיים.

הארגון המודרני דורש מערכות שיכולות להגיב לשינויים בשוק, להתאים טכנולוגיות חדשות ולתמוך בבסיסי משתמשים גדלים מבלי לדרוש עיצובים שלמים.אתגר האיזון בכיוון טכני ארוך טווח עם שיטות פיתוח גמישות, הסתגלות מגדיר את המתח הליבה כי אדריכלות זריזה שואפת לפתור.בניגוד לגישות מסורתיות המבוססות על תכנון רחב, אדריכלות זריזה מונעת את פני השטח והעיכובים הקשורים לטבע המתחיל ותהליכי עיצוב רחבים בעיצוב מחדש (FDuptate Redesignd Design) ותהליכי עיצוב רחבים (עיצוב רחב).

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

הבנה של אדריכלות Agile: ליבה מושגים ופילוסופיה

אדריכלות Agile מייצגת יותר מקבוצת פרקטיקות טכניות – היא מגלמת פילוסופיה בסיסית על האופן שבו מערכות צריכות להיות מתוכננות ופותחותפות.באדריכלות הליבה, היזמית שלה תומכת בעיסוקי פיתוח Agile באמצעות שיתוף פעולה, פשטות עיצוב, ואיזון מכוון וצומח.מאזן זה חיוני: בעוד כמה עיצוב חייב להיות מכוון ומתוכנן, היבטים אחרים צריכים להופיע באופן אורגני יותר כשצוותים לומדים על הבעיה והצרכים של המשתמש.

החזית הגדולה של Big Design Up Front

אדריכלות תוכנה מסורתית נשענת לעתים קרובות על עיצוב רחב היקף, שבו אדריכלים יבלו חודשים יצירת מפרטים מפורטים לפני כל קוד נכתב.יש תפיסה מוטעית נפוצה בתעשיית ה- IT כי אדריכלות חייבת להיווצר "למעלה-למטה"; שבו חפצים הקשורים לאדריכלות מפותחים במשך יותר משניים או שלושה חודשים - באחד מהם - להוכיח כי "אדריכלות אנרגית" ו"אגילה" אינם מתאימים למעשה, כפי שעובד כנקודת זמן, לאחר מכן, לאחר מכן, לאחר מכן, יכול להיות מספיק חודשים, אך לא ניתן לבצע, אלא להתקדם, אך ורק כדי להשיג פתרון עמוק, אך ורק לאחר מכן, אך ורק לאחר מכן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, אם כן, כך, אם כן, אם כן, כך, כך, כך, כך, כך, כך, כך, אם כן, כך, אם כן, אם כן, אם כן, כך, כך, כך, כך, כך, אם כן, אם כן, אם כן, כך, כך,

התובנה המרכזית היא שלא כל ההחלטות האדריכליות צריכות להיות מקודמות.במקום זאת, אדריכלות זריזה תומכת בקבלת החלטות ברגע האחרון האחראי – כאשר יש לך את המידע הכי זמין, אך לפני עיכובים ייווצרו בעיות. גישה זו מפחיתה את הפסולת על ידי הימנעות ממאמץ יתר תוך מתן הדרכה מספקת לצוותי פיתוח.

עיצוב מתמשך ו-Vursus Emergent Design

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

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

Business Alignment and Value Delivery

אחד ההיבטים הקריטיים ביותר של אדריכלות זריזה הוא המוקד שלה על ערך עסקי.אדריכלים Agile תומכים בהיערכות עסקית על ידי אופטימיזציה של האדריכלות לתמוך בזרם הערך מקצה לקצה-לקצה.אופטימיזציה זו מאפשרת לחברה להשיג את מטרתה של כל הזמן לספק ערך בזמן המוביל הקצר ביותר. במקום ליצור ארכיטקטורות כי הם מרשים מבחינה טכנית אך מנותקים מצרכי עסקים, אדריכלים זריזים עובדים בשיתוף פעולה הדוק עם בעלי עניין כדי להבטיח שהחלטות תמיכה עסקית ישירות.

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

עקרונות יסוד של אדריכלות Agile

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

שינוי באמצעות תכנון וניהול

שינוי הוא בלתי נמנע במערכות תוכנה.דרישות משתנות ככל שהטכנולוגיה משתנה, כמו שינויים עסקיים, כמו שינוי משרות של בעלי העניין, והבנת הדרישות מתפתחת.במקום להתנגד לשינוי, אדריכלות זריזה מחבקת אותו – אבל לא באופן פזיז.אל תילחם בו, לאמץ אותו, אלא לתכנן אותו – זו אחריות ארכיטקטונית מרכזית.

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

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

הפרדה בין דאגות ומודולריות

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

פשטות ומודולריות הן קריטיות; פירוק מערכות מורכבות לרכיבים קטנים יותר, מנוהלים מאפשר תחזוקה קלה יותר וסקאלה.כל מודול צריך מטרה ברורה וממשקים מוגדרים היטב.כאשר יישום הפרדת חששות, פיצול המערכת לשכבות ברורות: לוגיקה דומיין, יישום או שכבת שירות, תשתיות ומצגת. שמור על כללים עסקיים ללא מסגרת או קוד מסד נתונים.

מבחן מעשי להפרדת חששות הוא פשוט: האם אתה יכול לשנות X ללא מגע Y? אם אתה יכול להחליף את מנוע מסד הנתונים שלך ללא שינוי לוגיקה התחום, או לעדכן את מסגרת UI שלך ללא שינוי כללי עסק, אתה השיג הפרדה טובה של חששות.

אחריות יחידה ברמה האדריכלית

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

הפרדת חששות מגבילה את היקף השינוי, מפחיתה את התוקפנות, וממשיכה לספק אספקה מצופה ככל שהמערכות צומחות. אחריות יחידה על פני רכיבים מבהירה בעלות, מורידה את המאמץ התיאום, ומקצרת מחזורי שחרור אלה, הבהירות זו של מטרה מקלה על צוותים להבין מה כל מרכיב עושה, מי הבעלים שלו, ואיך זה צריך להתפתח.

עיצוב לבדיקות ושקיפות

תכנון ועיצוב לבדיקות.יש תהליכים זריזים (תוכנית Xtreme Programming בפרט) לשים בדיקות קודם, לפני הקידוד - זהו תרגול טוב לחקות.עיצוב עבור בדיקות פירושו בחירות אדריכליות המאפשרות בדיקות אוטומטיות בכל הרמות - ענישה, שילוב ובדיקות מערכת.

עיצוב האדריכלות לתמיכה בבדיקות: להבטיח שהמערכת נשלטת, כך שניתן לבצע בדיקות בקלות, וניתן לבצע אותן בקלות, וניתן לראות אותן, או לגלות מה השתבש.שליטה פירושה שניתן להכניס את המערכת למצבים ספציפיים לבדיקה, בעוד שעקביות פירושה שאתה יכול לבחון את המצב הפנימי של המערכת ואת ההתנהגות.

מקסימיזציה Stake Value

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

עם זאת, אין זה אומר לתיעוד אין מקום.מודל העיקרון עם מטרה אומר לך שאתה צריך לדעת בדיוק מי אתה מפתח את המודל(s) עבור ומה הם ישתמשו בהם כדי שתוכל להתמקד במאמץ המינימלי הנדרש. Documentation צריך להיות תכליתי וממוקד, שנוצר כאשר זה מספק ערך ברור כגון הפעלת תקשורת בין קבוצות מבוזרות או שמירה על החלטות ארכיטקטוניות קריטיות.

עיצוב סקלאלה: עקרונות ותבניות

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

הבנה של Scalability Dimension

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

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

Horizontal Versus Vertical Scaling

קנה מידה רציונאלי, או "להעלות", כרוך בהוספת משאבים נוספים - כמו CPU או זיכרון - לשרת יחיד.בעוד שזה יכול להגביר את הביצועים, יש לו מגבלות עקב מגבלות פיזיות ועלויות הסלמה.לאחר נקודה מסוימת, הוספת יותר משאבים לא מניבה הטבות פרופורציונליות. Vertical קנה מידה הוא לעתים קרובות פשוט יותר ליישום בתחילה, אבל יוצר תקרה על צמיחה ונקודת כשל אחת.

הגדלה של Horizontal, או התרגול של הוספת מכונות נוספות למערכת כדי להתמודד עם עומס מוגבר, היא לעתים קרובות יעילה יותר מאשר סקאלה אנכית (הפצה של יותר משאבים למכונות קיימות) על ידי הפצת עומסי עבודה על פני שרתים מרובים או מקרים, דרוג אופקי יכול לעזור למערכת שלך בקנה מידה יעיל יותר ולטפל בספיציפי תנועה יותר בחינוכיות. גישה זו מספקת סובלנות טובה יותר ופוטנציאל סקאלה כמעט בלתי מוגבל, אם כי היא מציגה מורכבות במונחים של נתונים עקביים ומורכבים של תואמים.

אדריכלות ללא מדינה עבור Scalability

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

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

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

המונחים: Balancing Strategies

איזון עומס כרוך חלוקת בקשות הנכנסות אפילו על פני שרתים מרובים.מאזן עומס פועל כמתווך, להבטיח כי אף שרת בודד לא מוצפת.חלוקה זו חיונית לביצועים ולאמינות, שכן היא מונעת כל שרת בודד להפוך לצוואר בקבוק.

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

השתמש במאזן חומרה או תוכנה כגון NGINX, HAProxy, או AWS אלסטיס מטענים. יישום בדיקות בריאות כדי להבטיח כי מאזן העומס רק שולח בקשות לשרתים מתפקדים. בדיקות בריאות הם קריטיים לשמירה על זמינות מערכת, שכן הם מאפשרים את העודף להנעת התנועה אוטומטית הרחק מן השרתים הכושלים או המוזנחים.

עקבו אחרי Performance and Scalability

Caching היא אחת הטכניקות היעילות ביותר לשיפור ביצועים והיקף. הוסף שכבת מטמון כדי להפחית עומס מסדי נתונים וכבדות. על ידי אחסון לעתים קרובות גישה לנתונים בזיכרון, צ'נג מפחית את הצורך שוב ושוב מסדי נתונים או לבצע חישובים יקרים, שיפור דרמטי של זמני תגובה וצמצום העומס על מערכות backend.

זה כרוך ב minimizing פעילות רבת משאבים, אלגוריתמים, ומינוף טכניקות caching ביעילות caching אסטרטגיות לשקול מה ל cache, איפה לטמון אותו, כמה זמן לשמור נתונים חצופים, וכיצד לפסולת משקעים מטמון sache. דפוסי כיס משותף כוללים סגסוגת של יישומים, שאילתת מסד נתונים, ורשת משלוח תוכן (CDN) עבור נכסים סטטיים.

סקלאה: Replication and Sharding

ככל שהמערכות צומחות, מסדי נתונים הופכים לעתים קרובות לצוואר הבקבוק הראשי. שתי אסטרטגיות מפתח עבור דחיסות מסד נתונים הן שכפול ו-Ssharding.מספר העתקים יכולים להתמודד עם עומסי עבודה של קריאה ללא השפעה על מסד הנתונים הראשוני.ספק נקודות גיבוי במקרה שהמסד הנתונים הראשוני נכשל.שכפול מסד הנתונים יוצר עותקים של הנתונים שלך על פני שרתים מרובים, המאפשר לקרוא פעולות כדי להיות מבוזרות תוך כדי ללכת לשרת הראשי.

Sharding הוא תהליך חלוקת מסד הנתונים שלך לחתיכות קטנות יותר, מנוהלות יותר בשם shards. כל shard מכיל תת-קבוצה של הנתונים ופועל באופן עצמאי. גישה זו מאפשרת הן לקרוא ולכתוב סקאלות על ידי הפצת הנתונים על פני שרתי מסד נתונים מרובים.על ידי הפצת נתונים, אתה להפחית את התוכן ולשפר ביצועים.

יישום sharding דורש תכנון זהיר סביב מפתח הארדינג - המאפיין המשמש כדי לקבוע אילו shard מחזיק נתונים. השתמש עקבי hashing או טווח מבוסס sharding כדי להפיץ נתונים ביעילות.הבחירה של אסטרטגיה sharding משפיעה באופן משמעותי על ביצועי שאילתה, הפצה נתונים, ואת היכולת לאזן מחדש shardshards כמו המערכת גדל.

עיבוד סינכרוני והודעות Queues

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

תורי הודעות, כגון Apache קפקא או RabbitMQ, מאפשרים תקשורת אמינה בין שירותים לבין ארכיטקטורות המונעות על ידי אירועים.מערכות אלה מספקות ערבויות עמידות, להבטיח כי הודעות לא אבדו גם אם רכיבים נכשלים, ומאפשרות הפיכה בין שירותים על ידי כך שהם מאפשרים להם לתקשר ללא תלות ישירה.

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

פלטפורמות ענן ומכוניות

מינוף פלטפורמות ענן ועלויות רכב יכול לשפר מאוד את יכולת הגדלה.ספקי ענן כמו אמזון Web Services (AWS), Google Cloud Platform (GCP), ו- Azure מציעים תשתיות ושירותים מדרגים אשר באופן אוטומטי להתאים משאבים המבוססים על הביקוש. גמישות זו מאפשרת למערכות להגיע לדרג במהלך תקופות שיא וירידה במהלך זמני זמן שקט, אופטימיזציה הן ביצועים והן עלות.

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

תבניות אדריכליות עבור מערכות Agile

בעוד עקרונות מספקים הדרכה, תבניות אדריכליות מציעים פתרונות קונקרטיים, מוכחים לאתגרים עיצוביים משותפים, בעוד עקרונות עיצוב נותנים לנו את "למה" מאחורי ארכיטקטורת מערכת מדרגת, זהו הדפוסים האדריכליים המציגים לנו את "איך" דפוסים אלה כבר מעודנים באמצעות שימוש בעולם האמיתי ולספק טביעות כחולות להורות יישומים להשגת תכונות ספציפיות באיכות.

אדריכלות Microservices

תבנית Microservices היא למעשה decoupling שהובאה לחיים. במקום לבנות ענקית אחת, כל יישום (מונוליטית), אתה יוצר אוסף של שירותים קטנים ועצמאיים.כל שירות בנוי סביב פונקציה עסקית ספציפית - כמו אימות משתמש, קטלוג המוצר או עיבוד תשלום.

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

מאפשר לדרג רכיבים בודדים ללא השפעה על המערכת כולה.שיפור סובלנות אשמה - כשל בשירות אחד לא משפיע על אחרים. תומך בפיתוח מתמשך, המאפשר עדכונים מהירים יותר ותכונות רולouts. היתרונות האלה להפוך מיקרו-שירותים המתאימים במיוחד עבור מערכות גדולות, מורכבות עם צוותים מרובים ושינויים תכופים.

עם זאת, מיקרו-שירותים גם מציגים מורכבות מבחינת גילוי שירות, תקשורת בין-שירות, עסקאות מבוזרות ומבצעית Overhead.צוותים צריך לשקול בזהירות אם היתרונות עולים על העלויות עבור המערכות או הקבוצות הקטנות שלהם, מונוליטית ממונו היטב עשוי להיות מתאים יותר.

אדריכלות ייעודית

אימוץ ארכיטקטורה ממוקדת שירות שבו פונקציונליות מאורגנת לתוך שירותים שמתקשרים באמצעות ממשקים מוגדרים היטב.זה מאפשר פיתוח עצמאי, פריסה ורמת שירותים, המוביל לדרגות טובות יותר ותחזוקה. אדריכלות מוכוונת שירות (SOA) חולקת עקרונות רבים עם microservices אבל בדרך כלל כרוך שירותים גדולים יותר, יותר כפירה.

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

אדריכלות: Event-Driven Architecture

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

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

אדריכלות שכבת

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

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

מערכות בנייה שקדמו

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

קוד וסטנדרטים

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

עיצוב המערכת להקלה של תחזוקה. השתמש בסטנדרטים ברורים ועקביים של קידוד, תיעוד מעמיק ובדיקות אוטומטיות. יישום ניטור ומיקום ביצועי מערכת וזיהוי בעיות מוקדם.תקני Coding להבטיח עקביות על בסיס הקוד, מה שהופך אותו קל יותר עבור חברי הצוות לעבוד על חלקים שונים של המערכת ולהפחית עומס קוגניטיבי בעת מעבר ההקשרים.

מסמך מקיף

בעוד מתודולוגיות גמישות מדגישות תוכנה עובדתית על תיעוד מקיף, אין זה אומר תיעוד הוא לא חשוב.המפתח יוצר תיעוד המספק ערך מבלי להיות נטל על מנת לשמור על תיעוד אדריכלות צריך להתמקד בלכידת החלטות, רציונליות והקשר שאינו ברור מהקוד עצמו.

תיעוד יעיל כולל רשומות החלטות אדריכליות (ADRs) שלוכדות מדוע נעשו בחירות מסוימות, דיאגרמות של מערכת המתארות כיצד רכיבים אינטראקציה, וספרי ריצה המנחים צוותים באמצעות תרחישים משותפים.תיעוד זה צריך להיות קרוב לקוד - באופן אידיאלי באותו רצף - כדי להגדיל את הסבירות שהוא נשאר הנוכחי.

אסטרטגיות בדיקה אוטומטיות

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

פירמידת הבדיקות מציעה שיש בדיקות יחידות מהירות וממוקדות רבות, פחות בדיקות אינטגרציה, ואפילו פחות בדיקות קצה עד הסוף.מאזן זה מספק כיסוי טוב תוך שמירה על סוויטות בדיקה מהר מספיק כדי לרוץ לעתים קרובות.מבחנים צריך להיות מטופלים קוד ברמה הראשונה, עם אותה תשומת לב לאיכות ולשמירה על יכולת כמו קוד הייצור.

שילוב מתמשך וחלוקת

שילוב רציף (CI) ופריסת רציפה (CD) הם חיוניים לשמירה על איכות המערכת ומאפשרת השקיה מהירה. CI מבטיחה כי שינויים בקוד משולבים באופן קבוע ונבדקים, לתפוס בעיות אינטגרציה מוקדם כאשר הם קלים יותר לתקן. תקליטור מרחיב את זה על ידי הפעלת תהליך הפריסה, צמצום הסיכון והמאמץ הקשורים להודעות.

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

ניהול חובות טכני

חוב טכני – העלות המוטעית של עבודות נוספות שנגרמו על ידי בחירת פתרון קל עכשיו במקום גישה טובה יותר שייקח יותר – הוא בלתי נמנע בפיתוח תוכנה.המפתח מנהל אותו במודע ולא לתת לו לצבור באופן לא מודע.אדריכלים Agile להוביל את התהליך הזה על ידי תמיכה רק Architectural Runway כדי לתמוך בצרכים העסקיים המתפתחים.הם משקיעים ללא הרף ביוזמות מודרניות וזיהוי היכן לתקן, לחסל את ארכיטקטוני הבקבוקים.

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

עמידות וסובלנות

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

עיצוב לכישלון

במקום לנסות למנוע את כל הכישלונות - מטרה בלתי אפשרית במערכות מבוזרות מורכבות - ארכיטקטורות עמידות מניחות כי כישלונות יתרחשו ועיצוב בהתאם.זה אומר יישום מנגנונים של התחדשות, השפלה ושיקום, המאפשרים למערכת להמשיך לפעול גם כאשר רכיבים נכשלים.

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

שוברים מעגליים ו-Bolkheads

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

Bulkheads, דפוס עמידות נוסף, בידוד חלקים שונים של המערכת כך שכשלונות באזור אחד לא משפיעים על אחרים.כמו ראשי התיבות של האנייה המונעים מים להציף את כל הכלי, ראשי תוכנה עשויים לכלול חוטים נפרדים עבור פעולות שונות או חיבורי מסד נתונים נפרדים עבור שירותים שונים.

מעקב ושקיפות

אתה לא יכול לתקן את מה שאתה לא יכול לראות. ניטור מקיף וצייתנות הם חיוני לשמירה על מערכות הפעלה מחדש. ניטור כרוך איסוף מדדים על התנהגות המערכת - פעמים אחראי, שיעורי שגיאה, ניצול משאבים - בעוד observability הולך רחוק יותר, ומאפשר לך להבין מדוע המערכת מתנהגת דרך מסוימת.

שיטות observability מודרניות כוללות אינטגרציה, מופץ מסלול, ומדדים אוסף. יחד, אלה מספקים חשיפה להתנהגות המערכת בכל הרכיבים, מה שמאפשר לאבחן בעיות במהירות ולהבין את ההשפעה של שינויים. ניטור יעיל כולל גם מדדים טכניים ומדדים עסקיים, ומבטיח כי אתה מבין לא רק אם המערכת פועלת, אלא אם זה מספק ערך.

אבטחה באדריכלות Agile

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

הגנה ב Depth

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

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

עקרון ה-Least Privilege

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

השתמש באימות חזק ואישור.דוגמאות כוללות את OAuth ו- JSON Web Tokens (JWT) כדי לאמת מי יכול לגשת לנתונים הצפנה כאשר הוא נע (במעבר) כמו גם כאשר הוא יושב באחסון (במנוחה) - זה שומר מידע בטוח גם אם יירוט. אימות מודרני ומערכות אישור לספק שליטה על גישה תוך שמירה על יכולת.

עיצוב API מאובטח

תרגול תכנון API מאובטח. השתמש בתעריף כדי למנוע התעללות.אימות כל הקלטות כדי לחסום נתונים זדוניים. APIs הם לעתים קרובות משטח ההתקפה העיקרי עבור יישומים מודרניים, מה שהופך את האבטחה שלהם קריטי.קצב הגבלת מניעת התקפות והתעללות, בעוד אימות מונע התקפות הזריקה וניצולים אחרים.

עיצוב API מאובטח כולל גם שימוש ב- HTTPS עבור כל התקשורת, יישום אימות והרשאה נאותה, הימנעות חשיפת מידע רגיש הודעות שגיאה, ולאחר העיקרון של לפחות פריבילגיה בעת מתן גישה ל- API.

טכנולוגיה Stack

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

הערכת אפשרויות טכנולוגיות

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

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

הימנעות מטכנולוגיה לוקה

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

זה לא אומר הימנעות משירותי ענן לחלוטין - היתרונות שלהם לעתים קרובות עולים על הסיכונים - אבל במקום להיות אסטרטגי על אילו שירותים להשתמש וכיצד להשתמש בהם. הליבה העסק צריך להיות נייד, בעוד חששות תשתיות יכול למנף שירותים ספציפיים פלטפורמה.

Polyglot Persistence and Programming

בעיות שונות לעתים קרובות ליהנות מטכנולוגיות שונות. פוליגלובט עקשנות פירושה שימוש בטכנולוגיות אחסון נתונים שונות לצרכים שונים - מסדי נתונים יחסיים עבור נתונים של עסקאות, חנויות מסמכים עבור צ'מות גמישות, מסדי נתונים עבור נתונים מקושרים מאוד, ושכבות caching עבור לעתים קרובות גישה לנתונים.

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

מבנה צוות ושיתוף פעולה

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

צוותים של הצלב

אדריכלות Agile עובדת הכי טוב עם צוותים פונקציונליים הכוללים את כל הכישורים הדרושים כדי לספק ערך - אדולוגים, בודקים, מהנדסי תפעול, מעצבים ומנהלי מוצר.צוותים אלה יכולים לקבל החלטות במהירות ללא תיאום נרחב ולקחת בעלות על השירותים שלהם מפיתוח באמצעות ייצור.

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

תפקיד האדריכלים ב-Agile Teams

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

אדריכלים מתמקדים ביצירת המסלול האדריכלי – הבסיס הטכני שמאפשר תכונות עתידיות – תוך מתן עיצוב מפורט להופעת שיתוף פעולה קבוצתי.הם מזהים חששות ממושכים, קובעים סטנדרטים ודפוסי מידע, ומאפשרים שיתוף ידע בין קבוצות.

תקשורת ושיתוף ידע

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

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

אדריכלות: Evolve Architecture

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

אדריכלות: Functions

פונקציות כושר הן בדיקות אוטומטיות שמאמתות אם הארכיטקטורה שומרת על מאפיינים רצויים.אלה עשויים לכלול את ביצועי ביצועים, כללי תלות, סריקות אבטחה או מדדי איכות קוד.על ידי הפעלת בדיקות אלה והפעלה מתמדת, הצוותים יכולים לתפוס סחף אדריכלי מוקדם לפני שהוא הופך לבעיה עיקרית.

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

ביצועים Metrics

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

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

שמירה על מטריקס

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

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

שיפור אדריכלי מתמשך

אדריכלות אינה סטטית – היא חייבת להתפתח כדרישות משתנות, טכנולוגיות מתקדמות, והצוותים לומדים שיפור ארכיטקטוני מתמשך כרוך בבדיקת האדריכלות, זיהוי אזורים לשיפור, ושינויים מצטברים כדי לטפל בבעיות.

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

אתגרים ופתרונות

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

ניהול המורכבות

מורכבות: Scaling מערכת מוסיפה מורכבות לעיצוב שלה, כפי שאתה צריך לשקול איך רכיבים אינטראקציה, איך להפיץ את עומס העבודה, וכיצד להתמודד עם כישלונות בחסד.עלות: בעוד שרמת אופקית יכולה להיות יעילה יותר מאשר קנה מידה אנכי, זה עדיין דורש תכנון זהיר כדי לנהל את העלויות הקשורות לשרתים נוספים, ציוד רשת ותחזוקה.

מערכת מדרגית צריכה להיות פשוטה ככל האפשר תוך עמידה בדרישותיה.מורכבות יכולה לעכב את יכולת הסקאלה, מה שהופך אותה למאתגרת לשמור, לטבול ולהרחיב את המערכת שלך לאורך זמן.כדי לקדם פשטות, לשאוף למזער את התלויות בין מרכיבים, להפחית את המורכבות של הקוד, לדבוק בדפוסי עיצוב מבוססים היטב ושיטות הטובות ביותר.על ידי שמירה על עיצוב המערכת שלך פשוט ככל האפשר, אתה תעשה את זה קל יותר להיקף ולתפתח לאורך זמן.

איזון מהירות ואיכות

פיתוח Agile מדגיש משלוח מהיר, אבל זה יכול ליצור מתח עם איכות ארכיטקטונית.הפתרון הוא מציאת האיזון הנכון - מתן ערך במהירות תוך שמירה על שלמות ארכיטקטונית מספקת לתמיכה בפיתוח עתידי.זה כרוך במימוש של עסקאות מודע וניהול חובות טכניים באופן אסטרטגי.

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

אתגרים במערכת

מערכות מבוזרות מציגות אתגרים סביב עקביות, זמינות וסובלנות חלוקה - המפורסם CAP המשפט סחר-offs. חלקים שונים של המערכת עשויים להיות דרישות שונות, עם כמה צורך עקביות חזקה בעוד אחרים יכולים לסבול בסופו של דבר עקביות עבור זמינות טובה וביצועים.

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

מערכת מורשת מודרנית

ארגונים רבים מתמודדים עם האתגר של מערכות מורשת מודרניות תוך שמירה על המשכיות עסקית. במקום לנסות טקסים גדולים במפץ גדול מסוכן, אדריכלות זריזה מעדיפה מודרניזציה מצטברת באמצעות דפוסים כמו ה-Fig החנק, שבו פונקציונליות חדשה בנויה בארכיטקטורה מודרנית תוך כדי עלייה הדרגתית של פונקציונליות הקיימת.

גישה זו מפחיתה את הסיכון על ידי כך שהיא מאפשרת למערכת החדשה להיות מאומתת באופן מצטבר ומספקת נתיב לבור אם בעיות מתעוררות. היא מספקת ערך באופן רציף ולא דורשת שנים של עבודה לפני שכל היתרונות יושמדו.

Best Practices for Implementing Agile Architecture

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

התחל עם סקאלה בראש

מהיום הראשון. ברצינות.גם אם אתה רק מצלם פרויקט זעיר או מוצר בעל ערך מינימלי (MVP), אתה צריך להיות מדרגיות בחלק האחורי של המוח שלך, בעוד שאתה לא צריך יתר על המידה, מקבל אפשרויות מדרגיות מההתחלה - כמו שירותים ללא מדינה ודרגות אופקיות - עלויות מעט יותר רחבות אך משמעותיות.

תכנון לדרגות מההתחלה עם עקרונות יסוד של מודולריות, קשקשים אופקיים, ו אדמוניות הוא מפתח.יש אסטרטגיות מוכחות רבות כמו צ'נג, צ'רדינג, עיבוד סינכרוני שאדריכלים יכולים למנף כדי לבנות מערכות מדרגות מאוד.

Prototype ו-Pretotype

כאשר האדריכלות שלך קוראת למשהו חדש לך, אולי אתה משתמש בשניים או יותר מוצרים יחד בפעם הראשונה, אתה צריך להשקיע את הזמן כדי לחקור אם הגישה הזו תעבוד כמו גם איך זה עובד.לפעמים אתה תגלה דרך המאמצים שלך כי הגישה המקורית שלך לא עובד, משהו שאני מעדיף לגלות מוקדם יותר מאשר מאוחר יותר, ולפעמים אתה מגלה איך הגישה שלך עובד (במקום איך זה עובד מהר יותר, אם אתה לא יכול פשוט לפתח את זה לא יכול להיות בטוח).

אוטומציה Embrace

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

אוטומציה צריכה להרחיב מעבר לפריסה כדי לכלול בדיקות, ניטור, סריקה אבטחה ותשתיות מתן יותר אתה יכול להיות שותף, יותר עקבי ואמין משימות אלה יבוצעו, וככל שצוותי הזמן יש יותר עבודה ערכית.

עיצוב ל Observability

לבנות observability לתוך הארכיטקטורה שלך מההתחלה ולא להוסיף אותו מאוחר יותר.זה אומר כלי קוד כדי פולט מדדים, יומני, ועצמות, עיצוב APIs לכלול תעודות זהות קורלציה עבור מעקב בקשה, וליישם נקודות קצה של בדיקת בריאות המספקות מידע סטטוס מפורט.

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

תוכנית לתפוצה גיאוגרפית

§ § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § § §

השקעה ב- Developer Experience

הקלות עם אילו מפתחים יכולים לעבוד עם האדריכלות שלך משפיעה באופן משמעותי על הפרודוקטיביות והאיכות. להשקיע בכלי פיתוח טובים, תיעוד ברור, תהליכי התקנה אוטומטיים, ו הלולאות משוב מהירות.כאשר מפתחים יכולים בקלות להבין, לבנות, לבדוק ולפרוס קוד, הם פרודוקטיביים יותר ולעשות פחות טעויות.

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

אסטרטגיות יישום עולמי

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

גישה להגירה

כאשר מודרניזציה של מערכות קיימות, גישות מצטברות להפחית את הסיכון ולספק ערך ברציפות.תבנית ה-Fig חנקנית כרוכה בבניית פונקציונליות חדשה בארכיטקטורה מודרנית תוך התרחקות בהדרגה ממערכת המורשת.שער API או שכבת חסימה ישירה בקשות למערכת הישנה או חדשה המבוססת על אילו פונקציונליות הועברה.

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

בניית Architectural Runway

מסלול אדריכלי מתייחס לקרן הטכנית הקיימת המאפשרת תכונות עתידיות.בנייה רוץ כרוך ביצירת תשתיות, מסגרות ודפוסים שצוותים ישתמשו כדי לספק תכונות.זה עשוי לכלול הצבת צינורות CI /CD, הקמת תבניות שירות, יצירת ספריות משותפות, או יישום חששות ממושכים כגון אימות ו- logging.

המפתח הוא לבנות מספיק הילוך כדי לתמוך בעבודה הקרובה ללא השקעה יתר בתשתיות ⁇ .זה דורש שיתוף פעולה הדוק בין אדריכלים וצוותי מוצר כדי להבין מה יהיה צורך ומתי.

הקמת ממשל אדריכלי

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

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

יצירת מרכזים של מצוינות

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

הם עשויים ליצור ארכיטקטורות התייחסות, לספק הדרכה, לערוך ביקורות אדריכלות, או לפתח כלים משותפים וספריות.המפתח מאפשר לצוותים ולא לשלוט בהם, להפיץ מומחיות ברחבי הארגון ולא להתרכז בו.

מגמות עתידיות באדריכלות Agile

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

שירות ללא תשלום ותפקוד - as-a-Service

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

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

בינה מלאכותית ושילוב Machine Learning

אינטליגנציה מלאכותית ולמידה של מכונה משולבים יותר ויותר במערכות תוכנה, ומציגים שיקולים אדריכליים חדשים.מודלים של ML דורשים תשתיות שונות מאשר יישומים מסורתיים, עם צרכים להאצה GPU, גרסת מודל ומסגרות בדיקה A / B.

אדריכלות חייבת לתמוך במחזור חיי ה-ML המלא - איסוף נתונים, הכשרת מודלים, פריסה, ניטור, ושיקום.זה כרוך לעתים קרובות בתשתיות מיוחדות וכלים, המחייב אדריכלים להבין הן ארכיטקטורות תוכנה מסורתיות והן חששות ספציפיים ל-ML.

צוק מחשוב

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

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

הנדסה פלטפורמה

הנדסה פלטפורמה מתמקדת בבניית פלטפורמות פנימיות המספקות יכולות שירות עצמי לצוותי פיתוח.במקום כל צוות בונה תשתיות וכלי משלו, צוותי פלטפורמה יוצרים יכולות משותפות שהופכות אותו לקל עבור צוותי המוצר לבנות, לפרוס ולהפעלה של שירותים.

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

כלים וטכנולוגיות

בעוד עקרונות ודפוסי הם יישום טכנולוגי, מעשי דורש כלים וטכנולוגיות ספציפיים.הבנת הנוף מסייעת לאדריכלים לקבל החלטות מושכלות.

מכיל ותזמורת

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

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

תשתיות כקוד

תשתיות כקוד (IaC) כלים כמו Terraform, CloudFormation ו-Pulumi מאפשרים לתשתיות להיות מוגדרות בקוד וגרסה הנשלטת לצד קוד יישום.זה מאפשר סביבות ניתנות להתחדשות, מתן אוטומטי ושינויי תשתיות כדי להיבדק ולבחון כמו קוד יישום.

IaC הוא יסוד אדריכלות זריזה, המאפשר יצירת סביבה מהירה, תצורה עקבית, ואת היכולת לטפל תשתיות כמו חד פעמי והחלפתן במקום יקר וייחודי.

ראשי > API Gateways and Service Meshes

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

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

פלטפורמות שמירה

פלטפורמות observability מודרניות משלבות מדדים, יומנים, ושרידים כדי לספק חשיפה מקיפה להתנהגות המערכת. כלים כמו Prometheus עבור מדדים, ערימה של ELK עבור יומנים, ו Jaeger עבור עבודה מבוזרת יחד כדי לאפשר הבנה של מערכות מבוזרות מורכבות.

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

יצירת תרבות של מצוינות ארכיטקטונית

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

צוותים

אדריכלות Agile עובדת הכי טוב כאשר לצוותים יש את האוטונומיה לקבל החלטות בגבולות ברורים.זה דורש צוותים לבטוחים, לספק להם את ההקשר והעקרונות לקבל החלטות טובות, ולקבל כי הם לפעמים עושים טעויות.למידה מטעויות אלה ושיפור מתמיד הוא בעל ערך רב יותר מאשר למנוע את כל השגיאות באמצעות שליטה מרכזית.

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

לימוד וניסויים

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

יש לעודד ניסויים אך כבולים - על חברי הצוות להיות חופשיים לנסות גישות חדשות בהקשרים מבוקרים תוך שמירה על יציבות במערכות ייצור. Architectural ספייקים והוכחות של תפיסות לספק דרכים לאמת רעיונות לפני ביצועם.

מינוף וחדשנות

יותר מדי סטנדרטיזציה מחלחלת לחדשנות ומונעת מקבוצות לאמץ גישות טובות יותר.מעט מדי יוצר פיצול והופכת את זה קשה להעביר אנשים בין קבוצות או לשתף ידע.המפתח הוא מציאת האיזון הנכון - סטנדרטיזציה היכן שהוא מספק ערך ברור ומאפשר גמישות שבה הוא מאפשר חדשנות.

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

מסקנה: בניית מערכות לעתיד

אדריכלות Agile מייצגת שינוי יסודי כיצד אנו חושבים על עיצוב המערכת – החל בתכנון מקיף של מעלה ועד לתכנון אבולוציוני, מבניינים קשיחים ועד מערכות גמישות, משליטה מרכזית ועד קבלת החלטות מבוזרת.עיצוב ארכיטקטורת מערכת חזקה ורחבה דורש תכנון קפדני ודבקות לשיטות הטובות ביותר.על ידי שילוב עקרונות כמו מודולריות, קנה מידה, זמינות גבוהה, אופטימיזציה ביצועים, ותחזוקת ארכיטקטורות, יכול ליצור מערכות שעומדות בדרישות עתידיות להתאים את דרישות עתידיות ולת לדרישות עתידיות.

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

עיצוב מערכת תוכנה בנוי היטב הוא חיוני לבניית אסטרטגיות יעילות, מדרגיות, ושמירה על יישומים. על ידי עקרונות עיצוב מערכת, מינוף ארכיטקטורת מערכת תוכנה, שימוש בדפוסי עיצוב תוכנה, וליישם אסטרטגיות עיצוב מערכת מדרגת, מפתחים יכולים ליצור מערכות תוכנה מוכחות בעתיד.

הצלחה בארכיטקטורה זריזה דורשת איזון בין מספר חששות: מתן ערך במהירות תוך שמירה על איכות, מתן אוטונומיה קבוצתית תוך הבטחת קוהרנטיות, אימוץ שינוי תוך שמירה על יציבות. המתחים האלה טעונים ואינם ניתנים לחיסול – הם חייבים להיות מנוהלים באמצעות שינויים מסחריים מודעים והתאמות מתמשך.

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

המסע למצוינות אדריכלית הוא מתמשך - תמיד יש יותר ללמוד, אתגרים חדשים כדי להתמודד, וגישות טובות יותר לגלות. Embrace המסע הזה, ללמוד הן מהצלחות וכישלונות, ולחדד את הגישה שלך באופן רציף עם העקרונות והפרקטיקות המפורטים במדריך זה כמו הבסיס שלך, אתה מצויד היטב במערכות עיצוב שאינן רק ברותנות וגמישות ביכולת שלהם להתפתח ולתאם בעתיד.

פריטים מרכזיים ופעולות

  • (FLT:0) עיצוב אבולוציוני: אדריכלות מכוונת של איזון 1 עם עיצוב יוצא דופן, קבלת החלטות ברגע האחרון האחראי, תוך שמירה על מספיק הדרכה לצוותים.
  • (הופנה מהדף "0" עיצוב לשינוי: תוכנית 1:1 לשינוי במקום להתנגד לו, הבנה של כיוונים סבירים של שינוי ובניית גמישות מתאימה ללא מאמץ יתר.
  • (FLT:0) פרייוט הפרדה של חששות: מערכות מארגנת 1:1 ארגן לתוך שכבות ברורות ומודולים עם אחריות מוגדרת היטב, המאפשרת שינויים להישאר הכלולים.
  • (FLT:0Build for scaleability from the Beginning:FearLT:1) לעשות בחירות מדרגות מוקדם - שירותים ללא תנאים, סקאלינג אופקית, צ'ינג - גם אם אתה לא צריך בקנה מידה מסיבי מיד.
  • (ב) ⁇ :0) בעקביות: ⁇ FLT:1 בנתה ניטור, כניסה והמשך לתוך הארכיטקטורה שלך מההתחלה כדי לאפשר הבנה ופתרון בעיות של התנהגות המערכת.
  • (ב) ,0) ,Automately:FLT:1lore Testing, פריסה, תשתיות מתן, פעולות כדי להפחית שגיאות ולאפשר השקיה מהירה.
  • (FLT:0) עיצוב לחוסנות: FLT:1 כשלים של אספרום יתרחשו ויהטמיעו דפוסים כמו שברים מעגליים, ראשים גדולים והשפלה מעריצה לשמירה על זמינות.
  • (החוב הטכני של FLT:0) מנבא במודע: חוב מסלול 1FLT, הבנת ההשפעה שלו, ולהקצות באופן קבוע זמן כדי לטפל בו לפני שהוא הופך להיות מכריע.
  • אוטונומיה צוות של FLT:0 (FLT:1) צוותים של כוח הצלב כדי לקבל החלטות בגבולות ברורים, מתן הדרכה ולא שליטה.
  • (ב) ⁇ :0) מְמֶת, ושפר באופן רציף: 1FLT השתמש בפונקציות כושר ומדיקים כדי לעקוב אחר איכות אדריכלית לזהות אזורים לשיפור.

(ב) ב[[1924]], [[1924]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]] ו[[1924]], [[1924]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] [[1924]]]]]]]]]]]] [[1924]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] [[1924]] [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]], [[[[1924]]]] [[[[1924]]]]]] [[[[1924]]]]]] [[[[1924]]]]]]]] [[[[1924]]]]]] [[[[1924]]]]]]]] [[[[1924]]]]]]]] [[[[[[[[[[[[1924