Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Sugestão
Este conteúdo é um excerto do eBook Architecting Cloud Native .NET Applications for Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.
No capítulo 1, afirmámos que a computação em nuvem nativa trata principalmente de velocidade e agilidade. Os usuários esperam resposta rápida, recursos inovadores e zero tempo de inatividade.
Feature flags são uma técnica de implantação moderna que ajuda a aumentar a agilidade para aplicativos nativos da nuvem. Eles permitem que você implante novos recursos em um ambiente de produção, mas restringem sua disponibilidade. Com o movimento de um interruptor, você pode ativar um novo recurso para usuários específicos sem reiniciar o aplicativo ou implantar um novo código. Eles separam o lançamento de novos recursos de sua implantação de código.
Os sinalizadores de recursos são criados com base na lógica condicional que controla a visibilidade da funcionalidade para os usuários em tempo de execução. Em sistemas modernos nativos da nuvem, é comum implantar novos recursos em produção antecipadamente, mas testá-los com um público limitado. À medida que a confiança aumenta, o recurso pode ser implementado gradualmente para públicos mais amplos.
Outros casos de uso para marcadores de funcionalidades incluem:
- Restrinja a funcionalidade premium a grupos de clientes específicos dispostos a pagar taxas de assinatura mais altas.
- Estabilize o sistema desativando rapidamente uma funcionalidade problemática, evitando os riscos de uma reversão ou de um hotfix imediato.
- Desative um recurso opcional com alto consumo de recursos durante os períodos de pico de uso.
- Realize
experimental feature releasesem pequenos segmentos de utilizadores para validar a viabilidade e popularidade.
As bandeiras de recursos também promovem o trunk-based desenvolvimento. É um modelo de ramificação de controlo de origem em que os desenvolvedores colaboram nas funcionalidades dentro de um único ramo. A abordagem minimiza o risco e a complexidade de integrar um grande número de ramificações de funcionalidades de longa duração. Os recursos ficam indisponíveis até serem ativados.
Implementando sinalizadores de recursos
Na sua essência, um sinalizador de recurso é uma referência a um simples decision object. Ele retorna um estado booleano de on ou off. O indicador normalmente envolve um bloco de código que encapsula uma funcionalidade de recurso. O estado do sinalizador determina se esse bloco de código é executado para um determinado usuário. A Figura 10-11 mostra a implementação.
if (featureFlag) {
// Run this code block if the featureFlag value is true
} else {
// Run this code block if the featureFlag value is false
}
Figura 10-11 - Implementação de sinalizador de recurso simples.
Observe como essa abordagem separa a lógica de decisão do código do recurso.
No capítulo 1, discutimos o Twelve-Factor App. A orientação recomendou manter as definições de configuração externas do código executável do aplicativo. Quando necessário, as configurações podem ser lidas a partir da fonte externa. Os valores de configuração do sinalizador de recurso também devem ser independentes de sua base de código. Ao externalizar a configuração do sinalizador em um repositório separado, você pode alterar o estado do sinalizador sem modificar e reimplantar o aplicativo.
A Configuração de Aplicativo do Azure fornece um repositório centralizado para sinalizadores de recursos. Com ele, você define diferentes tipos de sinalizadores de recursos e manipula seus estados de forma rápida e confiante. Você adiciona as bibliotecas de cliente de Configuração do Aplicativo ao seu aplicativo para habilitar a funcionalidade de sinalizador de recurso. Vários frameworks de linguagem de programação são suportados.
Os sinalizadores de recursos podem ser facilmente implementados em um serviço ASP.NET Core. A instalação das bibliotecas de Gerenciamento de Recursos do .NET e do provedor de Configuração de Aplicativo permite que você adicione declarativamente sinalizadores de recursos ao seu código. Eles habilitam FeatureGate atributos para que você não precise escrever manualmente instruções if em sua base de código.
Uma vez configurado em sua classe de inicialização, você pode adicionar a funcionalidade de sinalizador de recurso no nível de controlador, ação ou middleware. A Figura 10-12 apresenta a implementação do controlador e da ação:
[FeatureGate(MyFeatureFlags.FeatureA)]
public class ProductController : Controller
{
...
}
[FeatureGate(MyFeatureFlags.FeatureA)]
public IActionResult UpdateProductStatus()
{
return ObjectResult(ProductDto);
}
Figura 10-12 - Implementação do sinalizador de recursos em um controlador e ação.
Se um sinalizador de recurso estiver desativado, o usuário receberá um código de status 404 (Não encontrado) sem corpo de resposta.
Os flags de funcionalidades também podem ser injetados diretamente nas classes C#. A Figura 10-13 mostra a injeção do sinalizador de recurso:
public class ProductController : Controller
{
private readonly IFeatureManager _featureManager;
public ProductController(IFeatureManager featureManager)
{
_featureManager = featureManager;
}
}
Figura 10-13 - Injeção de flag de funcionalidade numa classe.
As bibliotecas de Gestão de Funcionalidades gerem o ciclo de vida dos flags de funcionalidades nos bastidores. Por exemplo, para minimizar o alto número de chamadas para o repositório de configuração, as bibliotecas armazenam em cache estados de sinalização por uma duração especificada. Eles podem garantir a imutabilidade dos estados de bandeira durante uma chamada de pedido. Eles também oferecem um Point-in-time snapshot arquivo. Você pode reconstruir o histórico de qualquer valor-chave e fornecer seu valor passado a qualquer momento nos sete dias anteriores.