Membuat struktur layanan web di App Engine

ID Wilayah

REGION_ID adalah kode singkat yang ditetapkan Google berdasarkan region yang Anda pilih saat membuat aplikasi. Kode ini tidak sesuai dengan negara atau provinsi, meskipun beberapa ID region mungkin tampak mirip dengan kode negara dan provinsi yang umum digunakan. Untuk aplikasi yang dibuat setelah Februari 2020, REGION_ID.r disertakan dalam URL App Engine. Untuk aplikasi lama yang dibuat sebelum tanggal tersebut, ID region bersifat opsional dalam URL.

Pelajari ID region lebih lanjut.

Panduan ini membahas cara membuat struktur layanan dan resource terkait aplikasi App Engine.

Struktur direktori

Setiap versi layanan App Engine Anda ditentukan di file konfigurasi app.yaml. Untuk aplikasi sederhana, persyaratan minimum deployment adalah menentukan file app.yaml. File app.yaml bertindak sebagai deployment descriptor dan menentukan setelan jenis dan runtime penskalaan, pengendali, dan resource lainnya untuk versi layanan tertentu. Jika men-deploy beberapa versi layanan, Anda dapat membuat beberapa file YAML di direktori yang sama untuk mewakili konfigurasi setiap versi.

Untuk setiap layanan, Anda dapat membuat direktori terpisah di root aplikasi saat Anda melakukan pengembangan secara lokal. Jika menghosting aplikasi di luar sistem kontrol versi (VCS), misalnya GitHub, Anda juga dapat menyusun struktur aplikasi agar menggunakan direktori terpisah dalam repositori, atau menggunakan repositori terpisah untuk setiap layanan. Setiap direktori atau repositori harus mewakili satu layanan dan berisi file app.yaml layanan tersebut beserta kode sumber yang terkait.

Anda memiliki opsi untuk menentukan nama unik untuk setiap file app.yaml layanan Anda. Misalnya, Anda dapat memberi nama file konfigurasi dengan nama layanan, atau menggunakan nama unik untuk mewakili setiap versi layanan tertentu tersebut, seperti service1.yaml atau app.standard.yaml.

File konfigurasi opsional lainnya harus berada di direktori root atau repositori layanan default aplikasi Anda. File konfigurasi opsional ini menerapkan setelan untuk seluruh aplikasi yang tidak spesifik bagi layanan tertentu, termasuk file dispatch.yaml, index.yaml, dan cron.yaml.

Contoh

Aplikasi sederhana hanya memerlukan app.yaml untuk ditambahkan di lokasi yang sama dengan file sumber aplikasi. Untuk satu aplikasi layanan, aplikasi tersebut hanya akan menyertakan layanan default dan semua file dapat berada di direktori yang sama, pada root aplikasi tersebut:

Grafik hierarki layanan YAML tunggal

Contoh berikut menunjukkan cara menyusun struktur aplikasi dengan tiga layanan jika Anda mengembangkan aplikasi secara lokal. File dispatch.yaml opsional telah ditambahkan ke aplikasi tersebut di direktori root. Di root juga terdapat tiga direktori untuk setiap layanan aplikasi. Subdirektori untuk service1 menyertakan file sumber dan konfigurasi untuk layanan tersebut. Demikian pula, service2 dan service3 berada di direktori terpisah yang berisi file setiap layanan, meskipun service3 mencakup dua versi file konfigurasi YAML:

Grafik hierarki layanan YAML

Dalam contoh berikut, satu layanan memiliki file dispatch.yaml opsional dan dua file konfigurasi yang mewakili versi berbeda dari layanan tersebut, service1.yaml dan service2.yaml:

Grafik hierarki layanan YAML kecil

Pertimbangan desain untuk waktu beroperasi instance

Kegagalan hardware atau software yang menyebabkan penghentian awal atau seringnya pemulaian ulang instance dapat terjadi tanpa peringatan dan dapat memerlukan waktu yang cukup lama untuk menyelesaikannya. Aplikasi Anda harus dapat menangani kegagalan tersebut.

Berikut beberapa strategi bagus untuk menghindari periode nonaktif karena instance dimulai ulang:

  • Kurangi jumlah waktu yang diperlukan untuk memulai ulang atau memulai instance baru.
  • Untuk komputasi yang berjalan lama, buat checkpoint secara berkala agar Anda dapat melanjutkan dari kondisi tersebut.
  • Aplikasi Anda harus dalam kondisi "stateless" sehingga tidak ada yang disimpan pada instance.
  • Gunakan antrean untuk menjalankan eksekusi tugas asinkron.
  • Jika Anda mengonfigurasi instance ke penskalaan manual:
    • Gunakan load balancing di berbagai instance.
    • Konfigurasikan lebih banyak instance dari yang diperlukan untuk menangani traffic normal.
    • Tulis logika fall-back yang menggunakan hasil yang di-cache saat instance penskalaan manual tidak tersedia.

Pelajari instance lebih lanjut di Cara instance dikelola.

Layanan default

Setiap aplikasi App Engine menyertakan layanan default. Anda harus men-deploy versi awal aplikasi Anda ke layanan default sebelum dapat membuat dan men-deploy layanan tambahan ke aplikasi Anda.

Layanan default dapat ditentukan secara opsional dalam app.yaml dengan setelan service: default.

Jika menggunakan Java dan layanan paket lama, Anda dapat menentukan layanan default di appengine-web.xml dengan setelan <service>default</service>.

Permintaan yang dikirim ke aplikasi Anda menggunakan project Google Cloud akan dikirim ke layanan default, misalnya, https://PROJECT_ID.REGION_ID.r.appspot.com. Untuk mempelajari lebih lanjut cara menargetkan layanan lainnya, lihat Berkomunikasi Antar-Layanan.

File konfigurasi opsional

File konfigurasi berikut mengontrol fitur opsional yang berlaku untuk semua layanan dalam satu aplikasi. Lihat topik berikut untuk mengetahui detail tentang setiap fitur opsional:

  • cron.yaml mengonfigurasi secara teratur tugas terjadwal yang beroperasi pada waktu yang telah ditentukan atau secara berkala.
  • dispatch.yaml mengganti aturan default perutean dengan mengirimkan permintaan masuk ke layanan tertentu berdasarkan jalur atau nama host di URL.
  • index.yaml menentukan indeks yang diperlukan aplikasi Anda jika menggunakan kueri Datastore.

Nama file

App Engine menjalankan aplikasi dalam container pada distribusi Ubuntu Linux terbaru. Nama file yang Anda gunakan di lingkungan standar App Engine harus kompatibel dengan UTF-8, baik UTF-8 atau sesuatu yang dapat dikonversi otomatis secara aman ke UTF-8. Jika nama file menggunakan encoding yang berbeda, deploy aplikasi dari mesin dengan setelan bahasa nama file yang kompatibel dengan UTF-8.

Deployment gagal jika nama file tidak kompatibel dengan UTF-8. Perhatikan bahwa tidak ada batasan encoding karakter yang Anda gunakan dalam file.

Pertimbangan penyimpanan data dan file

Dari App Engine, Anda dapat dengan mudah mengakses layanan Google Cloud lainnya seperti Datastore, Cloud SQL, dan Cloud Storage.

Anda juga memiliki opsi untuk menggunakan database eksternal atau pihak ketiga jika database tersebut didukung oleh bahasa Anda dan dapat diakses dari instance App Engine.

Untuk mengetahui detail tentang cara menyimpan file di Google Cloud atau secara eksternal, baca artikel Memahami Penyimpanan Data dan File.

Anda juga dapat memilih cara menayangkan konten statis. Anda dapat menayangkan konten statis aplikasi langsung dari aplikasi tersebut di App Engine, menghosting konten statis di opsi Google Cloud seperti Cloud Storage, atau menggunakan jaringan penayangan konten (CDN) pihak ketiga. Untuk mengetahui informasi selengkapnya tentang cara menayangkan konten statis, lihat Menayangkan File Statis.

Langkah selanjutnya

Jika Anda menggunakan beberapa layanan dan ingin men-deploy-nya secara bersamaan, lihat langkah-langkah untuk men-deploy beberapa layanan.