Visão geral das flags de recursos do App Lifecycle Manager

As flags de recurso do App Lifecycle Manager permitem controlar a disponibilidade e o comportamento dos recursos nos aplicativos, sem exigir novas implantações de código ou mudanças na infraestrutura.

É possível usar as flags de duas maneiras principais:

  1. Integrado:combine o gerenciamento de flags com as implantações de aplicativos gerenciadas pelo App Lifecycle Manager.
  2. Independente:use o sistema de sinalização robusto de forma independente, mesmo que a infraestrutura do aplicativo seja gerenciada em outro lugar, modelando os componentes do sistema como unidades do App Lifecycle Manager.

As flags de recurso se integram aos conceitos principais do App Lifecycle Manager, como unidades e lançamentos. Isso permite gerenciar as configurações de sinalização junto com a infraestrutura do aplicativo (abordagem integrada).

Consulte a visão geral do App Lifecycle Manager se você não conhece as unidades ou os lançamentos do App Lifecycle Manager.

Por que usar as flags de recurso do App Lifecycle Manager?

A implementação de flags de recurso com o App Lifecycle Manager oferece vários benefícios para o ciclo de vida de desenvolvimento e operações de SaaS:

  • Desvincular lançamentos de recursos de implantações de código:envie um novo código para produção com recursos desativados por padrão. Ative recursos para usuários específicos ou implante-os gradualmente quando estiverem prontos, reduzindo o risco associado a implantações grandes.
  • Aumente a segurança, a velocidade e a confiabilidade:
    • Testar recursos em produção com um público limitado (versões canário).
    • Realize lançamentos graduais usando os recursos de lançamento do App Lifecycle Manager, minimizando o impacto de possíveis problemas.
  • Ativar a lista de permissões e a personalização de locatários:ative ou desative recursos para unidades que podem representar locatários, serviços ou ambientes.
  • Simplificar reversões:desativar uma flag de recurso costuma ser muito mais rápido e menos disruptivo do que implantar uma versão anterior do aplicativo. Esse fluxo de trabalho permite desativar recursos problemáticos sem reverter binários.
  • Gerenciamento unificado de configurações de flags:gerencie definições de flag de recurso e use-as para configurar lançamentos. Esse fluxo de trabalho oferece confiabilidade operacional, permitindo que você mude a funcionalidade do aplicativo criando lançamentos de flag de recurso.

Como funcionam as flags de recurso do App Lifecycle Manager

O uso de flags de recurso no App Lifecycle Manager envolve dois aspectos principais: o plano de gerenciamento (definição e implantação de flags) e o plano de dados (acesso aos valores de flags no aplicativo).

Uso integrado com o App Lifecycle Manager

Se você usa o App Lifecycle Manager para gerenciar as implantações de aplicativos (por exemplo, implantar infraestrutura usando blueprints do Terraform):

  1. Definir flags:crie recursos de flag de recurso no App Lifecycle Manager, especificando um Flag key exclusivo (enable-new-dashboard, por exemplo) e associando-o a um tipo de unidade. Sinalizações booleanas são aceitas.
  2. Provisionar mudanças de flag:as mudanças nas flags (criação ou atualizações) não entram em vigor até que você inicie um lançamento do App Lifecycle Manager. Isso permite usar recursos como lotes, supervisão e verificações de segurança para implantações de flags. O lançamento atualiza a configuração da flag associada às unidades segmentadas.
  3. Sinalizações de acesso no aplicativo:o código do aplicativo, em execução na unidade provisionada (por exemplo, em um contêiner no Cloud Run ou no Google Kubernetes Engine), usa um SDK do OpenFeature configurado com o provedor flagd. Esse provedor se conecta ao endpoint de serviço saasconfig.googleapis.com. Usando o App Lifecycle Manager, injete o identificador de unidade necessário no ambiente do aplicativo, permitindo que o SDK busque os valores de flag corretos para essa unidade específica.

Essa integração profunda permite gerenciar os ciclos de vida dos recursos junto com os ciclos de vida da infraestrutura. Para um exemplo prático, consulte o guia de início rápido sobre como implantar flags de recurso.

Plano de gerenciamento

Você interage com o plano de gerenciamento para definir e controlar as flags. É possível usar o console do Google Cloud , a CLI gcloud ou a API App Lifecycle Manager para:

  • Criar ou atualizar flags: para definir flags, especifique o Flag key, associe-o a um tipo de unidade e defina o tipo e o valor padrão.
  • Criar lançamentos: você inicia um lançamento para distribuir mudanças de sinalização (criações ou atualizações) para as unidades segmentadas que pertencem ao tipo de unidade da sinalização. Os lançamentos garantem que as mudanças sejam aplicadas de forma segura e confiável de acordo com as políticas configuradas.

Plano de dados

O código do aplicativo interage com o plano de dados para consumir valores de flag:

  • SDK do OpenFeature:integre o SDK do OpenFeature, que é independente de fornecedor, ao seu aplicativo.
  • Provedor flagd:configure o SDK do OpenFeature para usar o provedor flagd.
  • Configuração:aponte o provedor flagd para o endpoint do serviço de flag de recurso do App Lifecycle Manager: saasconfig.googleapis.com:443.
  • Segmentação:forneça o provider_id para identificar a configuração da flag. Esse valor normalmente corresponde ao nome completo do recurso da unidade do App Lifecycle Manager (projects/PROJECT_ID/locations/LOCATION/featureFlagsConfigs/UNIT_ID, por exemplo).
  • Autenticação:o provedor usa o Application Default Credentials (ADC) para autenticar com segurança as solicitações ao endpoint de serviço do Google Cloud . A conta de serviço usada precisa do papel roles/saasconfig.viewer do Identity and Access Management.
  • Avaliação de flag:use os métodos padrão do OpenFeature (client.get_boolean_value(...)) no código para verificar os valores das flags. O provedor busca a configuração implantada mais recente do serviço.

O App Lifecycle Manager fornece implementações de referência e exemplos de integração com o plano de dados:

Tipos de valor de flag de recurso

As flags de recurso do App Lifecycle Manager oferecem mais do que avaliações booleanas padrão de ativação/desativação. É possível definir flags com valores STRING, INTEGER ou DOUBLE para controlar variáveis operacionais complexas, como limites de ambiente de execução, parâmetros de tema ou limites de configuração.

Ao contrário das flags booleanas, é preciso definir explicitamente as flags não booleanas durante a criação para ditar o universo de possíveis tipos de retorno.

Flags de string

As flags de string transmitem identificadores de configuração diretamente para os clientes conectados.

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"}'

Sinalizações de números inteiros

As flags de números inteiros controlam limites numéricos exatos e limites de 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"}'

Sinalizações duplas

As flags duplas fornecem valores de alta precisão usados para limites de probabilidade ou parâmetros flutuantes.

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"}'

Provisionar flags de recurso usando lançamentos

O App Lifecycle Manager garante mudanças ou atualizações seguras em grande escala usando lançamentos para provisionar atualizações de flag de recurso.

Sem lançamentos graduais, uma pequena mudança na configuração da sinalização (por exemplo, ativar um recurso para 1% dos usuários) é propagada instantaneamente em todas as instâncias do aplicativo. Se esse recurso introduzir uma regressão, poderão ocorrer problemas simultaneamente em toda a infraestrutura. Essa propagação global aumenta significativamente o risco de impacto generalizado no serviço.

Os lançamentos do App Lifecycle Manager reduzem esse risco ao permitir a distribuição gradual e controlada de mudanças nas flags, limitando o escopo potencial de qualquer problema imprevisto.

Conjuntos de flags de recurso

Os conjuntos de flags de recurso agrupam várias flags de recurso e permitem que você as gerencie como um único recurso lógico. Isso é útil para lançar recursos que exigem a coordenação de várias flags.

Saiba mais sobre os conjuntos de sinalizações.

Manifestos

Os manifestos permitem definir e gerenciar flags de recurso usando arquivos JSON. É possível enviar essas definições para a API App Lifecycle Manager ou extrair configurações existentes para gerar acessadores com segurança de tipos para seu aplicativo.

Saiba mais sobre manifestos.

Segmentação complexa

É possível usar a Common Expression Language (CEL) para criar regras de segmentação sofisticadas com base em atributos de usuário ou de solicitação para um controle preciso sobre quais usuários veem quais recursos.

Saiba mais sobre a segmentação complexa.

Arquitetura multilocatária

É possível usar implantações multilocatárias com o App Lifecycle Manager se você segmentar flags para unidades ou grupos de unidades específicos (usando rótulos ou locatários). Também é possível implementar lançamentos graduais em toda a frota de locatários.

Saiba mais sobre a arquitetura multilocatária.

Alocar flags de recurso

Defina alocações (como experimental ou valor de referência) e use a divisão de tráfego para realizar testes ou lançamentos aleatórios.

Saiba mais sobre flag de recurso de recurso.

A seguir