1. Pengantar
Untuk mulai menulis fungsi Cloud Run, Anda dapat menggunakan codelab berikut:
Jika tidak, codelab ini akan memandu Anda membuat Cloud Functions (generasi ke-2).
Ringkasan
Cloud Functions (generasi ke-2) adalah Google Cloud Functions versi berikutnya, yang merupakan penawaran Functions as a Service dari Google Cloud. Versi baru ini dilengkapi dengan set fitur lanjutan dan kini didukung oleh Cloud Run dan Eventarc, yang memberi Anda kontrol lebih canggih atas performa dan skalabilitas, serta kontrol yang lebih besar terkait runtime fungsi dan pemicu dari lebih dari 90 sumber peristiwa.
Codelab ini akan memandu Anda membuat Cloud Functions yang merespons panggilan HTTP, dan dipicu oleh pesan Pub/Sub dan Cloud Audit Logs.
Yang Baru?
Versi baru Cloud Functions ini memberikan pengalaman FaaS yang ditingkatkan, yang didukung oleh Cloud Run, Cloud Build, Artifact Registry, dan Eventarc.
Infrastruktur yang Disempurnakan
- Pemrosesan permintaan yang lebih lama: Menjalankan Cloud Functions lebih lama dari default 5 menit, sehingga mempermudah untuk menjalankan beban kerja permintaan yang lebih lama seperti memproses aliran data yang besar dari Cloud Storage atau BigQuery. Untuk fungsi HTTP, waktu tunggunya adalah hingga 60 menit. Untuk fungsi yang dipicu peristiwa, saat ini waktunya maksimal 10 menit.
- Instance yang lebih besar: Manfaatkan RAM hingga 16 GB dan 4 vCPU di Cloud Functions yang memungkinkan beban kerja dalam memori, komputasi yang intensif, dan lebih paralel yang lebih besar.
- Konkurensi: Memproses hingga 1.000 permintaan serentak dengan satu instance fungsi, sehingga meminimalkan cold start dan meningkatkan latensi saat melakukan penskalaan.
- Instance minimum: Menyediakan instance yang telah di-warmup untuk mengurangi cold start dan memastikan waktu bootstrap aplikasi Anda tidak memengaruhi performa aplikasi.
- Pemisahan traffic: Mendukung beberapa versi fungsi Anda, membagi traffic di antara versi yang berbeda-beda, dan melakukan roll back fungsi Anda ke versi sebelumnya.
Cakupan Peristiwa dan dukungan CloudEvents yang lebih luas
- Integrasi Eventarc: Cloud Functions kini menyertakan dukungan native untuk Eventarc, yang menghadirkan lebih dari 90 sumber peristiwa menggunakan log Cloud Audit (BigQuery, Cloud SQL, Cloud Storage...), dan tentu saja Cloud Functions masih mendukung peristiwa dari sumber kustom dengan memublikasikan ke Cloud Pub/Sub secara langsung.
- Format CloudEvent: Semua fungsi berbasis peristiwa mematuhi CloudEvents standar industri ( cloudevents.io), terlepas dari sumbernya, untuk memastikan pengalaman developer yang konsisten. Payload dikirim melalui CloudEvent terstruktur dengan payload cloudevent.data dan menerapkan standar CloudEvent.
Yang akan Anda pelajari
- Ringkasan Cloud Functions (generasi ke-2).
- Cara menulis fungsi yang merespons panggilan HTTP.
- Cara menulis fungsi yang merespons pesan Pub/Sub.
- Cara menulis fungsi yang merespons peristiwa Cloud Storage.
- Cara menulis fungsi yang merespons Cloud Audit Logs.
- Cara membagi traffic dalam dua revisi.
- Cara menghilangkan cold start dengan instance minimum.
- Cara menetapkan konkurensi.
2. Penyiapan dan Persyaratan
Penyiapan lingkungan mandiri
- Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.
- Project name adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API. Anda dapat memperbaruinya kapan saja.
- Project ID harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis membuat string unik; biasanya Anda tidak mementingkan kata-katanya. Di sebagian besar codelab, Anda harus merujuk Project ID-nya (umumnya diidentifikasi sebagai
PROJECT_ID
). Jika tidak suka dengan ID yang dibuat, Anda dapat membuat ID acak lainnya. Atau, Anda dapat mencobanya sendiri dan melihat apakah ID tersebut tersedia. ID tidak dapat diubah setelah langkah ini dan akan tetap ada selama durasi project. - Sebagai informasi, ada nilai ketiga, Project Number, yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
- Selanjutnya, Anda harus mengaktifkan penagihan di Konsol Cloud untuk menggunakan resource/API Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk mematikan resource agar tidak menimbulkan penagihan di luar tutorial ini, Anda dapat menghapus resource yang dibuat atau menghapus seluruh project. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.
Mulai Cloud Shell
Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.
Dari Google Cloud Console, klik ikon Cloud Shell di toolbar kanan atas:
Hanya perlu waktu beberapa saat untuk penyediaan dan terhubung ke lingkungan. Jika sudah selesai, Anda akan melihat tampilan seperti ini:
Mesin virtual ini berisi semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Semua pekerjaan Anda dalam codelab ini dapat dilakukan di browser. Anda tidak perlu menginstal apa pun.
Menyiapkan gcloud
Di Cloud Shell, pastikan project ID Anda ditetapkan dan disimpan ke variabel PROJECT_ID
dan REGION
ditetapkan ke us-west1
:
gcloud config set project [YOUR-PROJECT-ID] PROJECT_ID=$(gcloud config get-value project) REGION=us-west1
Mengaktifkan API
Aktifkan semua layanan yang diperlukan:
gcloud services enable \ artifactregistry.googleapis.com \ cloudfunctions.googleapis.com \ cloudbuild.googleapis.com \ eventarc.googleapis.com \ run.googleapis.com \ logging.googleapis.com \ pubsub.googleapis.com
3. Fungsi HTTP
Untuk fungsi pertama, mari kita buat fungsi Node.js yang diautentikasi dan merespons permintaan HTTP. Mari kita gunakan juga waktu tunggu 10 menit untuk menunjukkan bagaimana fungsi dapat memiliki lebih banyak waktu untuk merespons permintaan HTTP.
Berkreasi
Buat folder untuk aplikasi dan buka folder tersebut:
mkdir ~/hello-http && cd $_
Buat file index.js
yang hanya merespons permintaan HTTP:
const functions = require('@google-cloud/functions-framework'); functions.http('helloWorld', (req, res) => { res.status(200).send('HTTP with Node.js in GCF 2nd gen!'); });
Buat file package.json
untuk menentukan dependensi:
{ "name": "nodejs-functions-gen2-codelab", "version": "0.0.1", "main": "index.js", "dependencies": { "@google-cloud/functions-framework": "^2.0.0" } }
Deploy
Deploy fungsi tersebut:
gcloud functions deploy nodejs-http-function \ --gen2 \ --runtime nodejs16 \ --entry-point helloWorld \ --source . \ --region $REGION \ --trigger-http \ --timeout 600s
Meskipun tidak mutlak diperlukan untuk langkah ini, perhatikan waktu tunggu 600 detik. Hal ini memungkinkan fungsi memiliki waktu tunggu yang lebih lama untuk merespons permintaan HTTP.
Setelah fungsi di-deploy, Anda dapat melihatnya di bagian Cloud Functions di Cloud Console:
Menguji
Uji fungsi dengan perintah berikut:
gcloud functions call nodejs-http-function \ --gen2 --region $REGION
Anda akan melihat pesan HTTP with Node.js in GCF 2nd gen!
sebagai respons.
4. Fungsi Pub/Sub
Untuk fungsi kedua, mari kita buat fungsi Python yang dipicu oleh pesan Pub/Sub yang dipublikasikan ke topik tertentu.
Menyiapkan token autentikasi Pub/Sub
Jika Anda mengaktifkan akun layanan Pub/Sub pada atau sebelum 8 April 2021, berikan peran iam.serviceAccountTokenCreator
ke akun layanan Pub/Sub:
PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role roles/iam.serviceAccountTokenCreator
Berkreasi
Buat topik Pub/Sub yang akan digunakan untuk contoh:
TOPIC=cloud-functions-gen2-topic gcloud pubsub topics create $TOPIC
Buat folder untuk aplikasi dan buka folder tersebut:
mkdir ~/hello-pubsub && cd $_
Buat file main.py
yang hanya mencatat pesan yang berisi ID CloudEvent:
import functions_framework @functions_framework.cloud_event def hello_pubsub(cloud_event): print('Pub/Sub with Python in GCF 2nd gen! Id: ' + cloud_event['id'])
Buat file requirements.txt
dengan konten berikut untuk menentukan dependensi:
functions-framework==3.*
Deploy
Deploy fungsi tersebut:
gcloud functions deploy python-pubsub-function \ --gen2 \ --runtime python39 \ --entry-point hello_pubsub \ --source . \ --region $REGION \ --trigger-topic $TOPIC
Setelah fungsi di-deploy, Anda dapat melihatnya di bagian Cloud Functions di Cloud Console:
Menguji
Uji fungsi dengan mengirim pesan ke topik:
gcloud pubsub topics publish $TOPIC --message="Hello World"
Anda akan melihat CloudEvent yang diterima di log:
gcloud functions logs read python-pubsub-function \ --region $REGION --gen2 --format "value(log)"
5. Fungsi Cloud Storage
Untuk fungsi berikutnya, mari kita buat fungsi Node.js yang merespons peristiwa dari bucket Cloud Storage.
Siapkan
Untuk menggunakan fungsi Cloud Storage, berikan peran IAM pubsub.publisher
ke akun layanan Cloud Storage:
SERVICE_ACCOUNT=$(gsutil kms serviceaccount -p $PROJECT_NUMBER) gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$SERVICE_ACCOUNT \ --role roles/pubsub.publisher
Berkreasi
Buat folder untuk aplikasi dan buka folder tersebut:
mkdir ~/hello-storage && cd $_
Buat file index.js
yang hanya merespons peristiwa Cloud Storage:
const functions = require('@google-cloud/functions-framework'); functions.cloudEvent('helloStorage', (cloudevent) => { console.log('Cloud Storage event with Node.js in GCF 2nd gen!'); console.log(cloudevent); });
Buat file package.json
untuk menentukan dependensi:
{ "name": "nodejs-functions-gen2-codelab", "version": "0.0.1", "main": "index.js", "dependencies": { "@google-cloud/functions-framework": "^2.0.0" } }
Deploy
Pertama, buat bucket Cloud Storage (atau gunakan bucket yang sudah ada):
export BUCKET="gs://gcf-gen2-storage-$PROJECT_ID" gsutil mb -l $REGION $BUCKET
Deploy fungsi tersebut:
gcloud functions deploy nodejs-storage-function \ --gen2 \ --runtime nodejs16 \ --entry-point helloStorage \ --source . \ --region $REGION \ --trigger-bucket $BUCKET \ --trigger-location $REGION
Setelah fungsi di-deploy, Anda dapat melihatnya di bagian Cloud Functions pada Konsol Cloud.
Menguji
Uji fungsi dengan mengupload file ke bucket:
echo "Hello World" > random.txt gsutil cp random.txt $BUCKET/random.txt
Anda akan melihat CloudEvent yang diterima di log:
gcloud functions logs read nodejs-storage-function \ --region $REGION --gen2 --limit=100 --format "value(log)"
6. Fungsi Cloud Audit Logs
Untuk fungsi berikutnya, mari kita buat fungsi Node.js yang menerima peristiwa Log Audit Cloud saat instance VM Compute Engine dibuat. Sebagai respons, tindakan ini akan menambahkan label ke VM yang baru dibuat, yang menentukan pembuat VM.
Menentukan VM Compute Engine yang baru dibuat
Compute Engine mengeluarkan 2 Log Audit saat VM dibuat.
Yang pertama dikeluarkan di awal pembuatan VM dan terlihat seperti ini:
Yang kedua dikeluarkan setelah pembuatan VM dan terlihat seperti ini:
Perhatikan kolom operasi dengan nilai first: true
dan last: true
. Log Audit kedua berisi semua informasi yang diperlukan untuk memberi label pada instance. Oleh karena itu, kita akan menggunakan flag last: true
untuk mendeteksinya di Cloud Functions.
Siapkan
Untuk menggunakan fungsi Cloud Audit Logs, Anda harus mengaktifkan Log Audit untuk Eventarc. Anda juga perlu menggunakan akun layanan dengan peran eventarc.eventReceiver
.
- Berikan peran IAM
eventarc.eventReceiver
ke akun layanan Compute Engine default:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/eventarc.eventReceiver
Mendapatkan kode
Clone repo yang berisi aplikasi:
git clone https://github.com/GoogleCloudPlatform/eventarc-samples.git
Buka direktori aplikasi:
cd eventarc-samples/gce-vm-labeler/gcf/nodejs
File index.js
berisi kode aplikasi yang menerima Log Audit yang digabungkan ke dalam CloudEvent. Kemudian, alat ini mengekstrak detail instance VM Compute Engine dan menetapkan label pada instance VM. Silakan pelajari index.js
secara lebih mendetail sendiri.
Deploy
Anda dapat men-deploy fungsi dengan gcloud
seperti sebelumnya. Perhatikan cara fungsi memfilter di Log Audit untuk penyisipan Compute Engine dengan flag --trigger-event-filters
:
gcloud functions deploy gce-vm-labeler \ --gen2 \ --runtime nodejs16 \ --entry-point labelVmCreation \ --source . \ --region $REGION \ --trigger-event-filters="type=google.cloud.audit.log.v1.written,serviceName=compute.googleapis.com,methodName=beta.compute.instances.insert" \ --trigger-location us-central1
Anda juga dapat men-deploy fungsi dan menambahkan pemicu Eventarc dari Konsol Google Cloud.
Pertama, buka bagian Cloud Functions dan buat fungsi dengan lingkungan generasi ke-2:
Klik tombol Add Eventarc Trigger
:
Tindakan ini akan membuka panel samping di sebelah kanan tempat Anda dapat memilih berbagai penyedia peristiwa dan peristiwa untuk pemicu Eventarc.
Pilih penyedia peristiwa dan peristiwa yang tepat, lalu klik Save Trigger
:
Terakhir, di halaman berikutnya, Anda dapat memperbarui file index.js
dan package.json
dengan file index.js
dan package.json
di GitHub, lalu mengklik tombol Deploy
:
Menguji
Untuk menguji fungsi Log Audit, Anda perlu membuat VM Compute Engine di Konsol Cloud (Anda juga dapat membuat VM dengan gcloud
, tetapi sepertinya tidak menghasilkan Log Audit).
Buka bagian Compute Engine > VM instances di Cloud Console dan buat VM baru. Setelah pembuatan VM selesai, Anda akan melihat label creator
yang ditambahkan pada VM di Cloud Console di bagian Basic information atau menggunakan perintah berikut:
gcloud compute instances describe YOUR_VM_NAME
Anda akan melihat label dalam output seperti contoh berikut:
... labelFingerprint: ULU6pAy2C7s= labels: creator: atameldev ...
7. Pemisahan traffic
Cloud Functions (generasi ke-2) mendukung beberapa revisi fungsi Anda, memisahkan traffic di antara revisi yang berbeda, dan melakukan roll back fungsi Anda ke versi sebelumnya. Hal ini dimungkinkan karena fungsi generasi ke-2 adalah layanan Cloud Run di balik layar.
Pada langkah ini, Anda akan men-deploy 2 revisi fungsi, lalu membagi traffic di antara keduanya 50-50.
Berkreasi
Buat folder untuk aplikasi dan buka folder tersebut:
mkdir ~/traffic-splitting && cd $_
Buat file main.py
dengan fungsi Python yang membaca variabel lingkungan warna dan merespons kembali dengan Hello World
dalam warna latar belakang tersebut:
import os color = os.environ.get('COLOR') def hello_world(request): return f'<body style="background-color:{color}"><h1>Hello World!</h1></body>'
Deploy
Deploy revisi pertama fungsi dengan latar belakang oranye:
COLOR=orange gcloud functions deploy hello-world-colored \ --gen2 \ --runtime python39 \ --entry-point hello_world \ --source . \ --region $REGION \ --trigger-http \ --allow-unauthenticated \ --update-env-vars COLOR=$COLOR
Pada tahap ini, jika menguji fungsi dengan melihat pemicu HTTP (output URI dari perintah deployment di atas) di browser, Anda akan melihat Hello World
dengan latar belakang oranye:
Deploy revisi kedua dengan latar belakang kuning:
COLOR=yellow gcloud functions deploy hello-world-colored \ --gen2 \ --runtime python39 \ --entry-point hello_world \ --source . \ --region $REGION \ --trigger-http \ --allow-unauthenticated \ --update-env-vars COLOR=$COLOR
Karena ini adalah revisi terbaru, jika Anda menguji fungsi, Anda akan melihat Hello World
dengan latar belakang kuning:
Membagi traffic 50-50
Untuk memisahkan traffic antara revisi oranye dan kuning, Anda perlu menemukan ID revisi layanan Cloud Run yang mendasarinya. Berikut adalah perintah untuk melihat ID revisi:
gcloud run revisions list --service hello-world-colored \ --region $REGION --format 'value(REVISION)'
Outputnya akan mirip dengan berikut ini:
hello-world-colored-00001-man hello-world-colored-00002-wok
Sekarang, bagi traffic di antara dua revisi ini sebagai berikut (update X-XXX
sesuai dengan nama revisi Anda):
gcloud run services update-traffic hello-world-colored \ --region $REGION \ --to-revisions hello-world-colored-0000X-XXX=50,hello-world-colored-0000X-XXX=50
Menguji
Uji fungsi dengan mengunjungi URL publiknya. Sebagian besar waktu, Anda akan melihat revisi oranye dan, sebagian lainnya, revisi kuning:
Lihat rollback, peluncuran bertahap, dan migrasi traffic untuk mengetahui informasi selengkapnya.
8. Instance minimum
Di Cloud Functions (generasi ke-2), Anda dapat menentukan jumlah minimum instance fungsi yang harus tetap aktif dan siap melayani permintaan. Hal ini berguna untuk membatasi jumlah cold start.
Pada langkah ini, Anda akan men-deploy fungsi dengan inisialisasi lambat. Anda akan mengamati masalah cold start. Kemudian, Anda akan men-deploy fungsi dengan nilai instance minimum yang ditetapkan ke 1 untuk menghilangkan cold start.
Berkreasi
Buat folder untuk aplikasi dan buka folder tersebut:
mkdir ~/min-instances && cd $_
Buat file main.go
. Layanan Go ini memiliki fungsi init
yang tidur selama 10 detik untuk menyimulasikan inisialisasi yang lama. Fungsi ini juga memiliki fungsi HelloWorld
yang merespons panggilan HTTP:
package p import ( "fmt" "net/http" "time" ) func init() { time.Sleep(10 * time.Second) } func HelloWorld(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Slow HTTP Go in GCF 2nd gen!") }
Deploy
Deploy revisi pertama fungsi dengan nilai instance minimum default nol:
gcloud functions deploy slow-function \ --gen2 \ --runtime go116 \ --entry-point HelloWorld \ --source . \ --region $REGION \ --trigger-http \ --allow-unauthenticated
Uji fungsi dengan perintah ini:
gcloud functions call slow-function \ --gen2 --region $REGION
Anda akan mengamati penundaan 10 detik (cold start) pada panggilan pertama, lalu melihat pesan. Panggilan berikutnya akan segera ditampilkan.
Menetapkan instance minimum
Untuk menghilangkan cold start pada permintaan pertama, deploy ulang fungsi dengan tanda --min-instances
ditetapkan ke 1 sebagai berikut:
gcloud functions deploy slow-function \ --gen2 \ --runtime go116 \ --entry-point HelloWorld \ --source . \ --region $REGION \ --trigger-http \ --allow-unauthenticated \ --min-instances 1
Menguji
Uji kembali fungsi:
gcloud functions call slow-function \ --gen2 --region $REGION
Anda tidak akan melihat jeda 10 detik lagi di permintaan pertama. Masalah cold start untuk pemanggilan pertama (setelah lama tidak ada) telah hilang, berkat instance minimum.
Lihat menggunakan instance minimum untuk mengetahui informasi selengkapnya.
9. Serentak
Di Cloud Functions (generasi ke-2), instance fungsi menangani 1 permintaan serentak secara default, tetapi Anda dapat menentukan jumlah permintaan serentak yang dapat diproses secara bersamaan oleh instance. Hal ini juga dapat berguna untuk mencegah cold start karena instance fungsi baru tidak perlu dibuat untuk setiap permintaan paralel.
Pada langkah ini, Anda akan menggunakan fungsi dengan inisialisasi lambat dari langkah sebelumnya. Anda akan mengirim 10 permintaan dan mengamati masalah cold start lagi karena instance fungsi baru perlu dibuat untuk menangani permintaan.
Untuk memperbaiki masalah cold start, Anda akan men-deploy fungsi lain dengan nilai serentak 100. Anda akan mengamati bahwa 10 permintaan sekarang tidak menyebabkan masalah cold start dan satu instance fungsi dapat menangani semua permintaan.
Menguji tanpa konkurensi
Dapatkan URL fungsi:
SLOW_URL=$(gcloud functions describe slow-function --region $REGION --gen2 --format="value(serviceConfig.uri)")
Gunakan alat tolok ukur open source yang disebut hey
untuk mengirim 10 permintaan serentak ke fungsi lambat. hey
sudah terinstal di Cloud Shell:
hey -n 10 -c 10 $SLOW_URL
Anda akan melihat dalam output hey
bahwa beberapa permintaan memerlukan waktu lama:
Summary: Total: 10.9053 secs Slowest: 10.9048 secs Fastest: 0.4439 secs Average: 9.7930 secs Requests/sec: 0.9170 Total data: 310 bytes Size/request: 31 bytes Response time histogram: 0.444 [1] |■■■■ 1.490 [0] | 2.536 [0] | 3.582 [0] | 4.628 [0] | 5.674 [0] | 6.720 [0] | 7.767 [0] | 8.813 [0] | 9.859 [0] | 10.905 [9] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Hal ini karena lebih banyak instance fungsi yang dibuat untuk menangani permintaan. Jika Anda memeriksa jumlah instance aktif untuk fungsi, Anda juga akan melihat bahwa lebih dari satu instance dibuat dalam kondisi tertentu dan hal ini menyebabkan masalah cold start:
Deploy
Deploy fungsi baru yang identik dengan fungsi sebelumnya. Setelah di-deploy, Anda akan meningkatkan konkurensi:
gcloud functions deploy slow-concurrent-function \ --gen2 \ --runtime go116 \ --entry-point HelloWorld \ --source . \ --region $REGION \ --trigger-http \ --allow-unauthenticated \ --min-instances 1
Menetapkan konkurensi
Tetapkan konkurensi layanan Cloud Run yang mendasarinya untuk fungsi menjadi 100 (maksimum 1.000). Hal ini memastikan bahwa setidaknya 100 permintaan dapat ditangani oleh satu instance fungsi:
gcloud run services update slow-concurrent-function \ --concurrency 100 \ --cpu 1 \ --region $REGION
Menguji dengan konkurensi
Dapatkan URL fungsi:
SLOW_CONCURRENT_URL=$(gcloud functions describe slow-concurrent-function --region $REGION --gen2 --format="value(serviceConfig.uri)")
Kemudian, gunakan hey
untuk mengirim 10 permintaan serentak:
hey -n 10 -c 10 $SLOW_CONCURRENT_URL
Anda akan melihat dalam output hey
bahwa semua permintaan diproses dengan cepat:
Summary: Total: 0.2164 secs Slowest: 0.2163 secs Fastest: 0.0921 secs Average: 0.2033 secs Requests/sec: 46.2028 Total data: 310 bytes Size/request: 31 bytes Response time histogram: 0.092 [1] |■■■■ 0.105 [0] | 0.117 [0] | 0.129 [0] | 0.142 [0] | 0.154 [0] | 0.167 [0] | 0.179 [0] | 0.191 [0] | 0.204 [0] | 0.216 [9] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Satu instance fungsi dapat menangani semua permintaan dan masalah cold start hilang, berkat peningkatan konkurensi.
Lihat serentak untuk informasi selengkapnya.
10. Selamat!
Selamat, Anda telah menyelesaikan codelab.
Yang telah kita bahas
- Ringkasan Cloud Functions (generasi ke-2).
- Cara menulis fungsi yang merespons panggilan HTTP.
- Cara menulis fungsi yang merespons pesan Pub/Sub.
- Cara menulis fungsi yang merespons peristiwa Cloud Storage.
- Cara menulis fungsi yang merespons Cloud Audit Logs.
- Cara membagi traffic dalam dua revisi.
- Cara menghilangkan cold start dengan instance minimum.
- Cara menetapkan konkurensi.