ברוכים הבאים למדריך הראשון בסדרה שמראה איך לקחת מונוליט (או אפליקציה מונוליטית), להפריד אותו למודולים, ליצור קונטיינרים למודולים ולפרוס את תמונות הקונטיינרים באשכול Google Kubernetes Engine (GKE). אל דאגה אם לא הבנתם חלק מהמונחים האלה. ככל שתתקדמו בצפייה בסדרה, תבינו את המשמעות שלהן.
תוכנית הלימודים כוללת את המדריכים הבאים:
- סקירה כללית
- הסבר על המונולית (המדריך הזה)
- הפיכת המונוליט למודולרי
- הכנת האפליקציה המודולרית להעברה לקונטיינר
- העברת האפליקציה המודולרית לקונטיינר
- פריסת האפליקציה באשכול GKE
במדריך הזה תלמדו על המונוליט על ידי ביצוע השלבים הבאים:
- הגדרת האפליקציה במחשב המקומי.
- הסבר על הפיצ'רים בדפדפן.
- בודקים את הקוד.
מה זה מונולית?
לפני שמפעילים את הדוגמה של מונולית Cymbal Books, חשוב להבין מהו מונולית.
מונולית היא אפליקציה שבה כל הרכיבים מחוברים זה לזה, ואי אפשר לשנות את הגודל שלהם באופן עצמאי. לדוגמה, אם מספר משתמשים מבקרים פתאום בדף הכניסה של האפליקציה, אי אפשר לשנות את גודל הרכיב של הכניסה בלבד באופן עצמאי. במקום זאת, צריך לשנות את גודל האפליקציה כולה, כולל רכיבים לא קשורים, כמו קטלוג המוצרים או מערכת עיבוד ההזמנות.
לעומת זאת, כשמפרקים אפליקציה למודולים עצמאיים, אפשר לשנות את קנה המידה של כל מודול בנפרד בהתאם לצרכי המשאבים שלו. אם מארחים את האפליקציה המודולרית באשכול GKE, GKE יכול אפילו לבצע את ההתאמה של גודל האפליקציה באופן אוטומטי.
המונח מונוליטי לא אומר שהקוד לא מאורגן טוב. מונולית יכול להיות מובנה היטב, והרכיבים שלו יכולים להיות מוטמעים באזורים נפרדים בקוד. מה שמייחד מונולית הוא שהרכיבים האלה לא יכולים לפעול או להתרחב באופן עצמאי.
עלויות
אפשר להשלים את המדריך הזה בלי לשלם על כלום. עם זאת, אם תבצעו את השלבים שמפורטים במדריך האחרון בסדרה הזו, יחולו חיובים על חשבוןGoogle Cloud . העלויות מתחילות כשמפעילים את GKE ופורסים את אפליקציית Cymbal Books באשכול GKE. העלויות האלה כוללות חיובים לכל אשכול ב-GKE, כפי שמפורט בדף התמחור, וחיובים על הפעלת מכונות וירטואליות ב-Compute Engine.
כדי להימנע מחיובים מיותרים, הקפידו להשבית את GKE או למחוק את הפרויקט אחרי שתסיימו את המדריך הזה.
לפני שמתחילים
כדי לבצע את ההדרכה הזו, צריך להתקין במחשב המקומי את Python בגרסה 3.13. כדי לבדוק איזו גרסה של Python מותקנת במחשב, מריצים את הפקודה הבאה:
python3 --version
אם גרסת Python שלכם קודמת לגרסה 3.13, אתם צריכים להוריד ולהתקין את הגרסה העדכנית ביותר מהאתר הרשמי של Python.
מגדירים את הסביבה
בסדרת המדריכים הזו, מריצים גרסאות שונות של האפליקציה במקומות שונים:
- הגרסה המונוליטית במחשב המקומי
- הגרסה המודולרית במחשב המקומי
- הגרסה בקונטיינר ב-Cloud Shell ואז באשכול GKE
בקטע הזה, מגדירים סביבה וירטואלית במחשב המקומי שבה אפשר להריץ את המונוליט.
הורדת הקוד
פותחים טרמינל במחשב המקומי.
משכפלים את מאגר ה-GitHub של המדריך למחשב המקומי:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.gitהתיקייה
kubernetes-engine-samples/quickstarts/monolith-to-microservicesמכילה את שלוש התיקיות הבאות:monolith/,modular/ו-containerized/. במדריך הזה, מתמקדים רק בקבצים בתיקייהmonolith/.
יצירה והפעלה של סביבה וירטואלית
סביבה וירטואלית מספקת מרחב מבודד להפעלת האפליקציה. היא מונעת מהספריות של Python שצריך להתקין בשביל האפליקציה להפריע לפרויקטים אחרים של Python במערכת.
כדי ליצור ולהפעיל סביבה וירטואלית:
בטרמינל שפתחתם בקטע הקודם, עוברים לתיקייה הבאה במאגר ששיבטתם למחשב קודם לכן:
cd kubernetes-engine-samples/quickstarts/monolith-to-microservicesיוצרים סביבה וירטואלית בשם
book-review-env:python3 -m venv book-review-envמומלץ ליצור סביבה וירטואלית כי זהו אזור שבו אפשר להריץ את האפליקציה בבידוד. כך מוודאים שהתלות וההגדרות של האפליקציה לא יתנגשו עם תוכנות או ספריות אחרות במערכת.
מפעילים את הסביבה הווירטואלית באמצעות הפקודה שמתאימה למערכת ההפעלה שלכם:
macOS ו-Linux
source book-review-env/bin/activateWindows
book-review-env\Scripts\activateמתקינים את יחסי התלות של Python עבור המונוליט. יחסי תלות הם ספריות Python חיצוניות שהאפליקציה מסתמכת עליהן כדי לפעול בצורה תקינה. הספריות האלה מפורטות בקובץ
requirements.txt, והפקודה הבאה מתקינה את כולן בסביבה הווירטואלית:pip install -r monolith/requirements.txt
הרצה של Cymbal Books בדפדפן ועיון בהם
אפליקציית Cymbal Books היא פשוטה בכוונה וכוללת את התכונות הבאות:
- דף הבית שבו מוצגים כל הספרים בספרייה.
- דף שמוצגים בו פרטים על ספר.
- לחצן בדף הפרטים שכשלוחצים עליו מוצגות ביקורות על הספר.
- היכולת להציג תמונות של כריכות ספרים.
בדף הבית מוצגים שלושה ספרים, ולצד כל אחד מהם מופיע הכפתור 'הצגת פרטים':

עכשיו, אחרי שהסביבה הווירטואלית פעילה והתלות של האפליקציה מותקנת בסביבה הזו, מריצים את האפליקציה לפי השלבים הבאים:
במחשב המקומי, עוברים לספרייה של המונוליט:
cd monolith/מפעילים את האפליקציה:
python3 mono.pyפותחים דפדפן אינטרנט ועוברים לדף הבית של האפליקציה:
http://127.0.0.1:8080.כדי לעבור לדף הפרטים של הספר, לוחצים על הצגת פרטים. בדף הפרטים אפשר למצוא מידע נוסף על הספר, כמו המחבר ושנת הפרסום.
כדי להציג רשימה של ביקורות על הספר, בדף הפרטים לוחצים על הצגת הביקורות. בתמונה הבאה מוצג דף הפרטים של הספר Zephyr's Timepiece וביקורת הספר הראשונה:

עיון בקבצים בתיקייה /monolith
כדאי להקדיש רגע לבדיקת הקבצים בתיקייה /monolith:
monolith/
├── mono.py
├── data/
│ ├── book-1.json
│ ├── book-2.json
│ ├── book-3.json
│ ├── reviews-1.json
│ ├── reviews-2.json
│ └── reviews-3.json
├── images/
│ ├── fungi_frontier.jpg
│ ├── melodic_mechanics.jpg
│ └── zephyrs_timepiece.jpg
├── static/
│ ├── styles_for_details.css
│ └── styles_for_home.css
└── templates/
├── book_details.html
└── home.html
התיקיות והקבצים העיקריים הם:
התיקייה
images/מכילה את תמונות השער הבאות של הספר, שמוצגות באפליקציה:fungi_frontier.jpgmelodic_mechanics.jpgzephyrs_timepiece.jpg
התיקייה
data/מכילה את קובצי ה-JSON הבאים. הקבצים האלה מכילים ביקורות על שלושת הספרים בספרייה של Cymbal Books, ופרטים על כל ספר:reviews-1.json,reviews-2.json,reviews-3.jsonbook-1.json,book-2.json,book-3.json
למרות שאפליקציות בעולם האמיתי משתמשות לעיתים קרובות במסדי נתונים, אחסון הנתונים של האפליקציה בקובצי JSON מפשט את ההטמעה שלה. אפליקציית הדוגמה Cymbal Book משתמשת בקובצי JSON כדי שלא תצטרכו להתמודד עם קוד מורכב. במקום זאת, תוכלו להתמקד במטרה העיקרית של סדרת המדריכים הזו, שהיא ללמוד איך להפוך את המונוליט למודולרי ולבנות לו קונטיינר.
אפשר להתעלם מהתיקיות הבאות כי הקבצים שבהן חשובים לפריסה ולעיצוב של האפליקציה, אבל הם לא רלוונטיים ישירות ללוגיקה של האפליקציה:
-
static/: מכיל קובצי CSS שמגדירים את הסגנון של האפליקציה. -
templates/: מכיל קובצי HTML שמגדירים את הפריסה והתוכן של האפליקציה.
הסבר על המונולית כאפליקציית Flask
המונולית במדריך הזה בנוי באמצעות Flask, שהיא ספריית Python לבניית אפליקציות אינטרנט. עם זאת, בדרך כלל לא משתמשים ב-Flask בסביבות ייצור כי היא לא תומכת בבו-זמניות (concurrency), מה שעלול להוביל לצווארי בקבוק בביצועים בעומס כבד. בנוסף, לאפליקציית Flask חסרות תכונות חזקות לטיפול בשגיאות ולשינוי גודל.
אפליקציית Cymbal Books משתמשת ב-Flask כי הפשטות וההגדרה המינימלית שלה מקלות על ההבנה של מושגי המודולריזציה והקונטיינריזציה. באפליקציות ברמת ייצור שמשתמשות ב-Python, כדאי לשקול חלופות ל-Flask כמו FastAPI או Django. אפשר גם להשתמש ב-frameworks שמותאמים לשפות אחרות, כמו Spring Boot ל-Java או Express.js ל-Node.js. המסגרות האלה יכולות להציע יכולות טובות יותר של פעולות מקבילות, יכולת הרחבה ומוכנות לייצור, כדי לעמוד בדרישות של אפליקציות בעולם האמיתי.
בדיקת mono.py
כל הלוגיקה של המונוליט כלולה בקובץ אחד שנקרא mono.py. הקובץ הזה יוצר אפליקציית Flask. אפליקציית Flask פועלת בתוך שרת אינטרנט, מאזינה לכתובות URL ספציפיות שנקראות נקודות קצה ומגיבה לבקשות שנשלחות לכתובות ה-URL האלה. כשמישהו מבקש אחת מכתובות ה-URL האלה – על ידי ביקור בה בדפדפן אינטרנט או על ידי שליחת הבקשה באופן פרוגרמטי – Flask מריצה את קטע הקוד המתאים כדי לטפל בבקשה הזו.
צילום המסך הבא מציג את הקובץ mono.py. התיבות מדגישות את רכיבי ה-handler של המסלול באפליקציה. בעוד שרכיב handler אחד מציג את דף הבית למשתמש, האחרים משמשים בעיקר לתקשורת בין מודולים – העברת נתונים בפורמט JSON או קבצים של תמונות סטטיות. בקטעים הבאים מפורט מידע נוסף על נקודות הקצה האלה.

בצילום המסך, התיבות מדגישות את מטפלי המסלולים של האפליקציה. מטפל במסלול מורכב משני חלקים:
- השורה
@app.route()שמגדירה תבנית URL (למשל/book/<id>/reviews). - הפונקציה שמופעלת כשקוראים לנקודת הקצה.
נקודת קצה היא כתובת URL שתואמת לתבנית שמוגדרת בשורה @app.route().
לדוגמה, כשמשתמש לוחץ על הצגת ביקורות בדף פרטי ספר, האפליקציה שולחת בקשה אל http://localhost:8080/book/1/reviews. הפונקציה לטיפול בבקשות של book reviews מגיבה לבקשה הזו על ידי ביצוע השלבים הבאים:
- מזהה שכתובת ה-URL הזו תואמת לתבנית
/book/<id>/reviews. - הפונקציה מקבלת את הביקורות על ספר 1 מקובץ JSON.
- הביקורות האלה נשלחות בחזרה לחלק הקדמי של האתר בפורמט JSON.
לאחר מכן, רכיב פרטי הספר מציג את הביקורות האלה בפורמט קריא בדף האינטרנט. המונולית של Cymbal Books משתמש בספריית Python שנקראת Flask כדי לפשט את ההטמעה של מטפלי נתיבים. במדריך הבא תראו של-Flask ולמטפלי המסלולים יש תפקיד חשוב כשממירים מונוליט לאפליקציה מודולרית.
למה נקודות הקצה של המונוליט חשובות למודולריזציה
נקודות קצה ממלאות תפקיד חשוב באפליקציות Flask, כולל באפליקציית Cymbal Books. עם זאת, החשיבות שלהן לא מסתיימת בעיצוב המונוליטי, כי הבנת נקודות הקצה חיונית לפירוק האפליקציה למודולים עצמאיים. אלו הסיבות לכך:
- תכונות עיקריות: נקודות קצה מטמיעות את התכונות העיקריות של האפליקציה, כמו הצגת דפים או אחזור נתונים. כל תכונה קשורה לנקודת קצה ספציפית.
- מודולריזציה: נקודות הקצה משמשות כגבולות טבעיים, או קווי שבר, לחלוקת האפליקציה למודולים קטנים יותר. כפי שאפשר לראות במדריך הבא, כל מודול בגרסה המודולרית של האפליקציה תואם לתכונה עם נקודות קצה משלה.
- תקשורת: בעיצוב מודולרי, נקודות קצה מאפשרות למודולים אוטונומיים לתקשר ביניהם. הבנת האופן שבו נקודות קצה מוטמעות ב-
mono.pyמניחה את הבסיס להפיכת אפליקציית Cymbal Books למודולרית, כך שהיא תורכב ממודולים עצמאיים במדריך הבא.
בדיקת מטפלי המסלולים של המונוליט
כדי לראות איזה סוג נתונים מחזיר כל handler של מסלול, נכנסים לנקודות הקצה הבאות בדפדפן:
- הפונקציה לטיפול בבקשות בדף הבית: אפשר להיכנס לכתובת
http://localhost:8080/כדי לראות דף HTML מלא שמציג את קטלוג הספרים. - ה-handler של מסלול הפרטים של הספר: אפשר לעבור אל
http://localhost:8080/book/1כדי לראות דף HTML עם פרטים על ספר מסוים. הדף מאחזר נתוני JSON על ספר מהשרת ומציג אותם בפורמט קריא באמצעות תבנית HTML. כדי לראות פרטים על ספרים אחרים, אפשר לשנות את מספר המזהה (1, 2 או 3) בכתובת ה-URL. - Book reviews route handler: כדי לראות נתוני JSON של הביקורות על הספר, צריך להיכנס לכתובת
http://localhost:8080/book/3/reviewsהנתונים האלה עוברים עיבוד לפורמט קריא כשלוחצים עלShow Reviewsבדף הפרטים של הספר Melodic Mechanics. - Image route handler: Visit
http://localhost:8080/images/fungi_frontier.jpgto see an image file. דף הבית ודפי פרטי הספר קוראים לנקודת הקצה הזו כדי להציג את תמונות הכריכה של הספרים.
סיכום
במדריך הזה, הגדרתם והפעלתם את אפליקציית Cymbal Books המונוליטית. אחר כך למדתם שהמונוליט מיושם כאפליקציית Flask, שמקשיבה לכתובות URL ספציפיות, שנקראות נקודות קצה, ומגיבה לבקשות שנשלחות לכתובות ה-URL האלה.
המאמרים הבאים
במדריך הבא, Modularize the monolith, מוסבר איך לפרק את המונולית למודולים עצמאיים.