Mengoptimalkan jaringan
Dengan fungsi Cloud Run yang mudah digunakan, Anda dapat mengembangkan kode dengan cepat dan menjalankannya di lingkungan serverless. Pada skala sedang, biaya untuk menjalankan fungsi masih rendah dan pengoptimalan kode tidak dianggap sebagai prioritas tinggi. Akan tetapi seiring peningkatan skala penerapan Anda, pengoptimalan kode akan semakin penting.
Dokumen ini menjelaskan cara mengoptimalkan jaringan fungsi Anda. Beberapa manfaat mengoptimalkan jaringan adalah sebagai berikut:
- Mengurangi waktu CPU yang diperlukan untuk membuat koneksi keluar baru di setiap panggilan fungsi.
- Mengurangi kemungkinan kehabisan kuota koneksi atau DNS.
Mempertahankan Koneksi Persisten
Bagian ini menunjukkan contoh cara mempertahankan koneksi persisten dalam suatu fungsi. Jika cara ini tidak diikuti, Anda bisa kehabisan kuota koneksi dengan cepat.
Skenario yang dibahas pada bagian ini:
- HTTP/S
- Google API
Permintaan HTTP/S
Cuplikan kode yang dioptimalkan di bawah ini menunjukkan cara mempertahankan koneksi yang persisten, bukan membuat koneksi baru pada setiap pemanggilan fungsi:
Node.js
Python
Go
PHP
Sebaiknya gunakan Framework HTTP Guzzle PHP untuk mengirim permintaan HTTP, karena framework tersebut menangani koneksi persisten secara otomatis.
Mengakses Google API
Contoh di bawah menggunakan Cloud Pub/Sub, tetapi pendekatan ini juga dapat diterapkan untuk library klien lainnya, seperti Cloud Natural Language atau Cloud Spanner. Perhatikan bahwa peningkatan performa dapat bergantung pada library klien tertentu yang diimplementasikan saat ini.
Pembuatan objek klien Pub/Sub akan menghasilkan satu koneksi dan dua kueri DNS di setiap panggilan. Untuk menghindari koneksi dan kueri DNS yang tidak diperlukan, buat objek klien Pub/Sub dalam cakupan global, seperti yang ditunjukkan pada contoh di bawah ini:
Node.js
Python
Go
Koneksi keluar
Waktu tunggu permintaan keluar
Terdapat waktu tunggu setelah 10 menit waktu tidak ada aktivitas untuk permintaan dari fungsi Anda ke jaringan VPC. Untuk permintaan dari fungsi ke internet, diberikan waktu tunggu setelah 20 menit tidak ada aktivitas.
Koneksi keluar direset
Streaming koneksi dari fungsi Anda ke jaringan VPC dan internet terkadang dapat dihentikan dan diganti ketika infrastruktur dasar dimulai ulang atau diperbarui. Jika aplikasi Anda menggunakan kembali koneksi yang memakan waktu lama, sebaiknya konfigurasikan aplikasi Anda agar menghubungkan koneksi kembali guna menghindari penggunaan ulang koneksi yang tidak aktif.
Pengujian Muatan pada Fungsi Anda
Untuk mengukur rata-rata jumlah koneksi yang dijalankan fungsi Anda, cukup terapkan fungsi tersebut sebagai fungsi HTTP dan gunakan framework pengujian performa untuk memanggilnya di QPS tertentu. Salah satu pilihan yang dapat digunakan adalah Artillery, yang dapat Anda panggil dengan satu baris:
$ artillery quick -d 300 -r 30 URL
Perintah ini mengambil URL yang diberikan pada 30 QPS selama 300 detik.
Setelah menjalankan pengujian, periksa penggunaan kuota koneksi Anda di halaman kuota API fungsi Cloud Run di Cloud Console. Jika pemakaian Anda sekitar 30 (atau kelipatannya) secara konsisten, berarti Anda membuat 1 (atau beberapa) koneksi di setiap pemanggilan. Setelah mengoptimalkan kode, seharusnya Anda akan melihat beberapa (10-30) koneksi saja yang terjadi di awal pengujian.
Anda juga bisa membandingkan biaya CPU sebelum dan setelah pengoptimalan plot kuota CPU di halaman yang sama.