Allocazione della CPU (servizi)

Per impostazione predefinita, alle istanze Cloud Run viene allocata la CPU solo durante l'elaborazione delle richieste, l'avvio e l'arresto del container. (consulta Ciclo di vita dell'istanza). Puoi modificare questo comportamento in modo che la CPU sia sempre allocata e disponibile anche quando non ci sono richieste in entrata. Impostare la CPU in modo che sia sempre allocata può essere utile per eseguire attività in background di breve durata e altre attività di elaborazione asincrone.

Illustrazione delle modalità di allocazione della CPU

Anche se la CPU è sempre allocata, la scalabilità automatica di Cloud Run è ancora attiva e può terminare le istanze se non sono necessarie per gestire il traffico in entrata o l'utilizzo attuale della CPU al di fuori delle richieste. Un'istanza non rimarrà mai inattiva per più di 15 minuti dopo l'elaborazione di una richiesta, a meno che non venga mantenuta attiva utilizzando il minimo di istanze.

La combinazione della CPU sempre allocata con un numero di istanze minime consente di rendere attive e in esecuzione una serie di istanze con accesso completo alle risorse della CPU, consentendo i casi d'uso dell'elaborazione in background. Quando utilizzi questo pattern, Cloud Run applica la scalabilità automatica delle istanze anche se un servizio utilizza la CPU al di fuori delle richieste.

Se utilizzi probe di controllo di integrità, la CPU viene allocata per ogni probe. Consulta i probe di controllo dell'integrità dei container per i dettagli di fatturazione.

Impatto sui prezzi

Se scegli di allocare la CPU solo durante l'elaborazione delle richieste, ti vengono addebitati i costi per singola richiesta e solo quando l'istanza elabora una richiesta. Se scegli l'impostazione CPU sempre allocata, ti viene addebitato l'intero ciclo di vita dell'istanza. Per i dettagli, consulta le tabelle dei prezzi di Cloud Run.

Il motore per suggerimenti di Google esamina automaticamente il traffico ricevuto dal tuo servizio Cloud Run nell'ultimo mese e consiglia di passare dalle CPU allocate durante le richieste a CPU sempre allocate, se più economico.

Come scegliere l'allocazione appropriata della CPU

La scelta dell'allocazione appropriata della CPU per il tuo caso d'uso dipende da diversi fattori, come i pattern di traffico, l'esecuzione in background e il costo, ognuno dei quali è descritto nelle sezioni seguenti.

Considerazioni sui modelli di traffico

  • La CPU allocata solo durante l'elaborazione delle richieste è consigliata quando il traffico in entrata è sporadico, intenso o picchi.
  • L'opzione CPU sempre allocata è consigliata quando il traffico in entrata è costante e varia lentamente.

Considerazioni sull'esecuzione in background

Se selezioni CPU sempre allocata, puoi eseguire attività in background di breve durata e altre operazioni di elaborazione asincrona dopo la restituzione delle risposte. Ad esempio:

  • Sfruttamento di agenti di monitoraggio come OpenTelemetry, che potrebbero presumere di poter essere eseguiti in background.
  • Utilizzo di Goroutines, Node.js asincroni, thread Java e coroutine Kotlin.
  • Usare framework dell'applicazione che si basano su funzionalità di pianificazione/in background integrate.

Le istanze inattive, incluse quelle mantenute in uso utilizzando un numero minimo di istanze, possono essere arrestate in qualsiasi momento. Se devi completare le attività in sospeso prima che il container venga terminato, puoi trapporre SIGTERM per concedere a un'istanza un tempo di tolleranza di 10 secondi prima dell'arresto.

Valuta la possibilità di utilizzare Cloud Tasks per eseguire attività asincrone. Cloud Tasks ripete automaticamente le attività non riuscite e supporta tempi di esecuzione fino a 30 minuti.

Considerazioni sui costi

Se al momento utilizzi CPU allocata solo durante l'elaborazione delle richieste, la CPU sempre allocata è probabilmente più economica se:

  • Il tuo servizio Cloud Run sta elaborando un numero elevato di richieste attuali a una frequenza piuttosto costante.
  • Non vedi molte istanze "inattive" quando esamini la metrica del conteggio delle istanze.

Puoi utilizzare il Calcolatore prezzi per stimare le differenze di costo.

Scalabilità sempre allocata della CPU da zero

La scalabilità da zero può essere attivata solo da una richiesta, per cui un servizio che non elabora le richieste non può scalare da zero. Per questi carichi di lavoro, puoi impostare il minimo di istanze su un valore superiore a 0 o includere una "richiesta di riattivazione " nella progettazione per riavviare l'elaborazione dopo la scalabilità a zero.

CPU sempre allocata, scalabilità a zero

Dato che nessuna istanza ha una CPU allo 0%, l'analisi dell'intero utilizzo della CPU non comporterebbe mai la scalabilità a zero. Ciò significa che la decisione di scalare da uno a zero può essere presa solo controllando se l'istanza sta elaborando una richiesta.

Imposta e aggiorna l'allocazione della CPU

Qualsiasi modifica alla configurazione comporta la creazione di una nuova revisione. Anche per le revisioni successive verrà applicata automaticamente questa impostazione di configurazione, a meno che non apporti aggiornamenti espliciti per modificarla.

Se scegli l'opzione CPU sempre allocata, devi specificare almeno 512 MiB di memoria.

Per impostazione predefinita, la CPU viene allocata solo durante l'elaborazione delle richieste per ogni istanza di container. Puoi modificare questo comportamento utilizzando la console Google Cloud, la riga di comando gcloud o un file YAML quando crei un nuovo servizio o esegui il deployment di una nuova revisione:

Console

  1. Nella console Google Cloud, vai a Cloud Run:

    Vai a Cloud Run

  2. Fai clic su Crea servizio se stai configurando un nuovo servizio in cui stai eseguendo il deployment. Se stai configurando un servizio esistente, fai clic sul servizio e poi su Modifica ed esegui il deployment di nuova revisione.

  3. Se stai configurando un nuovo servizio, compila la pagina iniziale delle impostazioni del servizio in base alle tue esigenze, quindi fai clic su Container, volumi, networking, sicurezza per espandere la pagina di configurazione del servizio.

  4. Fai clic sulla scheda Contenitore.

    immagine

    • Seleziona l'allocazione della CPU desiderata in Allocazione e prezzi della CPU. Seleziona La CPU viene allocata solo durante l'elaborazione delle richieste affinché le tue istanze ricevano CPU solo quando ricevono richieste. Seleziona La CPU è sempre allocata per allocare la CPU per l'intera durata delle istanze.
  5. Fai clic su Crea o Esegui il deployment.

Riga di comando

Puoi aggiornare l'allocazione della CPU. Per impostare le CPU da allocare sempre a un determinato servizio:

gcloud run services update SERVICE --no-cpu-throttling 

Sostituisci SERVICE con il nome del tuo servizio.

Per impostare l'allocazione della CPU solo durante l'elaborazione della richiesta:

gcloud run services update SERVICE --cpu-throttling 

Puoi anche impostare l'allocazione della CPU durante il deployment. Per impostare le CPU da allocare sempre:

gcloud run deploy --image IMAGE_URL --no-cpu-throttling

Per impostare l'allocazione della CPU solo durante l'elaborazione della richiesta:

gcloud run deploy --image IMAGE_URL --cpu-throttling

Sostituisci IMAGE_URL con un riferimento all'immagine container, ad esempio us-docker.pkg.dev/cloudrun/container/hello:latest. Se utilizzi Artifact Registry, è necessario già creare il repository REPO_NAME. L'URL ha la forma REGION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.

YAML

Puoi scaricare e visualizzare le configurazioni di servizio esistenti utilizzando il comando gcloud run services describe --format export, che restituisce risultati puliti in formato YAML. Puoi quindi modificare i campi descritti di seguito e caricare il file YAML modificato utilizzando il comando gcloud run services replace. Assicurati di modificare i campi solo come documentato.

  1. Per visualizzare e scaricare la configurazione:

    gcloud run services describe SERVICE --format export > service.yaml
  2. Aggiorna l'attributo cpu:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/cpu-throttling: 'BOOLEAN'
          name: REVISION

    Sostituisci

    • SERVICE con il nome del tuo servizio Cloud Run
    • BOOLEAN con true per impostare l'allocazione della CPU solo durante l'elaborazione della richiesta o false per impostare la CPU su sempre allocata.
    • REVISION con un nuovo nome di revisione oppure eliminala (se presente). Se specifichi un nuovo nome, la revisione deve soddisfare i seguenti criteri:
      • Inizia con SERVICE-
      • Contiene solo lettere minuscole, numeri e -
      • Non termina con -
      • Non supera i 63 caratteri
  3. Sostituisci il servizio con la nuova configurazione utilizzando il seguente comando:

    gcloud run services replace service.yaml

Terraform

Per scoprire come applicare o rimuovere una configurazione Terraform, consulta Comandi Terraform di base.

Aggiungi quanto segue a una risorsa google_cloud_run_v2_service nella tua configurazione Terraform, in template.containers.resources.

resource "google_cloud_run_v2_service" "default" {
  name     = "cloudrun-service-cpu-allocation"
  location = "us-central1"

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
      resources {
        # If true, garbage-collect CPU when once a request finishes
        cpu_idle = false
      }
    }
  }
}

Visualizza le impostazioni di allocazione della CPU

Per visualizzare le impostazioni attuali di allocazione della CPU per il tuo servizio Cloud Run:

Console

  1. Nella console Google Cloud, vai a Cloud Run:

    Vai a Cloud Run

  2. Fai clic sul servizio che ti interessa per aprire la pagina Dettagli servizio.

  3. Fai clic sulla scheda Revisioni.

  4. Nel riquadro dei dettagli a destra, l'impostazione di allocazione della CPU è elencata nella scheda Container.

Riga di comando

  1. Utilizza il seguente comando:

    gcloud run services describe SERVICE
  2. Individua l'impostazione di allocazione della CPU nella configurazione restituita.