Tentang lingkungan eksekusi

Layanan Cloud Run secara default tidak memiliki lingkungan eksekusi yang ditentukan, yang berarti Cloud Run memilih lingkungan eksekusi berdasarkan fitur yang digunakan. Jadi, kecuali jika Anda menentukan lingkungan eksekusi untuk layanan, Cloud Run dapat memilih lingkungan generasi pertama atau generasi kedua.

Perhatikan bahwa tugas Cloud Run hanya menggunakan lingkungan eksekusi generasi kedua, dan hal ini tidak dapat diubah untuk tugas.

Lingkungan eksekusi generasi pertama memiliki waktu cold start yang cepat dan emulasi sebagian besar, tetapi tidak semua panggilan sistem operasi. Awalnya, ini adalah satu-satunya lingkungan eksekusi yang tersedia untuk layanan di Cloud Run.

Lingkungan eksekusi generasi kedua menyediakan kompatibilitas Linux penuh, bukan emulasi panggilan sistem. Lingkungan eksekusi ini menyediakan:

  • Performa CPU yang lebih cepat
  • Performa jaringan yang lebih cepat, terutama dengan hadirnya paket yang hilang
  • Kompatibilitas Linux penuh, termasuk dukungan untuk semua panggilan sistem, namespace, dan cgroup
  • Dukungan sistem file jaringan

Meskipun lingkungan eksekusi generasi kedua umumnya memiliki performa lebih cepat dalam beban berkelanjutan, lingkungan ini memiliki waktu cold start yang lebih lama dibandingkan generasi pertama untuk sebagian besar layanan.

Anda dapat memilih lingkungan eksekusi untuk layanan Cloud Run saat Anda men-deploy layanan baru atau revisi baru dari layanan Anda. Jika Anda tidak menentukan lingkungan eksekusi, generasi pertama akan digunakan secara default.

Cara memilih lingkungan eksekusi

Anda harus menggunakan generasi pertama jika salah satu hal berikut berlaku:

  • Layanan Cloud Run Anda memiliki traffic yang tinggi, dan perlu diskalakan dengan cepat ke banyak instance, atau layanan Anda akan sensitif terhadap waktu cold start.
  • Layanan Cloud Run Anda memiliki traffic yang jarang terjadi sehingga menyebabkan seringnya penskalaan dari nol.
  • Anda ingin menggunakan memori kurang dari 512 MiB. Lingkungan eksekusi generasi kedua memerlukan memori setidaknya sebesar 512 MiB.

Anda harus menggunakan generasi kedua jika salah satu dari hal berikut berlaku untuk layanan Cloud Run Anda:

  • Layanan Anda perlu untuk menggunakan sistem file jaringan, yang hanya didukung oleh generasi kedua.
  • Layanan Anda memiliki traffic yang cukup stabil dan toleran terhadap cold start yang agak lebih lambat.
  • Layanan Anda memiliki workload CPU yang intensif.
  • Layanan Anda dapat memanfaatkan performa jaringan yang lebih cepat.
  • Layanan Anda perlu untuk menggunakan software yang memiliki masalah yang berjalan di generasi pertama dikarenakan oleh panggilan sistem yang tidak diimplementasikan.
  • Layanan Anda memerlukan fungsionalitas Cgroup Linux.
  • Layanan Anda menggunakan infrastruktur pihak ketiga untuk mengamankan penampung.

Praktik terbaik saat menggunakan lingkungan eksekusi generasi kedua

Kami merekomendasikan container Anda untuk menginstal pengendali SIGTERM, terutama jika Anda menggunakan model penagihan CPU On-Demand.

Menangani SIGTERM memberikan container Anda kesempatan untuk melakukan tugas pembersihan yang diperlukan seperti upaya mengosongkan log sebelum keluar. Jika container Anda tidak menangkap SIGTERM, container masih akan diberi waktu 10 detik untuk melakukan tugas ini; 10 detik itu dapat ditagihkan.

Cara memeriksa apakah container Anda menangani SIGTERM

Untuk menentukan apakah pengendali SIGTERM telah terinstal pada container Anda:

  1. Mulai Cloud Shell Anda dapat menemukan Tombol Aktifkan Cloud Run AKtifkan Cloud Shell dalam header halaman dokumentasi yang sedang Anda buka. Anda mungkin perlu untuk memberikan otorisasi dan menunggu hingga tersedia. Sebagai alternatif, mulai sesi mandiri.

  2. Jalankan container secara lokal di Cloud Shell:

    docker run IMAGE_URL

    Ganti IMAGE_URL dengan referensi ke image container, misalnya, us-docker.pkg.dev/cloudrun/container/hello:latest. Jika Anda menggunakan Artifact Registry, maka repositori REPO_NAME harus sudah dibuat. URL memiliki bentuk LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG

  3. Buka tab lain dalam Cloud Shell dan dapatkan daftar container yang berjalan di sesi Cloud Shell saat ini:

    docker container ls

    Anda perlu menemukan ID container yang ditampilkan dari perintah.

  4. Dengan menggunakan ID container, kirimkan sinyal SIGTERM ke container Anda.

    docker kill -s SIGTERM CONTAINER_ID
  5. Kembali ke tab tempat Anda memanggil docker run untuk melihat apakah container telah keluar (dihentikan). Jika sinyal SIGTERM menyebabkan container Anda keluar, berarti container Anda sedang menangani SIGTERM.

Cara menangani SIGTERM

Jika container Anda tidak menangani SIGTERM, cara paling sederhana untuk menambahkan pengendali SIGTERM adalah dengan menggabungkan layanan Anda dengan tini. Dengan melakukan hal ini, layanan Anda akan berjalan sebagai subproses tini, yang berperan sebagai proses init container. Lihat petunjuk Docker untuk mengetahui petunjuknya.

Sebagai alternatif, Anda dapat mengubah aplikasi Anda untuk secara langsung menangani SIGTERM.

Langkah berikutnya