הגדרת המבנה של שירותי אינטרנט ב-App Engine

מזהה אזור

REGION_ID הוא קוד מקוצר ש-Google מקצה על סמך האזור שבוחרים כשיוצרים את האפליקציה. הקוד לא תואם למדינה או למחוז, למרות שחלק ממזהי האזורים עשויים להיראות דומים לקודים נפוצים של מדינות ומחוזות. באפליקציות שנוצרו אחרי פברואר 2020, REGION_ID.r נכלל בכתובות URL של App Engine. באפליקציות קיימות שנוצרו לפני התאריך הזה, מזהה האזור הוא אופציונלי בכתובת ה-URL.

מידע נוסף על מזהי אזורים

במדריך הזה מוסבר איך לבנות את השירותים ואת המשאבים שקשורים לאפליקציית App Engine.

מבנה הספרייה

כל גרסה של שירות App Engine מוגדרת בקובץ תצורה app.yaml. באפליקציות פשוטות, הדרישה המינימלית לפריסה היא הגדרה של קובץ app.yaml. קובץ app.yaml משמש כמתאר פריסה, ומוגדרים בו סוג ההרחבה ומשאבי ה-CPU, הדיסק והזיכרון לגרסה ספציפית של שירות. אם אתם פורסים כמה גרסאות של שירות, אתם יכולים ליצור כמה קובצי YAML באותה ספרייה כדי לייצג את ההגדרה של כל אחת מהגרסאות.

בסביבת זמן הריצה של Java, קובצי ההגדרות הם בפורמט YAML.

במהלך פיתוח מקומי, אפשר ליצור ספריות נפרדות לכל שירות בשורש האפליקציה. אם אתם מארחים את האפליקציה שלכם מחוץ למערכת בקרת גרסאות (VCS), למשל GitHub, אתם יכולים גם לבנות את האפליקציה כך שתשתמש בספריות נפרדות במאגר, או להשתמש במאגרים נפרדים לכל שירות. כל ספרייה או מאגר צריכים לייצג שירות יחיד ולהכיל את קובץ ה-app.yaml של השירות יחד עם קוד המקור המשויך.

יש לכם אפשרות לציין שם ייחודי לכל קובץ app.yaml של השירות. לדוגמה, אפשר לתת לקובץ תצורה שם שקשור לשירות, או להשתמש בשמות ייחודיים כדי לייצג כל גרסה של אותו שירות, כמו service1.yaml או app.flexible.yaml.

קובצי התצורה האופציונליים האחרים צריכים להיות בתיקיית השורש או במאגר של שירות default באפליקציה. קובצי התצורה האופציונליים האלה חלים על הגדרות ברמת האפליקציה שלא ספציפיות לשירות מסוים, כולל הקבצים dispatch.yaml, index.yaml ו-cron.yaml.

דוגמאות

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

גרף היררכי של שירות YAML יחיד

בדוגמה הבאה אפשר לראות איך אפליקציה עם שלושה שירותים עשויה להיראות אם מפתחים אותה באופן מקומי. קובץ dispatch.yaml אופציונלי נוסף לאפליקציה הזו בספריית הבסיס. בנוסף, בספרייה הבסיסית יש שלוש ספריות לכל אחד מהשירותים של האפליקציה. תיקיית המשנה service1 כוללת את קובצי המקור וההגדרות של השירות הזה. באופן דומה, גם service2 וגם service3 נמצאים בספריות נפרדות שמכילות את הקבצים של כל שירות, אבל service3 כולל שתי גרסאות של קובץ התצורה ב-YAML:

תרשים היררכי של שירותי YAML

בדוגמה הבאה, לשירות יחיד יש את קובץ dispatch.yaml האופציונלי ושני קובצי הגדרה שמייצגים גרסאות שונות של השירות הזה, service1.yaml ו-service2.yaml:

תרשים היררכי של שירותי YAML קטנים

שיקולים לגבי התכנון של זמני הפעילות של המופע

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

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

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

מידע נוסף על ניהול מופעים

שירות default

כל אפליקציית App Engine כוללת שירות default. כדי ליצור ולפרוס שירותים נוספים באפליקציה, צריך קודם לפרוס את הגרסה הראשונית של האפליקציה בשירות default.

אפשר לציין את שירות ברירת המחדל ב-app.yaml באמצעות ההגדרה service: default.

בקשות שנשלחות לאפליקציה שלכם באמצעות פרויקט Google Cloud נשלחות לשירות default, לדוגמה, https://PROJECT_ID.REGION_ID.r.appspot.com. מידע נוסף על טירגוט השירותים האחרים זמין במאמר תקשורת בין שירותים.

קבצי הגדרה אופציונליים

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

  • cron.yaml מגדיר משימות מתוזמנות שפועלות בזמנים מוגדרים או במרווחי זמן קבועים.
  • dispatch.yaml מחליף את כללי ברירת המחדל של הניתוב על ידי שליחת בקשות נכנסות לשירות ספציפי על סמך הנתיב או שם המארח בכתובת ה-URL.
  • index.yaml מציין באילו אינדקסים האפליקציה צריכה להשתמש אם היא משתמשת בשאילתות Datastore.
    • שימו לב שהקובץ הזה זמין לכל סביבות זמן הריצה, למעט סביבת זמן הריצה של ‎ .NET.

שיקולים לגבי אחסון נתונים וקבצים

מ-App Engine, אפשר לגשת בקלות לשירותים אחרים Google Cloud כמו Datastore,‏ Cloud SQL ו-Cloud Storage.

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

לפרטים על אחסון קבצים ב- Google Cloud או מחוצה לו, אפשר לעיין במאמר הסבר על אחסון נתונים וקבצים.

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

המאמרים הבאים

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