הגדרת בקשות בשלב ההפעלה של האפליקציה לשיפור הביצועים

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

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

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

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

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

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

הפעלת בקשות warmup

התזמון של App Engine משתמש בבקשות warmup כדי לשלוט בהתאמה אוטומטית לעומס של מכונות על סמך ההגדרה שסופקה על ידי המשתמש. כשבקשות warmup מופעלות, App Engine שולח בקשות GET אל /_ah/warmup. אתם יכולים להטמיע handlers לבקשה הזו כדי לבצע משימות ספציפיות לאפליקציה, כמו טעינה מראש מהמטמון של נתוני האפליקציה.

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

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

כדי להפעיל בקשות חימום, מוסיפים את הרכיב warmup מתחת להנחיה inbound_services בקובץ app.yaml, לדוגמה:

inbound_services:
- warmup

יצירת ה-handler

יוצרים handler שיעבד את הבקשות שנשלחות אל /_ah/warmup. ה-handler צריך לבצע את כל הלוגיקה של ההפעלה הראשונית שנדרשת לאפליקציה.

לדוגמה, אם אתם משתמשים ב-Flask, יכול להיות שה-handler ייראה כך:

from flask import Flask


app = Flask(__name__)


@app.route("/")
def main():
    """Serves a predefined placeholder string.

    Returns:
        A predefined string saying 'Hello World!'
    """
    return "Hello World!"


@app.route("/_ah/warmup")
def warmup():
    """Served stub function returning no content.

    Your warmup logic can be implemented here (e.g. set up a database connection pool)

    Returns:
        An empty string, an HTTP code 200, and an empty object.
    """
    return "", 200, {}


if __name__ == "__main__":
    # This is used when running locally only. When deploying to Google App
    # Engine, a webserver process such as Gunicorn will serve the app. This
    # can be configured by adding an `entrypoint` to app.yaml.
    app.run(host="127.0.0.1", port=8080, debug=True)