Compartir a través de


Marcas de características

Sugerencia

Este contenido es un extracto del libro electrónico, Arquitectura de aplicaciones .NET nativas de nube para Azure, disponible en .NET Docs o como un PDF descargable gratuito que se puede leer sin conexión.

Miniatura de la portada del libro electrónico

En el capítulo 1, afirmamos que ser nativo en la nube se trata fundamentalmente de la velocidad y la agilidad. Los usuarios esperan una capacidad de respuesta rápida, características innovadoras y un tiempo de inactividad cero. Feature flags son una técnica de implementación moderna que ayuda a aumentar la agilidad de las aplicaciones nativas de la nube. Permiten implementar nuevas características en un entorno de producción, pero restringen su disponibilidad. Con solo accionar un interruptor, puedes activar una nueva funcionalidad para ciertos usuarios sin reiniciar la aplicación ni desplegar nuevo código. Distinguen el lanzamiento de las nuevas características de su implementación de código.

Las banderas de funcionalidades se basan en la lógica condicional que controla la visibilidad de la funcionalidad para usuarios en tiempo de ejecución. En los sistemas nativos de nube modernos, es habitual implementar nuevas características en producción pronto, pero probarlas con un público limitado. A medida que aumenta la confianza, la característica se puede implementar incrementalmente en audiencias más amplias.

Otros casos de uso de las marcas de características incluyen:

  • Restrinja la funcionalidad premium a grupos de clientes específicos dispuestos a pagar tarifas de suscripción más altas.
  • Para estabilizar un sistema, desactive rápidamente una característica problemática, evitando los riesgos de una reversión o corrección urgente.
  • Deshabilite una característica opcional con un consumo elevado de recursos durante los períodos de uso máximo.
  • Llevar a cabo experimental feature releases en segmentos de usuario pequeños para validar la viabilidad y popularidad.

Las marcas de características también promueven el desarrollo trunk-based. Es un modelo de bifurcación de control de código fuente en el que los desarrolladores colaboran en características de una sola rama. El enfoque minimiza el riesgo y la complejidad de combinar un gran número de ramas de características de larga duración. Las características no están disponibles hasta que se activan.

Implementación de banderas de funcionalidades

En su esencia, una bandera de características es una referencia a un simple decision object. Devuelve un estado booleano de on o off. La bandera suele envolver un bloque de código que encapsula una característica. El estado de la marca determina si ese bloque de código se ejecuta para un usuario determinado. En la figura 10-11 se muestra la implementación.

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 - Implementación sencilla de la bandera de característica.

Tenga en cuenta cómo este enfoque separa la lógica de decisión del código de característica.

En el capítulo 1, analizamosTwelve-Factor App. Las recomendaciones aconsejan mantener los valores de configuración externos al código ejecutable de la aplicación. Cuando sea necesario, la configuración se puede leer desde la fuente externa. Los valores de configuración de la marca de características también deben ser independientes de su código base. Al externalizar la configuración de la marca en un repositorio independiente, puede cambiar el estado de la marca sin modificar ni volver a implementar la aplicación.

Azure App Configuration proporciona un repositorio centralizado para las marcas de características. Con él, se definen diferentes tipos de marcas de características y se manipulan sus estados de forma rápida y segura. Agregue las bibliotecas cliente de App Configuration a su aplicación para habilitar la funcionalidad de las banderas de características. Se admiten varios marcos de lenguaje de programación.

Las marcas de características se pueden implementar fácilmente en un servicio ASP.NET Core. La instalación de las bibliotecas de administración de características de .NET y el proveedor de App Configuration le permiten agregar marcas de características mediante declaración al código. Habilitan FeatureGate atributos para que no tengas que escribir manualmente sentencias if en el código base.

Una vez configurado en la clase Startup, puede agregar la funcionalidad de marca de características en el nivel de controlador, acción o middleware. La figura 10-12 presenta la implementación del controlador y la acción:

[FeatureGate(MyFeatureFlags.FeatureA)]
public class ProductController : Controller
{
    ...
}
[FeatureGate(MyFeatureFlags.FeatureA)]
public IActionResult UpdateProductStatus()
{
    return ObjectResult(ProductDto);
}

Figura 10-12 - Implementación de la marca de características en un controlador y una acción.

Si se deshabilita una marca de característica, el usuario recibirá un código de estado 404 (no encontrado) sin cuerpo de respuesta.

Las marcas de características también se pueden insertar directamente en clases de C#. En la figura 10-13 se muestra la inserción de marcas de características:

public class ProductController : Controller
{
    private readonly IFeatureManager _featureManager;

    public ProductController(IFeatureManager featureManager)
    {
        _featureManager = featureManager;
    }
}

Figura 10-13 : inserción de marcas de características en una clase.

Las bibliotecas de Administración de características administran el ciclo de vida de la marca de características en segundo plano. Por ejemplo, para minimizar un gran número de llamadas al almacén de configuración, las bibliotecas almacenan en caché los estados de las banderas durante una duración especificada. Pueden garantizar la inmutabilidad de los estados de marca durante una llamada de solicitud. También ofrecen un Point-in-time snapshot. Puede reconstruir el historial de cualquier clave-valor y proporcionar su valor pasado en cualquier momento dentro de los siete días anteriores.