Tutorial ini menunjukkan cara menyiapkan infrastruktur alat Autoscaler untuk Spanner menggunakan topologi deployment terdistribusi. Dalam opsi deployment yang disajikan dalam tutorial ini, semua komponen Autoscaler berada dalam satu project, kecuali Cloud Scheduler, topik Forwarder, dan fungsi yang sesuai.
Tutorial ini ditujukan untuk tim IT, Operasi, dan Site Reliability Engineering yang ingin mengurangi overhead operasional dan mengoptimalkan biaya penempatan Spanner mereka. Dokumen ini adalah bagian dari rangkaian:
- Spanner penskalaan otomatis
- Men-deploy alat Autoscaler per project atau terpusat untuk Spanner
- Men-deploy alat Autoscaler terdistribusi untuk Spanner (dokumen ini)
Topologi deployment terdistribusi menggabungkan fitur yang menguntungkan berikut dari deployment per project dan terpusat:
- Tim yang memiliki instance Spanner, yang disebut tim aplikasi, mengelola parameter konfigurasi Autoscaler untuk instance mereka dengan tugas Cloud Scheduler yang mereka miliki.
- Di luar parameter konfigurasi, tim pusat mengelola infrastruktur Autoscaler lainnya, sehingga meminimalkan overhead pengelolaan.
Arsitektur
Diagram berikut menunjukkan arsitektur Autoscaler dalam topologi deployment terdistribusi:
Untuk penjelasan komponen Autoscaler dan setiap langkah bernomor dalam alur peristiwa, lihat Penskalaan Otomatis Spanner.
Fungsi forwarder
Cloud Scheduler hanya dapat memublikasikan pesan ke topik dalam project yang sama, jadi untuk topologi terdistribusi, tutorial ini memperkenalkan komponen perantara yang disebut fungsi Forwarder.
Fungsi Forwarder mengambil pesan yang dipublikasikan ke Pub/Sub dari Cloud Scheduler, memeriksa sintaksis JSON-nya, dan meneruskannya ke topik Pub/Sub Poller. Topik dapat berasal dari project terpisah dari Cloud Scheduler.
Diagram berikut menunjukkan komponen yang digunakan untuk mekanisme penerusan:
Seperti yang ditunjukkan pada diagram sebelumnya, instance Spanner berada dalam project yang bernama Application 1 dan Application 2:
- Cloud Scheduler adalah project yang sama dengan instance Spanner.
(2a) Cloud Scheduler memublikasikan pesannya ke topik Forwarder dalam project Aplikasi 1 dan Aplikasi 2.
(2b) Fungsi Forwarder membaca pesan dari topik Forwarder.
(2c) Fungsi Forwarder meneruskan pesan ke topik Polling yang berada di project Autoscaler.
Fungsi Poller membaca pesan dari topik polling dan prosesnya akan dilanjutkan, seperti yang dijelaskan dalam Autoscaling Spanner.
Tujuan
- Men-deploy Autoscaler menggunakan model deployment terdistribusi.
- Mengimpor instance Spanner yang ada ke status Terraform.
- Konfigurasi Autoscaler.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Saat Anda mengikuti petunjuk dalam tutorial ini, biaya yang terkait dengan operasi komponen Autoscaler harus nol atau mendekati nol. Namun, estimasi ini tidak mencakup biaya untuk instance Spanner. Untuk contoh cara menghitung biaya instance Spanner, lihat Penskalaan otomatis Spanner.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
Dalam topologi deployment terdistribusi, selain project Autoscaler, Anda menyiapkan project kedua, yang dalam tutorial ini disebut sebagai Project aplikasi. Project Aplikasi menyimpan resource aplikasi, termasuk Spanner. Anda akan menyiapkan dan mengaktifkan penagihan dan API untuk dua project ini secara terpisah dalam tutorial ini.
-
In the Google Cloud console, activate Cloud Shell.
Di Cloud Shell, clone repositori berikut:
git clone https://github.com/cloudspannerecosystem/autoscaler
Ekspor variabel untuk direktori kerja:
export AUTOSCALER_DIR="$(pwd)/autoscaler/terraform/cloud-functions/distributed/autoscaler-project" export APP_DIR="$(pwd)/autoscaler/terraform/cloud-functions/distributed/app-project"
Menyiapkan project Autoscaler
Di bagian ini, Anda akan menyiapkan deployment project yang berisi semua infrastruktur Autoscaler terpusat kecuali Cloud Scheduler.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Make sure that billing is enabled for your Google Cloud project.
Enable the Identity and Access Management (IAM), Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Run functions, and Cloud Build APIs.
Di Cloud Shell, tetapkan variabel lingkungan dengan ID project Autoscaler Anda:
export AUTO_SCALER_PROJECT_ID=INSERT_YOUR_PROJECT_ID gcloud config set project "${AUTO_SCALER_PROJECT_ID}"
Tetapkan region dan zona serta lokasi App Engine (untuk Firestore) untuk infrastruktur Autoscaler:
export AUTO_SCALER_REGION=us-central1 export AUTO_SCALER_ZONE=us-central1-c export AUTO_SCALER_APP_ENGINE_LOCATION=us-central
Buat akun layanan:
gcloud iam service-accounts create terraformer --display-name "Terraform service account"
Terraform menggunakan akun ini untuk membuat semua resource di infrastruktur Anda.
Berikan peran pemilik project ke akun layanan:
gcloud projects add-iam-policy-binding "${AUTO_SCALER_PROJECT_ID}" \ --member "serviceAccount:terraformer@${AUTO_SCALER_PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
Buat file kunci akun layanan:
gcloud iam service-accounts keys create \ --iam-account "terraformer@${AUTO_SCALER_PROJECT_ID}.iam.gserviceaccount.com" "${AUTOSCALER_DIR}/key.json"
Jika project Anda belum memiliki instance Firestore, buat instance:
gcloud app create --region="${AUTO_SCALER_APP_ENGINE_LOCATION}" gcloud alpha firestore databases create --region="${AUTO_SCALER_APP_ENGINE_LOCATION}"
Men-deploy Autoscaler
Di bagian ini, Anda akan men-deploy komponen yang membentuk Autoscaler menggunakan file Terraform di direktori berikut:
Direktori | Konten direktori |
---|---|
terraform/ |
Konfigurasi tingkat teratas, yang mencakup setiap opsi deployment dan modul yang dapat digunakan kembali. |
|
Konfigurasi untuk project tempat Autoscaler berada. Mendelegasikan ke modul Autoscaler. |
terraform/modules/autoscaler-functions |
Konfigurasi fungsi Cloud Run Poller dan Scaler, serta topik Pub/Sub. |
Di Cloud Shell, tetapkan project ID, region, zona, dan lokasi App Engine di variabel lingkungan Terraform yang sesuai:
export TF_VAR_project_id="${AUTO_SCALER_PROJECT_ID}" export TF_VAR_region="${AUTO_SCALER_REGION}" export TF_VAR_zone="${AUTO_SCALER_ZONE}" export TF_VAR_location="${AUTO_SCALER_APP_ENGINE_LOCATION}"
Ubah direktori ke direktori project scaler Terraform dan inisialisasi:
cd "${AUTOSCALER_DIR}" terraform init
Buat infrastruktur Autoscaler:
terraform apply -parallelism=2
Setelah Anda memverifikasi resource, ketik
yes
saat diminta.Saat menjalankan perintah ini di Cloud Shell, Anda mungkin melihat pesan error berikut:
"Error: cannot assign requested address"
Error ini adalah masalah umum di penyedia Google Terraform. Dalam hal ini, coba lagi dengan perintah berikut:
terraform apply -parallelism=1
Menyiapkan project Aplikasi
Di bagian ini, dalam project yang berisi instance Spanner, Anda akan menyiapkan deployment topik dan fungsi Cloud Scheduler dan Forwarder.
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Make sure that billing is enabled for your Google Cloud project.
Enable the Identity and Access Management, Resource Manager, App Engine Admin, Firestore, Spanner, Pub/Sub, Cloud Run functions, and Cloud Build APIs.
Di Cloud Shell, tetapkan variabel lingkungan dengan ID project Aplikasi:
export APP_PROJECT_ID=INSERT_YOUR_APP_PROJECT_ID gcloud config set project "${APP_PROJECT_ID}"
Tetapkan region dan zona serta App Engine Location untuk project Aplikasi:
export APP_REGION=us-central1 export APP_ZONE=us-central1-c export APP_APP_ENGINE_LOCATION=us-central
Buat akun layanan yang akan digunakan Terraform untuk membuat resource di infrastruktur Anda:
gcloud iam service-accounts create terraformer --display-name "Terraform service account"
Berikan peran project owner(
roles/owner
) ke akun layanan:gcloud projects add-iam-policy-binding "${APP_PROJECT_ID}" \ --member "serviceAccount:terraformer@${APP_PROJECT_ID}.iam.gserviceaccount.com" \ --role roles/owner
Buat file kunci akun layanan:
gcloud iam service-accounts keys create \ --iam-account "terraformer@${APP_PROJECT_ID}.iam.gserviceaccount.com" "${APP_DIR}/key.json"
Buat aplikasi untuk mengaktifkan Cloud Scheduler:
gcloud app create --region="${APP_APP_ENGINE_LOCATION}"
Anda tidak perlu membuat database Firestore karena status disimpan di project Autoscaler.
Men-deploy infrastruktur project Aplikasi
Komponen Terraform yang membentuk project Aplikasi berada di direktori berikut:
terraform/
: Konfigurasi tingkat teratas, yang mencakup setiap opsi deployment dan modul yang dapat digunakan kembali.terraform/distributed/app-project/
: Konfigurasi untuk project Aplikasi tempat Spanner berada. Menggunakan modul berikut:terraform/modules/scheduler/
: Konfigurasi Cloud Scheduler untuk memicu polling.terraform/modules/spanner/
: Konfigurasi database Spannerterraform/modules/forwarder/
: Konfigurasi fungsi Cloud Run Forwarder.
Di bagian ini, Anda akan menggunakan file Terraform untuk men-deploy komponen yang membentuk project Aplikasi.
Di Cloud Shell, tetapkan project ID, region, zona, dan lokasi App Engine di variabel lingkungan Terraform yang sesuai:
export TF_VAR_project_id="${APP_PROJECT_ID}" export TF_VAR_region="${APP_REGION}" export TF_VAR_zone="${APP_ZONE}" export TF_VAR_location="${APP_APP_ENGINE_LOCATION}"
Tetapkan project ID tempat status Autoscaler disimpan:
export TF_VAR_state_project_id="${AUTO_SCALER_PROJECT_ID}"
Status Autoscaler mencakup stempel waktu saat peristiwa penskalaan dipicu untuk setiap instance.
Jika Anda ingin membuat instance Spanner baru untuk menguji Autoscaler, tetapkan variabel berikut:
export TF_VAR_terraform_spanner=true
Instance Spanner yang dibuat Terraform bernama
autoscale-test
.Jika Anda tidak ingin membuat instance Spanner baru karena sudah memiliki instance untuk dipantau Autoscaler, tetapkan nama instance Anda dalam variabel berikut:
export TF_VAR_spanner_name=INSERT_YOUR_SPANNER_INSTANCE_NAME
Untuk mengetahui informasi selengkapnya tentang cara menetapkan Terraform untuk mengelola instance Spanner, lihat Mengimpor instance Spanner
Ubah direktori ke direktori project aplikasi
Terraform
dan inisialisasi:cd "${APP_DIR}" terraform init
Buat infrastruktur di project Aplikasi:
terraform import module.scheduler.google_app_engine_application.app "${APP_PROJECT_ID}" terraform apply -parallelism=2
Pastikan daftar resource yang akan dibuat Terraform sudah benar, lalu ketik
yes
saat diminta.Saat menjalankan perintah ini di Cloud Shell, Anda mungkin melihat pesan error berikut:
"Error: cannot assign requested address"
Error ini adalah masalah umum di penyedia Google Terraform. Dalam hal ini, coba lagi dengan perintah berikut:
terraform apply -parallelism=1
Memberi otorisasi pada fungsi Cloud Run Forwarder untuk memublikasikan ke topik Poller
Di Cloud Shell, beralihlah kembali ke direktori project terraform Autoscaler dan pastikan variabel Terraform ditetapkan dengan benar:
cd "${AUTOSCALER_DIR}" export TF_VAR_project_id="${AUTO_SCALER_PROJECT_ID}" export TF_VAR_region="${AUTO_SCALER_REGION}" export TF_VAR_zone="${AUTO_SCALER_ZONE}" export TF_VAR_location="${AUTO_SCALER_APP_ENGINE_LOCATION}"
Tetapkan variabel Terraform untuk akun layanan Forwarder Anda. Perbarui dan tambahkan akun layanan Anda sesuai kebutuhan:
export TF_VAR_forwarder_sa_emails='["serviceAccount:forwarder-sa@'"${APP_PROJECT_ID}"'.iam.gserviceaccount.com"]' terraform apply -parallelism=2
Pastikan daftar resource yang akan dibuat Terraform sudah benar, lalu ketik
yes
saat diminta.Saat menjalankan perintah ini di Cloud Shell, Anda mungkin melihat pesan error berikut:
"Error: cannot assign requested address"
Error ini adalah masalah umum di penyedia Google Terraform. Dalam hal ini, coba lagi dengan perintah berikut:
terraform apply -parallelism=1.
Memverifikasi deployment
Jika infrastruktur untuk Autoscaler sudah siap, Anda dapat mengonfigurasi parameternya. Untuk mempelajari lebih lanjut, lihat Mengonfigurasi Autoscaler.
Karena Anda membuat deployment terdistribusi dalam tutorial ini, log memiliki properti berikut:
- Log dari fungsi Poller dan Scaler muncul di Logs Explorer untuk project Autoscaler.
- Log tentang error sintaksis dalam konfigurasi JSON payload Cloud Scheduler akan muncul di Logs Explorer untuk setiap Project aplikasi. Hal ini memungkinkan tim yang bertanggung jawab atas instance Spanner tertentu memecahkan masalah konfigurasinya secara independen.
Pembersihan
Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.
Menghapus project
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Langkah selanjutnya
- Baca tentang Arsitektur Autoscaler.
- Baca cara men-deploy Autoscaler dalam mode per project atau terpusat.
- Baca selengkapnya tentang nilai minimum yang direkomendasikan Spanner.
- Baca selengkapnya tentang metrik penggunaan CPU dan metrik latensi Spanner.
- Baca selengkapnya tentang praktik terbaik desain skema Spanner.
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.