Mengelola Resource Aplikasi

App Engine menghasilkan laporan penggunaan tentang performa dan pemanfaatan resource aplikasi Anda. Di bawah ini tercantum strategi potensial untuk mengelola resource Anda dengan lebih efisien. Untuk mengetahui informasi selengkapnya, lihat halaman harga.

Melihat laporan penggunaan

Saat mengevaluasi performa aplikasi, Anda harus memeriksa jumlah instance yang dijalankan aplikasi, dan cara aplikasi menggunakan resource.

Melihat laporan penggunaan dasbor

Melihat halaman Instance

Bagian berikut menyarankan beberapa strategi untuk mengelola resource.

Mengelola penskalaan instance dinamis

Menurunkan latensi

Latensi aplikasi memengaruhi jumlah instance yang diperlukan untuk menangani traffic Anda. Dengan mengurangi latensi, Anda dapat mengurangi jumlah instance yang digunakan untuk menyajikan aplikasi. Cloud Trace adalah alat yang berguna untuk melihat data tentang latensi dan dapat memahami potensi perubahan untuk menguranginya.

Setelah menggunakan Cloud Trace untuk melihat latensi, coba beberapa strategi berikut untuk mengurangi latensi:

  • Tingkatkan caching untuk data bersama yang sering diakses - Ini adalah cara lain untuk mengatakan - gunakan Memcache App Engine. Selain itu, menetapkan header kontrol cache aplikasi dapat memberikan dampak yang signifikan terhadap seberapa efisien data Anda disimpan dalam cache oleh server dan browser. Bahkan menyimpan data dalam cache selama beberapa detik dapat berdampak pada seberapa efisien aplikasi Anda melayani traffic.
  • Gunakan Memcache App Engine secara lebih efisien - Gunakan panggilan batch untuk mendapatkan, menetapkan, menghapus, dll., alih-alih serangkaian panggilan individual. Sebaiknya gunakan Memcache Async API.
  • Gunakan tugas untuk fungsi yang tidak terikat permintaan- Jika aplikasi Anda melakukan pekerjaan yang dapat dilakukan di luar cakupan permintaan yang ditampilkan kepada pengguna, masukkan dalam tugas! Mengirim pekerjaan ini ke Task Queue, daripada menunggunya selesai sebelum menampilkan respons dapat mengurangi latensi yang ditampilkan kepada pengguna secara signifikan. Task Queue dapat memberi Anda lebih banyak kontrol atas kecepatan eksekusi dan membantu memperlancar beban Anda.
  • Gunakan Firestore dalam mode Datastore (Datastore) secara lebih efisien - Lihat di bawah untuk detail selengkapnya.
  • Jalankan beberapa panggilan URL Fetch secara paralel:
    • Batch beberapa panggilan URL Fetch, daripada menanganinya satu per satu di dalam setiap permintaan yang ditampilkan kepada pengguna, dan tangani dalam tugas offline secara paralel melalui URL Fetch asinkron.
    • Gunakan URL Fetch API asinkron.
  • Untuk sesi HTTP, tulis secara asinkron - Java memungkinkan Anda mengonfigurasi aplikasi untuk menulis data sesi HTTP secara asinkron ke Datastore dengan menambahkan <async-session-persistence enabled="true"/> ke appengine-web.xml Anda. Data sesi selalu ditulis secara sinkron ke Memcache App Engine, dan jika permintaan mencoba membaca data sesi saat Memcache App Engine tidak tersedia, permintaan akan gagal dikirim ke Datastore, yang mungkin belum diupdate dengan pembaruan terkini. Ini berarti ada sedikit risiko aplikasi akan memiliki data sesi yang sudah tidak berlaku, tetapi untuk sebagian besar aplikasi, manfaat latensi jauh lebih besar daripada risikonya.

Mengubah setelan performa penskalaan otomatis

File konfigurasi appengine-web.xml berisi beberapa setelan yang dapat Anda gunakan untuk menyesuaikan keseimbangan antara beban performa dan resource untuk versi tertentu aplikasi Anda. Untuk daftar pengaturan penskalaan otomatis, lihat menskalakan elemen. Tonton video Setelan Scheduler Baru App Engine untuk melihat efek setelan ini.

Mengaktifkan permintaan serentak di Java

Dengan mengaktifkan setelan ini, jumlah instance yang diperlukan untuk menyajikan traffic untuk aplikasi Anda akan berkurang, tetapi aplikasi Anda harus threadsafe agar berfungsi dengan benar. Baca cara menggunakan permintaan serentak dengan mengaktifkan threadsafe di file appengine-web.xml Anda.

Mengonfigurasi setelan Task Queue

Setelan default untuk Task Queue disesuaikan untuk performa. Dengan default ini, ketika Anda memasukkan beberapa tugas ke dalam antrean secara bersamaan, tugas tersebut kemungkinan akan menyebabkan Frontend Instance baru dimulai. Berikut beberapa saran cara menyesuaikan Task Queue untuk menghemat Jam Kerja Instance:

  • Menetapkan header X-AppEngine-FailFast pada tugas yang tidak sensitif terhadap latensi. Header ini menginstruksikan scheduler untuk segera menggagalkan permintaan jika instance yang ada tidak tersedia. Task Queue akan mencoba ulang dan melakukan back-off hingga instance yang ada tersedia untuk melayani permintaan. Namun, penting untuk diperhatikan bahwa saat permintaan dengan set X-AppEngine-FailFast memenuhi instance yang ada, permintaan tanpa set header tersebut masih dapat menyebabkan instance baru dimulai.
  • Konfigurasikan setelan Task Queue Anda.
    • Jika Anda menetapkan parameter "rate" ke nilai yang lebih rendah, Task Queue akan menjalankan tugas dengan kecepatan lebih lambat.
    • Jika Anda menetapkan parameter "max_concurrent_requests" ke nilai yang lebih rendah, lebih sedikit tugas yang akan dijalankan secara bersamaan.

Menyajikan konten statis jika memungkinkan

Penyajian konten statis di Java ditangani oleh infrastruktur App Engine khusus, yang tidak memerlukan Jam Kerja Instance. Jika Anda perlu menetapkan header kustom, gunakan Blobstore API. Penyajian respons Blob yang sebenarnya tidak mengurangi Jam Kerja Instance.

Mengelola penyimpanan aplikasi

App Engine menghitung biaya penyimpanan berdasarkan ukuran entity dalam Datastore, ukuran indeks Datastore, ukuran tugas dalam task queue, dan jumlah data yang disimpan di Blobstore. Berikut beberapa hal yang dapat Anda lakukan untuk memastikan Anda tidak menyimpan lebih banyak data dari yang diperlukan:

  • Hapus setiap entity atau blob yang tidak lagi diperlukan aplikasi Anda.
  • Hapus indeks yang tidak diperlukan, seperti yang dibahas di bagian Mengelola Penggunaan Datastore di bawah, untuk mengurangi biaya penyimpanan indeks.

Mengelola penggunaan Datastore

App Engine memperhitungkan jumlah operasi yang dilakukan di Datastore. Berikut adalah beberapa strategi yang dapat mengakibatkan penurunan konsumsi resource Datastore, serta latensi yang lebih rendah untuk permintaan ke Datastore:

  • Dataviewer konsol Google Cloud menampilkan jumlah operasi tulis yang diperlukan untuk membuat setiap entity di Datastore lokal Anda. Anda dapat menggunakan informasi ini untuk memahami biaya penulisan setiap entity. Lihat Memahami Biaya Penulisan untuk mengetahui informasi tentang cara menafsirkan data ini.
  • Hapus indeks yang tidak diperlukan, yang akan mengurangi biaya penyimpanan dan penulisan entity. Gunakan fungsi "Get Indexes" untuk melihat indeks apa yang ditentukan pada aplikasi Anda. Anda dapat melihat indeks yang saat ini disajikan untuk aplikasi Anda di halaman penelusuran konsol Google Cloud.
  • Saat mendesain model data, Anda mungkin dapat menulis kueri dengan cara sedemikian rupa, sekaligus untuk menghindari indeks kustom. Baca dokumentasi Kueri dan Indeks untuk mengetahui informasi selengkapnya tentang cara App Engine menghasilkan indeks.
  • Jika memungkinkan, ganti properti yang diindeks (yang merupakan default) dengan properti yang tidak diindeks (Java), yang mengurangi jumlah operasi tulis Datastore saat Anda menempatkan entity. Perhatian, jika nantinya Anda memutuskan bahwa Anda harus dapat membuat kueri pada properti yang tidak diindeks, Anda tidak hanya perlu mengubah kode untuk kembali menggunakan properti yang diindeks, tetapi Anda juga harus menjalankan pengurangan peta atas semua entity untuk menempatkan ulang semua entity tersebut.
  • Berkat peningkatan perencana kueri Datastore dalam rilis App Engine 1.5.2 dan 1.5.3, kueri Anda mungkin sekarang memerlukan lebih sedikit indeks daripada sebelumnya. Meskipun Anda masih dapat memilih untuk mempertahankan indeks kustom tertentu karena alasan performa, Anda mungkin dapat menghapus indeks lainnya, sehingga mengurangi biaya penyimpanan dan penulisan entity.
  • Konfigurasi ulang model data sehingga Anda dapat mengganti kueri dengan pengambilan menurut kunci yang lebih murah dan lebih efisien.
  • Gunakan kueri khusus kunci, bukan kueri entity, jika memungkinkan.
  • Untuk mengurangi latensi, ganti beberapa get() entity dengan batch get().
  • Gunakan kursor Datastore untuk penomoran halaman, daripada offset.
  • Paralelkan beberapa RPC Datastore melalui datastore API asinkron.

Catatan: Operasi Datastore kecil mencakup panggilan untuk mengalokasikan ID Datastore atau kueri khusus kunci. Lihat halaman harga untuk mengetahui informasi selengkapnya tentang biaya.

Mengelola bandwidth

Untuk mengurangi bandwidth keluar, Anda dapat menetapkan header Cache-Control yang sesuai pada respons dan menetapkan waktu habis masa berlaku yang wajar untuk file statis. Menggunakan header Cache-Control publik seperti ini akan memungkinkan server proxy dan browser klien menyimpan respons dalam cache selama jangka waktu yang ditetapkan.

Bandwidth masuk lebih sulit dikontrol, karena jumlah data yang dikirim pengguna ke aplikasi Anda. Namun, Anda dapat menggunakan aturan firewall App Engine, untuk mengizinkan atau membatasi rentang alamat IP dan subnet.

Mengelola resource lainnya

Salah satu strategi terbaik untuk mengaudit penggunaan Email API adalah dengan menggunakan Cloud Trace untuk memastikan Anda tidak melakukan lebih banyak panggilan dari yang diperlukan. Sebaiknya pastikan Anda memeriksa tingkat error dan mewaspadai semua panggilan tidak valid yang mungkin Anda buat. Dalam beberapa kasus, Anda mungkin dapat mendeteksi panggilan tersebut lebih awal.