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

Mendaftarkan pengendali Anda

Anda dapat mendaftarkan skrip yang menangani warmup request di file app.yaml project Anda. Contoh:

inbound_services:
- warmup

handlers:
- url: /_ah/warmup
  script: main.py
  login: admin

Contoh ini mendaftarkan pengendali untuk memproses warmup request ke jalur permintaan /_ah/warmup dengan file main.py.

Membuat pengendali Anda

Buat pengendali yang akan memproses permintaan yang dikirim ke /_ah/warmup. Pengendali harus menjalankan logika warmup yang diperlukan oleh aplikasi. Contoh berikut dibuat berdasarkan contoh sebelumnya:

import webapp2

class MyWarmUpCode(webapp2.RequestHandler):
  """
  This class handles the warmup request. You should add any code that you
  need to execute in the `get` method, such as populating caches, and ensure
  that you return a successful HTTP response.
  """

  def get(self):

      # Your warmup logic goes here.

      # Return a successful response to indicate the logic completed.
      self.response.headers['Content-Type'] = 'text/plain'
      self.response.write('Warmup successful')

  # ...

application = webapp2.WSGIApplication(
    [
        ('/_ah/warmup', MyWarmUpCode),
        # Other handlers
        # ...
    ]
)

Langkah berikutnya

Sebaiknya simpan nilai di datastore dalam memori seperti Memcache, yang memberi aplikasi Anda akses cepat dan tanpa kueri ke data.

Misalnya, jika Anda membuat dan menyimpan daftar artikel trending saat ini untuk situs Anda, Anda dapat membuat daftar tersebut dalam warmup dan menyimpannya di Memcache. Saat permintaan pengguna masuk, App Engine tidak perlu menjalankan kueri datastore apa pun dan aplikasi dapat melayani permintaan pengguna dengan lebih cepat.