Panoramica dei feature flag di App Lifecycle Manager

I flag funzionalità di App Lifecycle Manager ti consentono di controllare la disponibilità e il comportamento di funzionalità all'interno delle applicazioni, senza richiedere nuovi deployment di codice o modifiche all'infrastruttura.

Puoi utilizzare i flag in due modi principali:

  1. Integrato: accoppia la gestione dei flag con i deployment delle applicazioni gestiti da App Lifecycle Manager.
  2. Autonomo: utilizza il sistema di flagging robusto in modo indipendente, anche se l'infrastruttura dell'applicazione è gestita altrove, modellando i componenti del sistema come unità App Lifecycle Manager.

I flag funzionalità si integrano con i concetti di base di App Lifecycle Manager, come unità e implementazioni. In questo modo, puoi gestire le configurazioni dei flag insieme all'infrastruttura dell'applicazione (approccio integrato).

Se non hai familiarità con le unità o le implementazioni di App Lifecycle Manager, consulta la panoramica principale di App Lifecycle Manager.

Perché utilizzare i flag funzionalità di App Lifecycle Manager?

Quando implementi i flag funzionalità con App Lifecycle Manager, ottieni diversi vantaggi per il ciclo di vita di sviluppo e operazioni SaaS:

  • Disaccoppia le release delle funzionalità dai deployment del codice: distribuisci il nuovo codice in produzione con le funzionalità disattivate per impostazione predefinita. Attiva le funzionalità per utenti specifici o implementale gradualmente quando sono pronte, riducendo il rischio associato ai deployment di grandi dimensioni.
  • Aumenta la sicurezza, la velocità e l'affidabilità:
    • Testa le funzionalità in produzione con un pubblico limitato (release canary).
    • Esegui implementazioni graduali utilizzando le funzionalità di implementazione di App Lifecycle Manager, riducendo al minimo l'impatto di potenziali problemi.
  • Attiva l'elenco consentiti e la personalizzazione del tenant: attiva o disattiva le funzionalità per le unità che possono rappresentare tenant, servizi o ambienti.
  • Semplifica i rollback: quando disattivi un flag funzionalità, spesso è molto più veloce e meno invasivo rispetto al deployment di una versione precedente dell'applicazione. Questo workflow ti consente di disattivare le funzionalità problematiche senza eseguire il rollback dei file binari.
  • Gestione unificata delle configurazioni dei flag: gestisci le definizioni dei flag funzionalità e utilizzale per configurare le implementazioni. Questo workflow garantisce l'affidabilità operativa consentendoti di modificare la funzionalità dell'applicazione creando implementazioni di flag funzionalità.

Come funzionano i flag funzionalità di App Lifecycle Manager

L'utilizzo dei flag funzionalità in App Lifecycle Manager comporta due aspetti principali: il piano di gestione (definizione e implementazione dei flag) e il piano dati (accesso ai valori dei flag all'interno dell'applicazione).

Utilizzo integrato con App Lifecycle Manager

Se utilizzi App Lifecycle Manager per gestire i deployment delle applicazioni (ad esempio, il deployment dell'infrastruttura utilizzando i progetti Terraform):

  1. Definisci i flag: crea risorse flag funzionalità all'interno di App Lifecycle Manager, specificando una Flag key univoca (ad esempio, enable-new-dashboard) e associandola a un tipo di unità. Sono supportati i flag booleani.
  2. Provisioning delle modifiche ai flag: le modifiche ai flag (creazione o aggiornamenti) non sono attive finché non avvii un'implementazione di App Lifecycle Manager. In questo modo, puoi utilizzare funzionalità come batch, supervisione e controlli di sicurezza per i deployment dei flag. L'implementazione aggiorna la configurazione dei flag associata alle unità di destinazione.
  3. Accedi ai flag nell'applicazione: il codice dell'applicazione, in esecuzione all'interno dell'unità di cui è stato eseguito il provisioning (ad esempio, in un container su Cloud Run o Google Kubernetes Engine), utilizza un SDK OpenFeature configurato con il provider flagd. Questo provider si connette all'endpoint del servizio saasconfig.googleapis.com. Utilizzando App Lifecycle Manager, inserisci l'identificatore dell'unità necessario nell'ambiente dell'applicazione, consentendo all'SDK di recuperare i valori dei flag corretti per quell'unità specifica.

Questa integrazione approfondita ti consente di gestire i cicli di vita delle funzionalità insieme ai cicli di vita dell'infrastruttura. Per un esempio pratico, consulta la guida rapida Eseguire il deployment dei flag funzionalità.

Piano di gestione

Interagisci con il piano di gestione per definire e controllare i flag. Puoi utilizzare Google Cloud la console, gcloud CLI o l'API App Lifecycle Manager per:

  • Creare o aggiornare i flag: per definire i flag, specifica la Flag key, associala a un tipo di unità e imposta il tipo e il valore predefinito.
  • Creare implementazioni: avvia un'implementazione per distribuire le modifiche ai flag (creazioni o aggiornamenti) alle unità di destinazione appartenenti al tipo di unità del flag. Le implementazioni garantiscono che le modifiche vengano applicate in modo sicuro e affidabile in base ai criteri configurati.

Piano dati

Il codice dell'applicazione interagisce con il piano dati per utilizzare i valori dei flag:

  • SDK OpenFeature: integra l'SDK OpenFeature indipendente dal fornitore nella tua applicazione.
  • Provider flagd: configura l'SDK OpenFeature in modo che utilizzi il provider flagd.
  • Configurazione: indirizza il provider flagd all'endpoint del servizio flag funzionalità di App Lifecycle Manager: saasconfig.googleapis.com:443.
  • Targeting: fornisci il provider_id per identificare la configurazione dei flag. Questo valore in genere corrisponde al nome completo della risorsa dell'unità App Lifecycle Manager (ad esempio, projects/PROJECT_ID/locations/LOCATION/featureFlagsConfigs/UNIT_ID).
  • Autenticazione: il provider utilizza le Credenziali predefinite dell'applicazione (ADC) per autenticare in modo sicuro le richieste all'endpoint del servizio Google Cloud . Il account di servizio utilizzato deve avere il ruolo Identity and Access Management roles/saasconfig.viewer.
  • Valutazione dei flag: utilizza i metodi OpenFeature standard (client.get_boolean_value(...)) nel codice per controllare i valori dei flag. Il provider gestisce il recupero della configurazione implementata più recente dal servizio.

App Lifecycle Manager fornisce implementazioni ed esempi di riferimento per l'integrazione con il piano dati:

Tipi di valori dei flag funzionalità

I flag funzionalità di App Lifecycle Manager supportano più delle valutazioni booleane standard on/off. Puoi definire i flag con valori STRING, INTEGER o DOUBLE per controllare variabili operative complesse come soglie di runtime, parametri del tema o limiti di configurazione.

A differenza dei flag booleani, devi definire esplicitamente i flag non booleani durante la creazione per determinare l'universo dei possibili tipi restituiti.

Flag stringa

I flag stringa passano gli identificatori di configurazione direttamente ai client connessi.

gcloud beta app-lifecycle-manager flags create "feature-mode" \
  --key="feature-mode" \
  --flag-value-type=STRING \
  --location="global" \
  --unit-kind="UNIT_KIND_ID" \
  --variants='[{"id": "standard", "stringValue": "STANDARD"}, {"id": "advanced", "stringValue": "ADVANCED"}]' \
  --evaluation-spec='{"defaultTarget": "standard"}'

Flag interi

I flag interi regolano i limiti numerici esatti e i limiti del payload.

gcloud beta app-lifecycle-manager flags create "max-retry-count" \
  --key="max-retry-count" \
  --flag-value-type=INTEGER \
  --location="global" \
  --unit-kind="UNIT_KIND_ID" \
  --variants='[{"id": "low", "integerValue": 3}, {"id": "high", "integerValue": 10}]' \
  --evaluation-spec='{"defaultTarget": "low"}'

Flag doppi

I flag doppi forniscono valori di alta precisione utilizzati per le soglie di probabilità o i parametri float.

gcloud beta app-lifecycle-manager flags create "sampling-rate" \
  --key="sampling-rate" \
  --flag-value-type=DOUBLE \
  --location="global" \
  --unit-kind="demo-test-unitkind" \
  --variants='[{"id": "minimal", "doubleValue": 0.01}, {"id": "full", "doubleValue": 1.0}]' \
  --evaluation-spec='{"defaultTarget": "minimal"}'

Eseguire il provisioning dei flag funzionalità utilizzando le implementazioni

App Lifecycle Manager garantisce modifiche o aggiornamenti sicuri su larga scala utilizzando le implementazioni per eseguire il provisioning degli aggiornamenti dei flag funzionalità.

Senza le implementazioni graduali, una piccola modifica alla configurazione dei flag (ad esempio, l'attivazione di una funzionalità per l'1% degli utenti) si propaga istantaneamente a tutte le istanze dell'applicazione. Se questa funzionalità introduce una regressione, possono verificarsi problemi contemporaneamente in tutta l'infrastruttura. Questa propagazione globale aumenta notevolmente il rischio di un impatto diffuso sul servizio.

Le implementazioni di App Lifecycle Manager mitigano questo rischio consentendo una distribuzione graduale e controllata delle modifiche ai flag, limitando l'ambito potenziale di eventuali problemi imprevisti.

Set di flag funzionalità

I set di flag funzionalità raggruppano più flag funzionalità e ti consentono di gestirli come una singola risorsa logica. Questa funzionalità è utile per rilasciare funzionalità che richiedono il coordinamento di più flag.

Scopri di più sui set di flag.

Manifest

I manifest ti consentono di definire e gestire i flag funzionalità utilizzando i file JSON. Puoi eseguire il push di queste definizioni nell'API App Lifecycle Manager o eseguire il pull delle configurazioni esistenti per generare accessor con tipo sicuro per l'applicazione.

Scopri di più sui manifest.

Targeting complesso

Puoi utilizzare Common Expression Language (CEL) per creare regole di targeting sofisticate basate sugli attributi dell'utente o della richiesta per controllare con precisione quali utenti vedono quali funzionalità.

Scopri di più sul targeting complesso.

Architettura multi-tenant

Puoi utilizzare i deployment multi-tenant con App Lifecycle Manager se indirizzi i flag a unità o gruppi di unità specifici (utilizzando etichette o tenant). Puoi anche implementare implementazioni graduali nel parco risorse dei tenant.

Scopri di più sull'architettura multi-tenant.

Allocare i flag funzionalità

Definisci le allocazioni (ad esempio, sperimentale o di riferimento) e utilizza la suddivisione del traffico per eseguire test o implementazioni randomizzate.

Scopri di più sulle allocazioni dei flag funzionalità.

Passaggi successivi