Cara Mengelola Instance

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 tidak ada aktivitas.

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.
Tabel ini membandingkan fitur performa dari ketiga jenis penskalaan:

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):

  • Waktu tunggu untuk antrean tugas serta tugas dan permintaan dari Cron adalah 10 menit.
  • Waktu tunggu untuk permintaan HTTP lain adalah 1 menit.
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 /_ah/start dan menjalankan program atau skrip selama berjam-jam tanpa menampilkan kode respons HTTP.

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:

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.

Untuk mempelajari cara menggunakan warmup request lebih lanjut, lihat Mengonfigurasi warmup request.

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.