Panduan ini menyediakan praktik terbaik untuk merancang, mengimplementasikan, menguji, dan men-deploy layanan Cloud Run. Untuk tips lainnya, lihat Memigrasikan Layanan yang Sudah Ada.
Menulis layanan yang efektif
Bagian ini menjelaskan praktik terbaik umum untuk merancang dan mengimplementasikan layanan Cloud Run.
Aktivitas latar belakang
Aktivitas latar belakang meliputi segala sesuatu yang terjadi setelah respons HTTP dikirimkan. Untuk mengetahui apakah ada aktivitas latar belakang dalam layanan Anda yang tidak terlihat dengan jelas, periksa log Anda untuk mencari hal-hal yang tercatat setelah entri untuk permintaan HTTP.
Mengonfigurasi penagihan berbasis instance untuk menggunakan aktivitas latar belakang
Jika Anda ingin mendukung aktivitas latar belakang di layanan Cloud Run, setel layanan Cloud Run ke penagihan berbasis instance. Hal ini memungkinkan Anda menjalankan aktivitas latar belakang di luar permintaan dan tetap memiliki akses CPU.
Menghindari aktivitas latar belakang jika menggunakan penagihan berbasis permintaan
Jika Anda ingin mengatur layanan ke penagihan berbasis permintaan, perlu diingat bahwa ketika layanan Cloud Run telah selesai menangani permintaan, akses ke CPU di instance akan dinonaktifkan atau sangat terbatas. Jika menggunakan jenis penagihan ini, Anda tidak boleh memulai thread atau rutinitas latar belakang yang berjalan di luar cakupan pengendali permintaan.
Tinjau kode Anda untuk memastikan semua operasi asinkron selesai sebelum Anda mengirimkan respons.
Menjalankan thread latar belakang dengan penagihan berbasis permintaan yang diaktifkan dapat mengakibatkan perilaku yang tidak terduga karena permintaan berikutnya ke instance container yang sama akan melanjutkan aktivitas latar belakang yang ditangguhkan.
Hapus file sementara
Di lingkungan Cloud Run, penyimpanan disk berfungsi sebagai sistem file dalam memori. File yang ditulis ke disk menggunakan memori yang seharusnya disediakan untuk layanan Anda, dan bisa tetap dipertahankan di antara pemanggilan. Jika file ini tidak dihapus, dapat terjadi error kehabisan memori yang disusul dengan waktu startup container yang lambat.
Melaporkan error
Tangani semua pengecualian dan jangan biarkan layanan Anda tidak bekerja saat terjadi error. Error akan menyebabkan startup container lambat saat traffic diantrekan untuk instance pengganti.
Lihat Panduan pelaporan error untuk mendapatkan informasi tentang cara melaporkan error dengan benar.
Mengoptimalkan performa
Bagian ini menjelaskan praktik terbaik untuk mengoptimalkan performa.
Memulai container dengan cepat
Karena instance diskalakan sesuai kebutuhan, waktu startup-nya berdampak pada latensi layanan Anda. Cloud Run memisahkan startup instance dan pemrosesan permintaan, sehingga dalam beberapa kasus, permintaan harus menunggu instance baru dimulai sebelum permintaan diproses. Hal ini biasanya terjadi saat layanan diskalakan dari nol.
Rutinitas startup terdiri dari:
- Mendownload image container (menggunakan teknologi streaming image container Cloud Run)
- Memulai container dengan menjalankan perintah entrypoint.
- Menunggu container mulai memproses port yang dikonfigurasi.
Mengoptimalkan kecepatan startup container akan meminimalkan latensi pemrosesan permintaan.
Menggunakan peningkatan CPU startup untuk mengurangi latensi startup
Anda dapat mengaktifkan peningkatan CPU startup untuk meningkatkan alokasi CPU untuk sementara waktu selama startup instance guna mengurangi latensi startup.
Menggunakan instance minimum untuk mengurangi waktu startup container
Anda dapat mengonfigurasi instance minimum dan konkurensi untuk meminimalkan waktu startup container. Misalnya, dengan menggunakan instance minimum 1 berarti layanan Anda siap menerima hingga jumlah permintaan serentak yang dikonfigurasi untuk layanan Anda tanpa perlu memulai instance baru. Saat menggunakan instance minimum, hindari penggunaan sistem keluar yang akan mematikan instance dan berpotensi meningkatkan cold start.
Perhatikan bahwa permintaan yang menunggu instance dimulai akan tetap tertunda dalam antrean sebagai berikut:
Permintaan akan tertunda hingga 3,5 kali waktu startup rata-rata instance container layanan ini, atau 10 detik, mana pun yang lebih besar.
Menggunakan dependensi dengan bijak
Jika Anda menggunakan bahasa dinamis dengan library dependen, seperti mengimpor modul di Node.js, waktu pemuatan untuk modul tersebut akan ditambahkan ke latensi startup.
Kurangi latensi startup dengan cara berikut:
- Minimalkan jumlah dan ukuran dependensi untuk mem-build layanan yang efisien.
- Memuat kode yang jarang digunakan secara lambat, jika bahasa Anda mendukung fitur ini.
- Gunakan pengoptimalan pemuatan kode seperti pengoptimalan autoloader composer pada PHP.
Menggunakan variabel global
Di Cloud Run, Anda tidak dapat berasumsi bahwa status layanan dipertahankan di antara permintaan. Namun, Cloud Run menggunakan kembali setiap instance untuk menyalurkan traffic yang sedang berlangsung. Oleh karena itu Anda dapat mendeklarasikan variabel dalam cakupan global agar nilainya dapat digunakan kembali dalam pemanggilan selanjutnya. Tidak dapat diprediksi sebelumnya apakah setiap permintaan menerima manfaat dari penggunaan ulang ini.
Anda juga dapat menyimpan cache objek di memori jika objek tersebut mahal untuk dibuat ulang pada setiap permintaan layanan. Memindahkan tindakan ini dari logika permintaan ke cakupan global akan menghasilkan performa yang lebih baik.
Node.js
Python
Go
Java
Melakukan inisialisasi lambat untuk variabel global
Inisialisasi variabel global selalu terjadi selama startup, yang dapat meningkatkan waktu startup container. Gunakan inisialisasi lambat untuk objek yang jarang digunakan guna menunda biaya dan mengurangi waktu startup container.
Salah satu kelemahan inisialisasi lambat adalah peningkatan latensi untuk permintaan pertama ke instance baru. Hal ini dapat menyebabkan penskalaan berlebihan dan permintaan yang dihentikan saat Anda men-deploy revisi baru layanan yang secara aktif menangani banyak permintaan.