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 selanjutnya
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.