Mengurangi latensi dengan pemanasan awal gambar

Dengan melakukan pra-pemanasan image, Anda dapat secara eksplisit memicu download image container ke dalam cache Streaming Image sebelum klien runtime memintanya. Tindakan ini secara efektif menghilangkan latensi "cold start" yang terkait dengan tarikan pertama versi image baru untuk workload yang menggunakan streaming image.

Ringkasan

Saat Anda mengirim image ke Artifact Registry, image tersebut akan disimpan dalam sistem penyimpanan yang mendasarinya. Untuk akses latensi rendah, Artifact Registry juga menggunakan cache Streaming Image , yang biasanya diisi pada tarikan pertama dari klien yang mengaktifkan streaming image. Untuk workload yang sensitif terhadap latensi, seperti melakukan penskalaan cluster Google Kubernetes Engine, menunggu cache ini diisi dapat menyebabkan penundaan. Pra-pemanasan membantu memasukkan image ke dalam cache Streaming image terlebih dahulu.

Prewarm Artifact API memungkinkan Anda meminta secara manual agar versi atau tag image tertentu di-cache sebelumnya. Anda juga menentukan periode retensi untuk memastikan image tetap berada dalam cache selama durasi yang ditentukan.

Batasan

  • Khusus API: pra-pemanasan hanya tersedia menggunakan Artifact Registry REST API. Pra-pemanasan tidak tersedia menggunakan gcloud CLI atau Google Cloud konsol.
  • Khusus GKE: Pra-pemanasan hanya efektif untuk cluster GKE dengan Streaming Image yang diaktifkan. Streaming image memerlukan software tertentu yang berjalan di node klien.
  • Artefak tunggal: Anda hanya dapat melakukan pra-pemanasan satu artefak (versi atau tag) per permintaan API.
  • Image multi-arsitektur: Tidak didukung. Gunakan versi tertentu untuk image arsitektur.

Sebelum memulai

  1. Aktifkan Artifact Registry API. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan Artifact Registry.
  2. Instal gcloud CLI untuk mendapatkan token autentikasi untuk permintaan REST API.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk mengelola image yang telah dipanaskan sebelumnya, minta administrator Anda untuk memberikan peran IAM berikut di repositori:

  • Memanaskan atau menghapus artefak dari cache (artifactregistry.repositories.prewarmArtifact, artifactregistry.repositories.removePrewarmedArtifact): Penulis Artifact Registry (roles/artifactregistry.writer)
  • Memeriksa atau mencantumkan artefak yang telah dipanaskan sebelumnya (artifactregistry.repositories.checkPrewarmedArtifact, artifactregistry.repositories.listPrewarmedArtifacts): Pembaca Artifact Registry (roles/artifactregistry.reader)

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Model izin ini memastikan bahwa hanya pengguna dengan akses tulis yang dapat mengelola status cache, sehingga mencegah pengguna yang tidak sah mengisi cache secara berlebihan. Sementara itu, pengguna dengan akses baca dapat memverifikasi artefak mana yang tersedia untuk streaming.

Memanaskan image

Untuk memanaskan image, Anda membuat permintaan POST ke metode :prewarmArtifact repositori Anda.

REST API

Referensi: projects.locations.repositories.prewarmArtifact

Isi permintaan memiliki struktur berikut:

{
  "version": "projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY/packages/PACKAGE/versions/VERSION",
  "retention_days": 3
}

Atau, gunakan tag:

{
  "tag": "projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY/packages/PACKAGE/tags/TAG",
  "retention_days": 3,
  "force": true
}
Kolom Deskripsi
tag Opsional. Tag artefak tertentu yang akan dipanaskan. Anda harus menentukan version atau tag.
version Opsional. Versi artefak tertentu yang akan dipanaskan. Anda harus menentukan version atau tag.
retention_days Opsional. Jumlah hari untuk menyimpan artefak dalam cache. Jika Anda tidak menentukan kolom ini, nilai default-nya adalah 3 hari.
force Opsional. Jika true, sistem mungkin akan mengeluarkan artefak lama untuk memberi ruang bagi artefak ini.

Contoh: Memanaskan versi tertentu

Contoh berikut memanaskan versi sha256:52e... dari paket nginx di repositori my-repo.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "version": "projects/my-project/locations/us-central1/repositories/my-repo/packages/nginx/versions/sha256:52e85304675567b5e656f5e997576a9d20c57176",
    "retention_days": 7
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:prewarmArtifact"

Contoh: Memanaskan tag

Contoh berikut memanaskan image yang diberi tag production dari paket my-app.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "tag": "projects/my-project/locations/us-central1/repositories/my-repo/packages/my-app/tags/production",
    "force": true
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:prewarmArtifact"

Memeriksa status pra-pemanasan

Untuk memeriksa apakah artefak telah dipanaskan sebelumnya, gunakan metode :checkPrewarmedArtifact.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "version": "projects/my-project/locations/us-central1/repositories/my-repo/packages/nginx/versions/sha256:52e85304675567b5e656f5e997576a9d20c57176"
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:checkPrewarmedArtifact"

Mencantumkan artefak yang telah dipanaskan sebelumnya

Untuk mencantumkan semua artefak yang telah dipanaskan sebelumnya dalam repositori, gunakan metode GET pada koleksi prewarmedArtifacts.

curl -X GET \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo/prewarmedArtifacts"

Menghapus dari cache

Untuk menghapus artefak secara eksplisit dari cache pra-pemanasan, gunakan metode :removePrewarmedArtifact. Gunakan metode ini untuk mengosongkan ruang atau saat versi image tertentu tidak lagi diperlukan dalam cache.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "version": "projects/my-project/locations/us-central1/repositories/my-repo/packages/nginx/versions/sha256:52e85304675567b5e656f5e997576a9d20c57176"
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:removePrewarmedArtifact"

Langkah berikutnya