לדלג לתוכן

0.1 מה זה ארכיטקטורת תוכנה הרצאה

מה זה ארכיטקטורת תוכנה?

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

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

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

למה ארכיטקטורה חשובה?

הסיפור של הסטארט-אפ

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

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

זוהי חוב טכני - המחיר ששלמנו על ארכיטקטורה לא מחושבת בהתחלה.

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

דוגמה: Instagram

  • 2010: Instagram פותחה כמונוליט פשוט בפייתון עם Django. 13 עובדים. עבד בסדר גמור.
  • 2012: Facebook קונה ב-1 מיליארד דולר. 30 מיליון משתמשים. הארכיטקטורה מתחילה לייסר.
  • 2018: מיליארד משתמשים. מיקרוסרביסים, caches מרובדים, מאות שרתים. ארכיטקטורה שתוכננה מחדש לגמרי.

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

תכונות איכות - Quality Attributes

ארכיטקטורה טובה מנסה לאזן בין מספר תכונות:

מדרגיות - Scalability

שאלה: האם המערכת תוכל להתמודד עם פי 10 מהמשתמשים מחר?

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

תחזוקתיות - Maintainability

שאלה: כמה זמן ייקח למפתח חדש להבין את הקוד ולהוסיף פיצ'ר?

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

ביצועים - Performance

שאלה: כמה זמן לוקח לטפל בבקשה?

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

אמינות - Reliability

שאלה: מה קורה כשרכיב אחד נופל - כל המערכת קורסת?

מערכת אמינה ממשיכה לעבוד גם כשחלקים ממנה נכשלים.

אבטחה - Security

שאלה: איפה הנתונים חשופים? מי יכול לגשת למה?

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

מי הוא ארכיטקט תוכנה?

ארכיטקט תוכנה הוא מפתח בכיר שאחראי על ההחלטות הגדולות:
- איזה database? (SQL? NoSQL? שניהם?)
- מונוליט או מיקרוסרביסים?
- איך שירותים שונים מתקשרים?
- איפה מוסיפים cache?

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

שלושת הרמות של ארכיטקטורה

נעבוד בקורס על שלוש רמות:

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

רמת המערכת - איך מחלקים את המערכת לרכיבים (מונוליט, מיקרוסרביסים, ארכיטקטורת שכבות)

רמת הקנה-מידה - איך המערכת תיראה כשיש מיליון משתמשים (עיצוב מערכות גדולות)