Migrazione delle code in modalità pull a Pub/Sub (Python)

Questa pagina spiega come eseguire la migrazione del codice delle code in coda in modalità pull dalle code di attività a Pub/Sub. Pub/Sub è ora il modo preferito per eseguire attività in coda in modalità pull nelle code in App Engine.

Se la tua app utilizza sia code pull che code push, utilizza questa guida per eseguire la migrazione delle code pull a Pub/Sub prima di eseguire la migrazione delle code push al nuovo servizio di coda in modalità push Cloud Tasks. Sconsigliamo di eseguire la migrazione delle code pull dopo aver eseguito la migrazione delle code push a Cloud Tasks perché l'utilizzo obbligatorio del file queue.yaml potrebbe causare comportamenti imprevisti con Cloud Tasks.

Funzionalità non attualmente disponibili in Pub/Sub

Le seguenti funzionalità di code di lavoro non sono attualmente disponibili in Pub/Sub:

  • Raggruppamento per tag
  • Deduplica automatica

Prezzi e quote

La migrazione delle code pull a Pub/Sub potrebbe influire sui prezzi e sulle quote della tua app.

Prezzi

Pub/Sub ha i propri prezzi. Come per le code di attività, l'invio di richieste all'app App Engine con Pub/Sub può comportare costi per l'app.

Quote

Le quote di Pub/Sub sono diverse da quelle per le code di attività. Come per le code di attività, l'invio di richieste all'app App Engine da Pub/Sub potrebbe influire sulle quote di richiesta di App Engine.

Prima della migrazione

Se non l'hai ancora fatto, configura il tuo ambiente di sviluppo Python per utilizzare una versione di Python compatibile con Google Cloud e installa gli strumenti di test per creare ambienti Python isolati.

Le sezioni seguenti illustrano i passaggi di configurazione prima di eseguire la migrazione delle code pull a Pub/Sub.

Attivazione dell'API Pub/Sub

Per abilitare l'API Pub/Sub, fai clic su Abilita sull'API Pub/Sub nella libreria API. Se viene visualizzato un pulsante Gestisci anziché un pulsante Attiva, significa che hai già attivato l'API Pub/Sub per il tuo progetto e non devi ripetere l'operazione.

Autenticazione dell'app nell'API Pub/Sub

Devi autenticare la tua app nell'API Pub/Sub. Questa sezione discute l'autenticazione per due diversi casi d'uso.

Per sviluppare o testare l'app localmente, ti consigliamo di utilizzare un account di servizio. Per istruzioni su come configurare un account di servizio e collegarlo alla tua app, leggi Ottenere e fornire manualmente le credenziali dell'account di servizio.

Per eseguire il deployment dell'app su App Engine, non è necessario fornire nuova autenticazione. Le credenziali predefinite dell'applicazione deducono i dettagli di autenticazione per le app App Engine.

Download di Google Cloud CLI

Se non l'hai ancora fatto, scarica e installa Google Cloud CLI per utilizzare gcloud CLI con l'API Pub/Sub. Esegui il seguente comando dal terminale se hai già installato Google Cloud CLI.

gcloud components update

Importazione delle librerie client di Cloud

Per utilizzare la libreria client Python Pub/Sub con la tua app App Engine esistente:

  1. Aggiorna il file app.yaml. Segui le istruzioni per la tua versione di Python:

    Python 2

    Per le app Python 2, aggiungi le versioni più recenti della libreria grpcio.

    Di seguito è riportato un esempio di file app.yaml:

    runtime: python27
    threadsafe: yes
    api_version: 1
    
    libraries:
    - name: grpcio
      version: latest
    

    Python 3

    Per le app Python 3, specifica l'elemento runtime nel file app.yaml con una versione di Python 3 supportata. Ad esempio:

    runtime: python310 # or another support version
    

    Il runtime Python 3 installa le librerie automaticamente, quindi non è necessario specificare le librerie integrate del runtime Python 2 precedente. Se la tua app Python 3 utilizza altri servizi legacy in bundle durante la migrazione, puoi continuare a specificare le librerie integrate necessarie. In caso contrario, puoi eliminare le righe non necessarie nel file app.yaml.

  2. Aggiorna il file requirements.txt. Segui le istruzioni relative alla tua versione di Python:

    Python 2

    Aggiungi le librerie client Cloud per Pub/Sub all'elenco delle dipendenze nel file requirements.txt.

    google-cloud-pubsub
    

    Quindi, esegui pip install -t lib -r requirements.txt per aggiornare l'elenco delle librerie disponibili per la tua app.

    Python 3

    Aggiungi le librerie client Cloud per Pub/Sub all'elenco delle dipendenze nel file requirements.txt.

    google-cloud-pubsub
    

    App Engine installa automaticamente queste dipendenze durante il deployment dell'app nel runtime di Python 3, quindi elimina la cartella lib, se esistente.

  3. Per le app Python 2, se la tua app utilizza librerie incorporate o copiate, devi specificare i relativi percorsi nel file appengine_config.py, che si trova nella stessa cartella del file app.yaml:

    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set PATH to your libraries folder.
    PATH = 'lib'
    # Add libraries installed in the PATH folder.
    vendor.add(PATH)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(PATH)
    

    Il file appengine_config.py riportato sopra presuppone che la directory di lavoro corrente sia quella in cui si trova la cartella lib. In alcuni casi, ad esempio per i test di unità, la directory di lavoro corrente può essere diversa. Per evitare errori, puoi indicare esplicitamente il percorso completo della cartella lib utilizzando:

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  4. Importa la libreria client Python Pub/Sub in tutti i file che utilizzano le code pull dell'API Task Queues:

    from google.cloud import pubsub

Pub/Sub e code pull

Confronto delle funzioni

Pub/Sub invia il lavoro ai worker tramite una relazione publisher/abbonato. Un abbonamento pull in Pub/Sub è simile a una coda in modalità pull in Task Queues perché l'abbonato estrae il messaggio dall'argomento. La tabella seguente elenca la funzionalità di base per le code pull in Code di attività e la funzionalità associata per le sottoscrizioni pull in Pub/Sub.

Funzionalità Code di attività Funzionalità Pub/Sub
Coda Argomento
Attività Messaggio
Worker Sottoscrittore

Per saperne di più sull'architettura di Pub/Sub, consulta Cloud Pub/Sub: un servizio di messaggistica su scala Google.

Confronto dei flussi di lavoro

Di seguito è riportato un confronto tra un flusso di lavoro tipico per una coda in modalità pull in Task Queues e una sottoscrizione pull in Pub/Sub.

Flusso di lavoro delle code di attività Flusso di lavoro Pub/Sub
Devi creare la coda in modalità pull Crea l'argomento e iscrivi il tuo sottoscrittore (ovvero il tuo lavoratore) all'argomento
Creazione e messa in coda dell'attività Crea il messaggio e pubblicalo nell'argomento
Il worker acquisisce la proprietà della risorsa L'abbonato estrae il messaggio dall'argomento
Il worker elabora l'attività Il sottoscrittore elabora il messaggio
Il worker elimina l'attività dalla coda L'abbonato conferma il messaggio
Il contratto di locazione scade L'argomento elimina il messaggio quando tutti i relativi sottoscrittori lo hanno confermato.

Creazione di sottoscrizioni pull in Pub/Sub

Puoi utilizzare una sottoscrizione pull Pub/Sub come una coda in modalità pull di code di attività. Le sottoscrizioni a un argomento non scadono e possono esistere contemporaneamente per più worker. Ciò significa che un messaggio può essere elaborato da più di un worker, uno dei casi d'uso principali di Pub/Sub. Per ricreare le code pull di Task Queues come sottoscrizioni pull Pub/Sub, crea un argomento per ogni worker e sottoscrivi solo il worker associato all'argomento. In questo modo, ogni messaggio viene elaborato da esattamente un worker come nelle code di lavoro. Per scoprire come creare e gestire gli abbonamenti pull, consulta la sezione sulla gestione di argomenti e abbonamenti.

Eliminazione delle code pull

Dopo aver eseguito la migrazione delle code pull di Task Queues a Pub/Sub abbonati, eliminali da Task Queues utilizzando il file queue.yaml. Ti consigliamo di eliminare ogni coda in modalità pull prima di eseguire la migrazione della successiva. In questo modo, l'app non duplica il lavoro che riceve dalla nuova sottoscrizione pull Pub/Sub durante la migrazione delle altre code pull. Tieni presente che l'eliminazione delle code pull Task Queues una alla volta anziché in un unico deployment potrebbe avere un effetto maggiore sulla quota di deployment di App Engine.

Dopo aver eliminato tutte le code pull dalle code di attività, puoi ommettere il file queue.yaml dai futuri implementazioni della tua app.

Se la tua app utilizza solo code pull, rimuovi tutti i riferimenti all'API Task Queues nel codice. Se la tua app utilizza sia le code pull sia le code push, puoi rimuovere i riferimenti all'API Task Queues che si verificano nei file che utilizzano solo le code pull oppure attendere di aver eseguito la migrazione anche delle code push e poi rimuovere i riferimenti all'API Task Queues da tutti i file.

Passaggi successivi