¿Cómo se habilitan nuevas funciones para usuarios seleccionados en una aplicación web?

Banderas de características

Puede usar banderas de funciones para alternar qué usuarios / grupos reciben funciones.

Un lanzamiento canario le permite lanzar gradualmente nuevas funciones a un subconjunto de sus usuarios mientras sigue sirviendo su sucursal actual al resto de sus usuarios. Básicamente le permite probar cosas en paralelo sin tener que hacer fusiones / implementaciones importantes. Esto le permite probar las características A / B para evaluar el rendimiento antes de lanzarlas a la mayoría de sus usuarios.

Un lanzamiento canario (también conocido como despliegue canario o lanzamiento canario) está implementando características para un pequeño número de usuarios para evaluar la reacción del sistema en general. ¿Son los usuarios más felices? ¿Se gana más dinero? ¿La nueva característica aumenta la carga del sistema? Un lanzamiento canario le permite desplegar una función lentamente y medir la reacción de los “canarios” reales del usuario, buscando indicadores tempranos de peligro. Si una característica no es buena, puede revertirse. Los lanzamientos de Canary son una mejor práctica para las organizaciones de desarrollo ágil que practican la entrega continua para moverse más rápido.

GESTIÓN DE LA ESCALABILIDAD CON ROLLOUTS Fuente

Veamos un ejemplo. Usted es un desarrollador que lanza una nueva función que requerirá que procese cientos de solicitudes adicionales por segundo. ¿Unos cientos más? Eso no es problema: ha creado la infraestructura para escalar y manejar esa carga. Pero, ¿qué pasa si todos sus usuarios se enamoran de la nueva característica? Bombardeándote con miles de solicitudes. ¿Como manejas esto?

Imagine que puede implementar su función en vivo para el 10% de sus usuarios y luego el 20% … 30% … Cada paso se convierte en un punto de referencia de prueba donde evalúa los comentarios sobre el rendimiento y puede escalar en consecuencia.

Más importante aún, mitiga la degradación imprevista del rendimiento y cumple con las expectativas del consumidor de un rendimiento continuo de la aplicación.

EJEMPLO DE BANDERA DE CARACTERÍSTICAS PHP

Una de las soluciones que ha existido por un tiempo (pero que no ha sido ampliamente adoptada) es el marcado de características. Marc Weistroff escribió un artículo sobre el marcado de funciones para Symfony en el que analiza cómo se utilizan una serie de condiciones para determinar quién ve una función.

  función pública getRoles () 

 { 
      if ($ this-> isAdmin) { 
         matriz de retorno ('ROLE_ADMIN', 'FEATURE_ALPHA');
      }

      if ($ this-> isBetaTester) { 
         matriz de retorno ('ROLE_ADMIN', 'FEATURE_BETA'); 
      } 

     matriz de retorno ('ROLE_USER', 'FEATURE_PROD');
 } 

Si está interesado en la función de marcar su código, aquí hay un nuevo paquete de banderas de características de dzunke para echar un vistazo a Symfony2 (php:> = 5.40). Etsy también abrió su sistema de marcado de características (aunque ya no lo admiten).

RECURSOS

  • Blog de Travis CI sobre banderas de características
  • Operaciones web de DZone y banderas de características
  • featureflags.io
    • Lista completa de recursos de indicador de características de código abierto
  • Lanzamiento Oscuro
    • Banderas de funciones como servicio (Divulgación, trabajo para LD)
  • Togglz (Java)

Esto es lo que necesita cuidar (probado y probado a escala web, nunca encontré ningún problema enorme con esto):

  • Use una bandera booleana que pueda habilitar / deshabilitar la “nueva característica”. Mientras lo estemos, no incruste este indicador en el código, preferiblemente lo anule de la base de datos o la configuración sin requerir ningún tiempo de inactividad.
  • Habilitar para varios entornos gradualmente. (Puesta en escena, preproducción interna y finalmente producción). Esto es muy beneficioso en caso de que desee habilitar la nueva función solo para empleados (vista previa interna) e incorporar sus comentarios antes de enviarlos a sus usuarios / clientes.
  • Use la técnica de vuelo para el despliegue gradual en Producción, mapeando a los usuarios con la nueva marca de función. Habilítelo para decir una base de clientes del 1% y siga aumentando el número de usuarios / clientes afectados por la nueva función. Despliegue si todo parece estar bien o retroceda en caso de algún problema.
  • Además, realice algún tipo de prueba A / B para medir la efectividad de la nueva característica frente a un conjunto predefinido de métricas (participación del usuario, adopción de características, etc.)

PD: Esto no es lo que Facebook o Google podrían estar siguiendo punto a punto, pero la esencia sigue siendo la misma.

Debe crear sus características de tal manera que haya un booleano de tiempo de ejecución que se pueda activar y desactivar.

Si son páginas completas / comportamiento que se ve diferente para diferentes conjuntos de usuarios, iría con la bandera en la base de datos y un marco de código de soporte, pero si es algo así como a / b probar botones rojos vs verdes o similares, es mucho más barato hacer en el código