הגדרת המבנה של שירותי אינטרנט ב-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) של צד שלישי. מידע נוסף על הצגת תוכן סטטי זמין במאמר הצגת קבצים סטטיים.

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

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