Mengonfigurasi warmup request untuk meningkatkan performa

Anda dapat menggunakan warmup request untuk mengurangi latensi permintaan dan respons saat kode aplikasi sedang dimuat ke instance yang baru dibuat.

App Engine sering kali perlu memuat kode aplikasi Anda ke instance baru. Pemuatan instance dapat terjadi dalam situasi berikut:

  • Saat Anda men-deploy ulang versi aplikasi.
  • Saat instance baru dibuat karena beban dari permintaan yang melebihi kapasitas kumpulan instance yang sedang berjalan saat ini.
  • Saat pemeliharaan dan perbaikan infrastruktur atau hardware fisik yang mendasarinya terjadi.

Pemuatan kode aplikasi Anda ke instance baru dapat menyebabkan permintaan pemuatan. Permintaan pemuatan dapat menyebabkan peningkatan latensi permintaan bagi pengguna, tetapi Anda dapat menghindari latensi ini menggunakan warmup request. Warmup request memuat kode aplikasi Anda ke dalam instance baru sebelum permintaan langsung mencapai instance tersebut.

Jika warmup request diaktifkan untuk aplikasi Anda, App Engine akan mencoba mendeteksi kapan aplikasi memerlukan instance baru dan memulai warmup request untuk melakukan inisialisasi instance baru. Namun, upaya deteksi ini tidak berfungsi pada setiap kasus. Akibatnya, Anda mungkin menemukan permintaan pemuatan, meskipun warmup request diaktifkan di aplikasi Anda. Misalnya, jika aplikasi Anda tidak melayani traffic, permintaan pertama ke aplikasi akan selalu berupa permintaan pemuatan, bukan warmup request.

Warmup request menggunakan jam instance seperti permintaan lainnya ke aplikasi App Engine Anda. Dalam sebagian besar kasus jika warmup request diaktifkan, Anda tidak akan melihat peningkatan jam kerja instance karena aplikasi hanya melakukan inisialisasi dalam warmup request, bukan permintaan pemuatan. Penggunaan jam instance dapat meningkat jika Anda memutuskan untuk melakukan lebih banyak pekerjaan, seperti pra-caching selama warmup request. Jika menetapkan min_idle_instances menjadi lebih besar dari 0, Anda mungkin akan menerima warmup request saat instance tersebut pertama kali dimulai, tetapi akan tetap tersedia setelah itu.

Mengaktifkan warmup request

Warmup request digunakan oleh penjadwal App Engine, yang mengontrol penskalaan otomatis instance berdasarkan konfigurasi yang disediakan pengguna. Dengan warmup request diaktifkan, App Engine mengeluarkan permintaan GET ke /_ah/warmup. Anda dapat mengimplementasikan pengendali untuk permintaan ini untuk melakukan tugas khusus aplikasi, seperti pra-caching data aplikasi.

Penjadwal memulai instance jika menentukan bahwa diperlukan lebih banyak instance. Warmup request dapat muncul di log meskipun dinonaktifkan karena penjadwal menggunakannya untuk memulai instance.

Perhatikan bahwa warmup request tidak dijamin akan dipanggil. Dalam beberapa situasi, permintaan pemuatan akan dikirim: misalnya, jika instance tersebut adalah yang pertama dimulai, atau jika ada peningkatan traffic yang tajam. Namun, akan ada "upaya terbaik" untuk mengirim permintaan ke instance yang sudah dipanaskan jika warmup request diaktifkan.

Untuk mengaktifkan warmup request, tambahkan elemen warmup di bawah perintah inbound_services dalam file app.yaml, misalnya:

inbound_services:
- warmup

Membuat pengendali Anda

Buat pengendali yang akan memproses permintaan yang dikirim ke /_ah/warmup. Pengendali harus menjalankan logika warmup yang diperlukan oleh aplikasi Anda.

Misalnya, jika Anda menggunakan Flask, pengendali Anda mungkin terlihat seperti ini:

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)