Instance adalah komponen pembentuk dasar App Engine, yang menyediakan semua resource yang diperlukan agar berhasil menghosting aplikasi Anda. Kapan pun, aplikasi Anda dapat berjalan di satu atau beberapa instance dengan penyebaran permintaan di semua instance tersebut. Setiap instance menyertakan lapisan keamanan untuk memastikan bahwa instance tidak saling memengaruhi secara tidak sengaja.
App Engine dapat secara otomatis membuat dan menonaktifkan instance saat traffic berfluktuasi, atau Anda dapat menentukan jumlah instance yang akan dijalankan, berapa pun jumlah traffic. Untuk menentukan cara dan waktu instance baru dibuat, tentukan jenis penskalaan untuk aplikasi Anda. Setelan penskalaan diterapkan di level versi App Engine sebagai bagian dari file app.yaml.
Jenis penskalaan
App Engine mendukung jenis penskalaan berikut, yang mengontrol cara dan waktu instance dibuat:
- Otomatis (default)
- Dasar
- Manual
Anda dapat menentukan jenis penskalaan di
app.yaml
aplikasi.
Secara default, aplikasi Anda menggunakan penskalaan otomatis, yang berarti App Engine akan mengelola jumlah instance yang nonaktif.
- Penskalaan otomatis
- Penskalaan otomatis membuat instance berdasarkan tingkat permintaan, latensi respons,
dan metrik aplikasi lainnya. Anda dapat menentukan batas untuk setiap
metrik ini, serta jumlah instance minimum yang akan terus berjalan setiap saat
dengan mengonfigurasi elemen
automatic_scaling
.
- Penskalaan Dasar
- Penskalaan dasar membuat instance saat aplikasi menerima permintaan. Setiap instance akan dinonaktifkan saat aplikasi tidak aktif. Penskalaan dasar sangat ideal untuk pekerjaan yang sesekali atau didorong oleh aktivitas pengguna.
- Penskalaan manual
- Penskalaan manual menentukan jumlah instance yang terus berjalan, berapa pun tingkat bebannya. Hal ini memungkinkan tugas-tugas seperti inisialisasi dan aplikasi kompleks yang mengandalkan status memori dari waktu ke waktu.
Fitur | Penskalaan otomatis | Penskalaan dasar | Penskalaan manual |
---|---|---|---|
Waktu tunggu permintaan |
10 menit untuk permintaan HTTP dan tugas task queue. Jika aplikasi Anda tidak
menampilkan permintaan dalam batas waktu ini, App Engine akan menginterupsi
pengendali permintaan dan
menghasilkan
error untuk ditangani oleh kode Anda.
Untuk runtime lama (Java 8, PHP 5, dan Python 2):
|
24 jam untuk permintaan HTTP dan tugas dalam antrean tugas Jika aplikasi Anda tidak
menampilkan permintaan dalam batas waktu ini, App Engine akan menginterupsi
pengendali permintaan dan
menghasilkan
error untuk ditangani oleh kode Anda.
Instance dengan penskalaan dasar dapat memilih untuk menangani |
Sama seperti penskalaan dasar. |
Kediaman | Instance dinonaktifkan berdasarkan pola penggunaan. |
Instance dinonaktifkan berdasarkan parameter
idle_timeout . Jika instance tidak ada aktivitas, misalnya belum menerima
permintaan selama lebih dari idle_timeout ,
instance akan dinonaktifkan.
|
Instance tetap ada dalam memori dan status dipertahankan di seluruh permintaan. Saat
instance dinonaktifkan, permintaan /_ah/stop akan muncul dalam
log.
Jika ada pengendali /_ah/stop , pengendali tersebut memiliki waktu 30 detik untuk diselesaikan sebelum penonaktifan terjadi.
|
Pengaktifan dan penonaktifan | Instance dibuat sesuai permintaan untuk menangani permintaan dan secara otomatis dinonaktifkan saat tidak ada aktivitas. |
Instance dibuat sesuai permintaan untuk menangani permintaan dan secara otomatis
dinonaktifkan saat tidak ada aktivitas, berdasarkan parameter
konfigurasi idle_timeout . Instance yang
dihentikan secara manual
memiliki waktu 30 detik untuk menyelesaikan penanganan permintaan sebelum
dihentikan secara paksa.
|
App Engine mengirimkan permintaan memulai ke instance secara otomatis dalam
bentuk permintaan GET kosong ke /_ah/start . Seperti
penskalaan dasar, instance yang
dihentikan secara manual
memiliki waktu 30 detik untuk menyelesaikan penanganan permintaan sebelum
dihentikan secara paksa.
|
Kemampuan respons instance | Instance bersifat anonim. |
Instance "i" dari versi "v" layanan "s" dapat diberi alamat di URL:
https://i-dot-v-dot-s-dot-app_id.REGION_ID.r.appspot.com .
Jika Anda telah menyiapkan
pemetaan subdomain karakter pengganti untuk domain kustom, Anda juga dapat berinteraksi dengan layanan atau instance-nya melalui URL dengan format
https://s.domain.com atauhttps://i.s.domain.com singkat ini.
Anda dapat meng-cache status dengan nyaman di setiap instance dan menggunakannya dalam permintaan berikutnya.
|
Sama seperti penskalaan dasar. |
Penskalaan |
App Engine menskalakan jumlah instance secara otomatis sebagai respons terhadap
volume pemrosesan. Penskalaan ini memperhitungkan
setelan automatic_scaling yang disediakan
per versi dalam file konfigurasi.
|
Layanan dengan penskalaan dasar dikonfigurasi dengan menetapkan jumlah maksimum
instance dalam parameter max_instances dari
setelan basic_scaling . Jumlah instance langsung diskalakan
sesuai dengan volume pemrosesan.
|
Anda mengonfigurasi jumlah instance setiap versi di file konfigurasi layanan tersebut. Jumlah instance biasanya sesuai dengan ukuran set data yang disimpan dalam memori atau throughput yang diinginkan untuk pekerjaan offline. |
Menskalakan instance dinamis
Aplikasi App Engine yang menggunakan penskalaan dasar atau otomatis didukung oleh sejumlah instance dinamis pada waktu tertentu, bergantung pada volume permintaan yang masuk. Seiring dengan meningkatnya permintaan untuk aplikasi Anda, jumlah instance dinamis juga dapat meningkat.
Aplikasi dengan penskalaan dasar
Jika Anda menggunakan penskalaan dasar, App Engine akan berupaya menjaga biaya Anda tetap rendah, meskipun hal itu dapat menghasilkan latensi yang lebih tinggi saat volume permintaan masuk meningkat.
Jika tidak ada instance yang tersedia untuk melayani permintaan masuk, App Engine akan memulai instance baru. Bahkan setelah memulai instance baru, beberapa permintaan mungkin perlu dimasukkan ke dalam antrean sampai instance baru tersebut menyelesaikan proses pengaktifan. Jika Anda memerlukan latensi serendah mungkin, pertimbangkan untuk menggunakan penskalaan otomatis, yang akan membuat instance baru secara preemptive untuk meminimalkan latensi.
Aplikasi dengan penskalaan otomatis
Jika Anda menggunakan penskalaan otomatis, setiap instance dalam aplikasi memiliki antreannya sendiri untuk permintaan masuk. Sebelum antrean menjadi cukup lama sehingga menimbulkan efek yang signifikan pada latensi aplikasi, App Engine secara otomatis membuat satu atau beberapa instance baru untuk mengakomodasi peningkatan beban.
Anda dapat mengonfigurasi setelan penskalaan otomatis guna mencapai keseimbangan antara performa yang diinginkan dan biaya yang dapat dikeluarkan. Tabel berikut menjelaskan setelan ini.
Setelan penskalaan otomatis | Deskripsi |
---|---|
Target Pemakaian CPU | Menetapkan nilai minimum rasio pemakaian CPU untuk menentukan nilai minimum penggunaan CPU di mana lebih banyak instance akan dimulai untuk menangani traffic. |
Target Pemanfaatan Throughput | Menetapkan nilai minimum throughput untuk jumlah permintaan serentak, yang setelahnya lebih banyak instance akan dimulai untuk menangani traffic. |
Permintaan Serentak Maksimum | Menetapkan batas maksimum permintaan serentak yang dapat diterima instance sebelum penjadwal memunculkan instance baru. |
Tonton video Setelan Penjadwal App Engine untuk melihat efek setelan ini.
Memperkecil skala
Saat volume permintaan menurun, App Engine akan mengurangi jumlah instance. Penskalaan ke bawah ini membantu memastikan bahwa semua instance aplikasi Anda saat ini digunakan untuk efisiensi dan efektivitas biaya yang optimal.
Saat aplikasi tidak digunakan sama sekali, App Engine akan menonaktifkan instance dinamis terkait, namun langsung memuatnya kembali begitu diperlukan. Memuat ulang instance dapat menghasilkan permintaan pemuatan dan latensi tambahan bagi pengguna.
Anda dapat menentukan jumlah minimum instance yang nonaktif. Menetapkan jumlah instance nonaktif yang sesuai untuk aplikasi Anda berdasarkan volume permintaan memungkinkan aplikasi Anda melayani setiap permintaan dengan sedikit latensi, kecuali jika Anda mengalami volume permintaan yang sangat tinggi.
Pengecilan skala dalam penskalaan otomatis
Jika aplikasi Anda menggunakan penskalaan otomatis, instance yang tidak aktif memerlukan
waktu sekitar 15 menit untuk mulai dinonaktifkan. Agar satu atau beberapa instance nonaktif tetap berjalan, tetapkan nilai min_idle_instances
ke 1
atau lebih tinggi.
Penskalaan dan batch permintaan
Jika Anda mengirim batch permintaan ke layanan, misalnya, ke task queue untuk diproses, sejumlah besar instance akan dibuat dengan cepat. Sebaiknya kendalikan hal ini dengan membatasi kapasitas jumlah permintaan yang dikirim per detik, jika memungkinkan. Misalnya, jika menggunakan Google Tasks, Anda dapat mengontrol laju pengiriman tugas.
Siklus proses instance
Status instance
Instance layanan yang diskalakan secara otomatis selalu berjalan. Namun, instance layanan dengan penskalaan manual atau dasar dapat berjalan atau dihentikan. Semua instance dari layanan dan versi yang sama memiliki status yang sama. Anda dapat mengubah status instance dengan mengelola versi Anda. Anda dapat:
- Menggunakan halaman Versi di konsol Google Cloud
- Menggunakan perintah
gcloud app versions start
dangcloud app versions stop
Skrip
Setiap instance layanan dibuat sebagai respons terhadap permintaan memulai, yang merupakan
permintaan GET
HTTP kosong ke /_ah/start
. App Engine mengirim permintaan ini
untuk membuat instance; pengguna tidak dapat mengirim permintaan ke
/_ah/start
. Instance penskalaan manual dan dasar harus merespons permintaan
pengaktifan sebelum dapat menangani permintaan lain. Permintaan pengaktifan dapat digunakan
untuk dua tujuan:
- Untuk memulai program yang berjalan tanpa batas waktu, tanpa menerima permintaan lebih lanjut.
- Untuk melakukan inisialisasi instance sebelum menerima traffic tambahan.
Instance penskalaan manual, dasar, dan otomatis diaktifkan secara berbeda. Saat Anda
memulai instance penskalaan manual, App Engine akan segera mengirimkan
permintaan /_ah/start
ke setiap instance. Saat Anda memulai instance layanan penskalaan
dasar, App Engine memungkinkannya menerima traffic, tetapi
permintaan /_ah/start
tidak akan dikirim ke instance sampai permintaan pengguna pertamanya
diterima. Beberapa instance penskalaan dasar hanya dimulai jika diperlukan, untuk
menangani peningkatan traffic. Instance yang diskalakan secara otomatis tidak
menerima permintaan /_ah/start
apa pun.
Jika instance merespons permintaan /_ah/start
dengan kode status HTTP
200–299
atau 404
, instance tersebut dianggap berhasil dimulai dan dapat
menangani permintaan tambahan. Jika tidak, App Engine akan menghentikan
instance. Instance penskalaan manual segera dimulai ulang, sedangkan instance
penskalaan dasar dimulai ulang hanya saat diperlukan untuk menyalurkan traffic.
Nonaktif
Proses penonaktifan mungkin dipicu oleh berbagai peristiwa terencana dan tidak terencana, seperti:
- Ada terlalu banyak instance dan permintaan aplikasi (traffic) tidak cukup.
- Anda menghentikan instance secara manual.
- Anda men-deploy versi terbaru ke layanan.
- Instance melebihi memori maksimum untuk
instance_class
yang dikonfigurasi. - Aplikasi Anda kehabisan kuota Jam Kerja Instance.
- Instance Anda dipindahkan ke mesin yang berbeda, baik karena mesin yang menjalankan instance saat ini dimulai ulang, atau App Engine memindahkan instance Anda untuk meningkatkan distribusi beban.
Salah satu manfaat platform "bayar hanya untuk yang Anda butuhkan" di lingkungan standar App Engine seperti yang dijelaskan sebelumnya dalam Pengecilan Skala adalah sistem menskalakan otomatis jumlah instance hingga nol jika ada tidak ada traffic. Hal ini membantu menjadikan App Engine sebagai solusi hemat biaya untuk aplikasi kecil yang tidak menerima permintaan berkelanjutan. Saat instance perlu dinonaktifkan, permintaan masuk baru akan dirutekan ke instance lain (jika ada) dan permintaan yang saat ini sedang diproses akan diberi waktu untuk menyelesaikannya.
App Engine biasanya mengirimkan sinyal STOP
(SIGTERM
) ke container aplikasi.
Aplikasi Anda tidak perlu merespons peristiwa ini, tetapi dapat menggunakan ini untuk melakukan
tindakan pembersihan yang diperlukan sebelum penampung dinonaktifkan. Dalam
kondisi normal, sistem menunggu hingga 3 detik sampai
aplikasi berhenti, lalu mengirimkan sinyal KILL
(SIGKILL
). Jika aplikasi Anda tidak
menangkap sinyal SIGTERM
, instance akan segera dihentikan.
Beberapa pesan log penonaktifan instance yang mungkin Anda lihat meliputi:
[start] Quitting on terminated signal
[INFO] Handling signal: term
[INFO] Worker exiting (pid: 21)
[INFO] Worker exiting (pid: 24)
[INFO] Shutting down: Master
[start] Start program failed: termination triggered by nginx exit
Pesan log ini tidak menunjukkan kondisi error apa pun, tetapi merupakan indikasi
proses penonaktifan instance normal. Perhatikan bahwa [start]
dan Start
dalam
log merujuk ke proses platform bernama start
dan tidak ada hubungannya dengan
memulai instance atau aplikasi.
Permintaan pemuatan
Saat App Engine membuat instance baru untuk aplikasi Anda, instance harus terlebih dahulu memuat library dan resource apa pun yang diperlukan untuk menangani permintaan. Hal ini terjadi selama permintaan pertama ke instance, yang disebut Permintaan Pemuatan. Selama permintaan pemuatan, aplikasi Anda akan mengalami inisialisasi yang menyebabkan permintaan memerlukan waktu lebih lama.
Praktik terbaik berikut memungkinkan Anda mengurangi durasi permintaan pemuatan:
- Hanya muat kode yang diperlukan untuk pengaktifan.
- Akses disk sedikit mungkin.
- Dalam beberapa kasus, memuat kode dari file zip atau jar lebih cepat daripada memuat dari banyak file terpisah.
Warmup request
Warmup request adalah jenis permintaan pemuatan tertentu yang memuat kode
aplikasi ke dalam instance sebelum waktunya, sebelum permintaan aktif dibuat.
Instance penskalaan manual atau dasar tidak menerima permintaan /_ah/warmup
.
Waktu beroperasi instance
App Engine berupaya membuat instance penskalaan manual dan dasar tetap berjalan tanpa batas waktu. Namun, saat ini tidak ada jaminan waktu beroperasi untuk instance penskalaan manual dan dasar.
NTP dengan lingkungan standar App Engine
Lingkungan standar App Engine memiliki layanan protokol waktu jaringan (NTP) yang menggunakan server NTP Google. Namun, layanan NTP tidak dapat diedit.