Halaman ini memberikan praktik terbaik untuk membuat arsitektur multi-tenant guna menghosting kode yang tidak tepercaya dengan Cloud Run. Sebagai pelanggan Google Cloud , "tenant" didefinisikan sebagai salah satu pelanggan Anda sendiri dan "kode yang tidak tepercaya" adalah kode yang disediakan oleh tenant ini untuk dijalankan di platform Anda.
Kasus penggunaan
Kasus penggunaan untuk arsitektur tersebut meliputi:
- Platform hosting aplikasi: Anda menyediakan platform tempat pelanggan men-deploy kode mereka. Misalnya, platform hosting web (pelanggan menyediakan server web) atau platform Functions-as-a-Service (pelanggan menyediakan fungsi).
- Platform hosting agen: Pelanggan Anda menggunakan SDK untuk membangun agen AI, platform Anda menjalankannya di latar belakang.
- Platform model yang telah disesuaikan: Anda menawarkan kemampuan untuk menyesuaikan model AI per pelanggan. Platform Anda kemudian menjalankannya sesuai permintaan dengan memanfaatkan GPU.
- Fungsi yang ditentukan pengguna: Software Anda memungkinkan pelanggannya menentukan logika kustom menggunakan kode. Misalnya, Anda menyediakan mesin analisis dan ingin mengizinkan pelanggan menulis fungsi kustom, atau Anda menyediakan gateway API dan ingin mengizinkan pelanggan memfilter atau mengubah permintaan berdasarkan logika kustom mereka sendiri.
- Ekstensibilitas Software-as-a-Service (SaaS): Anda mungkin menawarkan SaaS dan ingin mengizinkan pelanggan memperluas kemampuannya menggunakan ekstensi. Ekstensi ini mungkin ditulis oleh pelanggan atau partner.
Google Cloud pelanggan berhasil menggunakan Cloud Run dalam produksi untuk kasus penggunaan ini.
Tantangan platform multi-tenant
Tantangan umum dalam membuat arsitektur tersebut meliputi:
- Keamanan: Tidak mungkin memindai atau membersihkan kode yang disediakan. Kode yang tidak tepercaya dapat mencakup tindakan berbahaya atau dependensi yang rentan. Jika tidak diisolasi dengan benar, kode yang tidak tepercaya berpotensi mengakses data sensitif milik tenant lain. Mengemas kode dalam container saja bukanlah batas keamanan yang cukup kuat. Kode juga perlu dibatasi dalam hal yang dapat dilakukannya dengan menerapkan prinsip hak istimewa terendah.
- Efisiensi biaya: Arsitektur semacam ini dapat menjadi mahal jika setiap tenant dikenai biaya tetap untuk platform Anda.
- Pengelolaan tenant: Mengelola ratusan ribu tenant bisa menjadi tantangan, terutama dalam hal penghapusan data.
Manfaat Cloud Run
Arsitektur berbasis Cloud Run menawarkan solusi untuk tantangan umum dengan banyak manfaat, seperti keamanan, efisiensi biaya, dan pengelolaan tenant.
Keamanan
Cloud Run menyediakan fitur keamanan siap pakai yang relevan dengan arsitektur ini:
- Isolasi komputasi: Cloud Run memastikan isolasi yang ketat antara instance container, baik dari layanan yang sama, maupun layanan yang berbeda dari project yang berbeda. Untuk mengetahui informasi selengkapnya tentang keamanan container dan lingkungan eksekusi, lihat Ringkasan desain keamanan.
- Update keamanan: Update keamanan otomatis image dasar dapat diaktifkan untuk menjaga sistem operasi dan runtime workload yang di-deploy tetap terbaru dan di-patch tanpa memerlukan deployment ulang berskala besar.
- Isolasi jaringan: Cloud Run tidak hanya melakukan sandbox pada container, tetapi juga menyediakan stack jaringan multi-tenant.
- Identitas layanan: Workload Cloud Run dapat dikonfigurasi untuk memiliki identitas khusus dengan izin terbatas.
Efisiensi biaya
- Penskalaan hingga nol dan bayar sesuai penggunaan: Instance Cloud Run secara otomatis diskalakan hingga nol saat tidak digunakan, sehingga workload yang dihosting hanya dikenai biaya saat perlu dijalankan. Hal ini menghasilkan pemanfaatan resource yang sangat efisien dibandingkan dengan arsitektur yang memanfaatkan virtual machine "selalu aktif".
- Penagihan per permintaan: Selain penskalaan ke nol, Anda dapat memanfaatkan model penagihan yang lebih terperinci yang hanya mengenakan biaya saat permintaan diproses, sehingga memberikan efisiensi biaya yang lebih tinggi.
- On-demand dan memulai dengan cepat: Saat diperkecil skalanya, layanan Cloud Run dapat dengan cepat meningkatkan skala kembali, sehingga latensi yang dirasakan oleh pengguna akhir aplikasi yang di-deploy menjadi kecil.
- Pelabelan biaya otomatis: Semua biaya yang dilaporkan oleh Cloud Run diberi label, sehingga Anda dapat mengotomatiskan atribusi biaya dan pelacakan tenant.
- Komitmen untuk menurunkan biaya gabungan: Di tingkat akun penagihan, Anda dapat menggunakan diskon abonemen fleksibel untuk mengoptimalkan pengeluaran untuk setiap penggunaan dasar Cloud Run.
Pengelolaan tenant
Karena sifatnya yang on-demand, biaya Cloud Run tidak akan lebih tinggi saat menggunakan beberapa project Google Cloud , sehingga memungkinkan pengelolaan tenant seperti yang dijelaskan dalam Mengatur project Google Cloud Anda.
Arsitektur target untuk platform multi-tenant
Secara umum, berikut adalah arsitektur yang direkomendasikan:
Mengatur project Google Cloud Anda
Anda perlu menyiapkan organisasi Google Cloud , penagihan offline, dan menghubungi tim akun Anda untuk memberi tahu mereka bahwa Anda bertindak sebagai akun reseller. Google Cloud mungkin akan bekerja sama dengan Anda untuk memastikan saluran komunikasi yang tepat diterapkan untuk mitigasi penyalahgunaan.
Anda harus menggunakan folder untuk mengatur project Google Cloud . Khususnya, Anda harus menempatkan project yang menjalankan kode pihak pertama di folder yang berbeda dengan project yang menjalankan kode tidak tepercaya dari tenant Anda. Anda perlu mengotomatiskan orientasi tenant sehingga pembuatan project dan resource tenant tidak memerlukan interaksi manusia.
Google merekomendasikan penggunaan satu project Google Cloud per tenant. Anda juga dapat menghosting beberapa tenant dalam project yang sama, tetapi hal ini memiliki batasan tambahan:
Tenant tunggal per Google Cloud project (Direkomendasikan)
Dalam arsitektur ini, setiap tenant platform Anda dihosting di projectGoogle Cloud khusus, yang memiliki banyak manfaat:
- Keamanan yang lebih sederhana: Project Google Cloud adalah batas ketat untuk semua resource yang ada di dalamnya. Artinya, jika tenant memerlukan akses ke beberapa resourceGoogle Cloud seperti beberapa layanan Cloud Run, bucket Cloud Storage, Anda dapat menggunakan project sebagai perimeter yang aman.
- Kurang terbatas:
- Jumlah resource dalam project tertentu dibatasi. Misalnya, Cloud Run hanya mengizinkan pembuatan 1.000 layanan per region dalam sebuah project. Ada batasan serupa dalam jumlah akun layanan dan resource terkait lainnya.
- Jumlah project itu sendiri merupakan kuota dan dapat ditingkatkan, tidak ada batasan untuk jumlah ini bagi organisasi Google Cloud . Ada batas fleksibel 100.000 project per akun penagihan, yang dapat ditingkatkan dengan menghubungi Google. Organisasi Anda juga dapat membuat banyak akun penagihan dan mengelompokkannya dalam "grup akun" (saat ini dalam Pratinjau Pribadi).
- Pemantauan dan pengelolaan yang lebih sederhana:
- Menggunakan project per tenant akan memudahkan proses penghapusan data, di mana penghapusan data untuk tenant berarti menghapus project yang bersangkutan.
- Google Cloud Monitoring dan Logging berfungsi di seluruh project dan dapat memungkinkan Anda memantau seluruh fleet.
- Kuota level project memungkinkan Anda membatasi pemakaian resource Cloud Run untuk tenant tertentu, yang berpotensi menyelaraskan batas dengan paket harga Anda sendiri.
- Kebijakan organisasi kustom memungkinkan Anda menerapkan batasan tertentu pada semua project dalam folder, seperti region yang tersedia atau alokasi CPU/memori maksimum.
Membuat project Google Cloud serta melakukan inisialisasi API dan resource dapat menimbulkan latensi. Google merekomendasikan agar Anda menggunakan kumpulan project yang telah dibuat sebelumnya dan ditetapkan ke tenant saat diperlukan.
Beberapa tenant per Google Cloud project (Tidak direkomendasikan)
Anda dapat menghosting beberapa tenant di project Google Cloud yang sama, tetapi Google tidak merekomendasikan arsitektur ini.
Banyak layanan Google Cloud memiliki batas resource per project. Misalnya, Cloud Run memiliki batas yang tidak dapat disesuaikan,yaitu 1.000 layanan Cloud Run per region dalam sebuah project. Oleh karena itu, menghosting beberapa tenant per project akan tetap mengharuskan Anda mengelola fleet project Google Cloud , yang secara keseluruhan akan meningkatkan kompleksitas pengelolaan tenant. Dari perspektif keamanan, Google Cloud project dirancang sebagai batas keamanan, menghosting dua tenant yang berbeda dalam project yang sama mengharuskan Anda lebih berhati-hati dalam hal keamanan. Misalnya, dengan memastikan akun layanan khusus dan izin yang mendetail.
Men-deploy ke banyak region
Untuk keandalan dan skalabilitas, Google merekomendasikan untuk menyebarkan deployment tenant di beberapa regionGoogle Cloud . Setiap aplikasi tenant di-deploy ke satu region, tetapi Anda dapat menggunakan region yang berbeda untuk tenant yang berbeda. Pemilihan region dapat dilakukan secara acak, atau dapat mempertimbangkan lokasi tenant untuk mengoptimalkan latensi.
Perutean permintaan dan domain kustom
Jika ingin mengekspos layanan Cloud Run tenant kepada pengguna akhir, Anda harus menambahkan domain sendiri dan menggunakan logika pemilihan rute sendiri. Misalnya, untuk memetakan subdomain ke project Google Cloud yang menghosting layanan tenant.
Anda dapat menerapkan layanan perutean kustom, tetapi Google merekomendasikan penggunaan load balancer aplikasi eksternal global dengan Service Extensions untuk logika perutean. Service Extensions dapat diimplementasikan sebagai plugin (tempat logika dieksekusi sejalan dengan pemrosesan permintaan) atau callout (logika perutean didelegasikan ke layanan Cloud Run terpisah yang dapat memanggil salah satu database multi-regionalGoogle Cloudyang skalabel seperti Spanner).
Menggunakan load balancer aplikasi juga akan memungkinkan Anda menambahkan lapisan caching dengan memanfaatkan Cloud CDN dan perlindungan serangan Distributed Denial-of-Service (DDoS) tambahan ke platform Anda menggunakan Cloud Armor.
Reputasi dan penyalahgunaan
Setiap platform hosting yang diizinkan untuk menjalankan kode yang tidak tepercaya akan rentan terhadap penyalahgunaan.
Sebaiknya gunakan akun Penagihan Cloud yang berbeda untuk setiap tingkat reputasi yang Anda tawarkan. Misalnya, tenant paket gratis Anda tidak boleh dikaitkan ke akun penagihan yang sama dengan pelanggan yang membayar tinggi. Google dapat mempertimbangkan akun penagihan ini pada tingkat reputasi yang berbeda.
Seperti yang dijelaskan dalam Mengatur project Google Cloud Anda, selain memisahkan per akun penagihan, Anda harus menggunakan folder untuk mengatur project. Google dapat membantu Anda menetapkan kuota level folder untuk memastikan bahwa semua resource dalam folder tidak pernah menggunakan lebih dari batas maksimum yang ditetapkan, sehingga Anda dapat mengelola biaya platform dengan lebih baik.
Secara default, Google otomatis menghentikan workload yang melanggar sesuai dengan Google Cloud persyaratan layanan. Google juga dapat mencatat peristiwa deteksi penyalahgunaan di Cloud Logging, yang kemudian dapat Anda tindak lanjuti.