Es posible con Feature Toggles , esta aplicación es un ejemplo para este concepto
Las funciones de alternancia son una técnica poderosa que permite a los equipos modificar el comportamiento del sistema sin cambiar el código. Se dividen en varias categorías de uso, y es importante tener en cuenta esa categorización al implementar y administrar alternar. Las palancas introducen complejidad. Podemos mantener esa complejidad bajo control mediante el uso de prácticas de implementación de alternancia inteligente y herramientas apropiadas para administrar nuestra configuración de alternancia, pero también debemos tratar de limitar la cantidad de alternancias en nuestro sistema.
La “alternancia de funciones” es un conjunto de patrones que pueden ayudar a un equipo a ofrecer nuevas funciones a los usuarios de forma rápida pero segura. En este artículo sobre la función de alternancia de funciones, comenzaremos con una historia corta que muestra algunos escenarios típicos en los que la función de alternancia de funciones es útil. Luego profundizaremos en los detalles, cubriendo patrones y prácticas específicos que ayudarán a un equipo a tener éxito con Feature Toggles.
- Cómo mantener dos sesiones diferentes usando preferencias compartidas para dos usuarios en la misma aplicación de Android
- ¿Cada persona necesita una cuenta sip para hacer una llamada sip / voip?
- ¿Cuáles son las características de Android Studio que no están disponibles en Eclipse?
- Cómo hacer una conectividad entre una aplicación de Android y WampServer
- ¿Cuáles son algunos de los mejores complementos de Android Studio?
Un cuento de alternar
Imagina la escena. Estás en uno de varios equipos que trabajan en un sofisticado juego de simulación de planificación urbana. Su equipo es responsable del motor de simulación central. Se le ha encomendado la tarea de aumentar la eficiencia del algoritmo de reticulación de spline. Usted sabe que esto requerirá una revisión bastante grande de la implementación que llevará varias semanas. Mientras tanto, otros miembros de su equipo deberán continuar trabajando en áreas relacionadas de la base de código.
Si es posible, desea evitar la ramificación para este trabajo, basándose en experiencias dolorosas previas de fusionar ramas de larga vida en el pasado. En cambio, usted decide que todo el equipo continuará trabajando en el tronco, pero los desarrolladores que trabajan en las mejoras de la retícula de Spline utilizarán una función de alternancia para evitar que su trabajo afecte al resto del equipo o desestabilice la base de código.
El nacimiento de un alternador de funciones
Aquí está el primer cambio introducido por el par que trabaja en el algoritmo:
antes de
función reticulateSplines () {
// la implementación actual vive aquí
}
todos estos ejemplos usan JavaScript ES2015
después
función reticulateSplines () {
var useNewAlgorithm = false;
// useNewAlgorithm = true; // COMENTARIO SI ESTÁS TRABAJANDO EN EL NUEVO ALGORITMO SR
if (useNewAlgorithm) {
retorno mejoradoSplineReticulation ();
}más{
return oldFashionedSplineReticulation ();
}
}
function oldFashionedSplineReticulation () {
// la implementación actual vive aquí
}
función EnhancedSplineReticulation () {
// TODO: implementar un mejor algoritmo SR
}
El par ha movido la implementación actual del algoritmo a una función oldFashionedSplineReticulation
y ha convertido reticulateSplines
en un punto de oldFashionedSplineReticulation
. Ahora, si alguien está trabajando en el nuevo algoritmo, puede habilitar la función “usar nuevo algoritmo” al descomentar la línea useNewAlgorithm = true
.
Hacer una dinámica de alternar
Pasan algunas horas y la pareja está lista para ejecutar su nuevo algoritmo a través de algunas de las pruebas de integración del motor de simulación. También quieren ejercer el antiguo algoritmo en la misma ejecución de prueba de integración. Deberán poder habilitar o deshabilitar la característica dinámicamente, lo que significa que es hora de pasar del mecanismo torpe de comentar o descomentar que useNewAlgorithm = true
línea useNewAlgorithm = true
:
función reticulateSplines () {
if (featureIsEnabled (“use-new-SR-algoritm”)) {
retorno mejoradoSplineReticulation ();
}más{
return oldFashionedSplineReticulation ();
}
}
Ahora hemos introducido una función featureIsEnabled
, un Toggle Router que se puede usar para controlar dinámicamente qué codepath está activo. Hay muchas formas de implementar un Toggle Router, que varía desde un simple almacén en memoria hasta un sistema distribuido altamente sofisticado con una elegante interfaz de usuario. Por ahora comenzaremos con un sistema muy simple:
función createToggleRouter (featureConfig) {
regreso {
setFeature (featureName, isEnabled) {
featureConfig [featureName] = isEnabled;
},
featureIsEnabled (featureName) {
return featureConfig [featureName];
}
};
}
tenga en cuenta que estamos usando el método abreviado de ES2015
Podemos crear un nuevo enrutador de alternancia basado en alguna configuración predeterminada, tal vez leer desde un archivo de configuración, pero también podemos activar o desactivar dinámicamente una función. Esto permite que las pruebas automatizadas verifiquen ambos lados de una función activada:
describe (‘reticulación spline’, function () {
dejar alternarRouter;
let simulationEngine;
beforeEach (function () {
toggleRouter = createToggleRouter ();
simulationEngine = createSimulationEngine ({toggleRouter: toggleRouter});
});
it (‘funciona correctamente con un algoritmo antiguo’, function () {
// Dado
toggleRouter.setFeature (“use-new-SR-Algoritmo”, falso);
// Cuando
resultado constante = simulationEngine.doSomethingWhichInvolvesSplineReticulation ();
// Luego
verifiedSplineReticulation (resultado);
});
it (‘funciona correctamente con un nuevo algoritmo’, function () {
// Dado
toggleRouter.setFeature (“use-new-SR-algoritm”, verdadero);
// Cuando
resultado constante = simulationEngine.doSomethingWhichInvolvesSplineReticulation ();
// Luego
verifiedSplineReticulation (resultado);
});
});
Preparándose para lanzar
Pasa más tiempo y el equipo cree que su nuevo algoritmo es completo. Para confirmar esto, han estado modificando sus pruebas automatizadas de nivel superior para que ejerzan el sistema tanto con la función desactivada como activada. El equipo también quiere hacer algunas pruebas exploratorias manuales para asegurarse de que todo funcione como se espera: la reticulación por spline es una parte crítica del comportamiento del sistema, después de todo.
Para realizar pruebas manuales de una función que aún no se ha verificado como lista para uso general, necesitamos poder desactivar la función para nuestra base general de usuarios en producción, pero poder activarla para usuarios internos. Hay muchos enfoques diferentes para lograr este objetivo:
- Haga que el Toggle Router tome decisiones basadas en una configuración de Toggle y que esa configuración sea específica del entorno. Solo active la nueva función en un entorno de preproducción.
- Permita que la configuración de alternar se modifique en tiempo de ejecución a través de alguna forma de IU de administrador. Use esa interfaz de usuario de administrador para activar la nueva función en un entorno de prueba.
- Enseñe a Toggle Router cómo tomar decisiones dinámicas de cambio por solicitud. Estas decisiones tienen en cuenta Toggle Context , por ejemplo, al buscar una cookie especial o un encabezado HTTP. Por lo general, Toggle Context se usa como proxy para identificar al usuario que realiza la solicitud.
(Más adelante profundizaremos en estos enfoques, así que no se preocupe si algunos de estos conceptos son nuevos para usted).
El equipo decide optar por un enrutador de palanca por solicitud, ya que les da mucha flexibilidad. El equipo aprecia especialmente que esto les permita probar su nuevo algoritmo sin necesidad de un entorno de prueba separado. En cambio, simplemente pueden activar el algoritmo en su entorno de producción, pero solo para usuarios internos (como se detecta a través de una cookie especial). El equipo ahora puede activar esa cookie por sí mismo y verificar que la nueva función funcione como se esperaba.
Lanzamiento canario
El nuevo algoritmo de reticulación Spline se ve bien en base a las pruebas exploratorias realizadas hasta ahora. Sin embargo, dado que es una parte tan crítica del motor de simulación del juego, sigue habiendo cierta renuencia a activar esta función para todos los usuarios. El equipo decide usar su infraestructura de alternancia de funciones para realizar un lanzamiento de Canarias , solo activando la nueva función para un pequeño porcentaje de su base de usuarios total: una cohorte “canaria”.
El equipo mejora el Toggle Router enseñándole el concepto de cohortes de usuarios: grupos de usuarios que constantemente experimentan una función como siempre activada o desactivada. Se crea una cohorte de usuarios canarios a través de un muestreo aleatorio del 1% de la base de usuarios, tal vez utilizando un módulo de identificación de usuario. Esta cohorte canaria tendrá la función constantemente activada, mientras que el otro 99% de la base de usuarios seguirá utilizando el antiguo algoritmo. Las métricas comerciales clave (participación del usuario, ingresos totales ganados, etc.) se supervisan para ambos grupos para ganar confianza de que el nuevo algoritmo no afecta negativamente el comportamiento del usuario. Una vez que el equipo confía en que la nueva función no tiene efectos nocivos, modifica su configuración de alternancia para activarla para toda la base de usuarios.
Pruebas A / B
El gerente de producto del equipo aprende sobre este enfoque y está muy entusiasmado. Ella sugiere que el equipo use un mecanismo similar para realizar algunas pruebas A / B. Ha habido un largo debate sobre si modificar el algoritmo de índice de criminalidad para tener en cuenta los niveles de contaminación aumentaría o disminuiría la jugabilidad del juego. Ahora tienen la capacidad de resolver el debate utilizando datos. Planean implementar una implementación barata que capture la esencia de la idea, controlada con una función de alternancia. Activarán la función para una cohorte de usuarios razonablemente grande, luego estudiarán cómo se comportan esos usuarios en comparación con una cohorte de “control”. Este enfoque permitirá al equipo resolver debates polémicos sobre productos basados en datos, en lugar de HiPPO.
Este breve escenario tiene la intención de ilustrar tanto el concepto básico de alternancia de características como también resaltar cuántas aplicaciones diferentes puede tener esta capacidad central. Ahora que hemos visto algunos ejemplos de esas aplicaciones, profundicemos un poco más. Exploraremos diferentes categorías de conmutadores y veremos qué los hace diferentes. Cubriremos cómo escribir código de alternancia mantenible, y finalmente compartiremos prácticas para evitar algunos de los escollos de un sistema de alternancia de funciones.
Categorías de conmutadores
Hemos visto la facilidad fundamental proporcionada por Feature Toggles: poder enviar rutas de código alternativas dentro de una unidad desplegable y elegir entre ellas en tiempo de ejecución. Los escenarios anteriores también muestran que esta instalación se puede utilizar de varias maneras en diversos contextos. Puede ser tentador agrupar todas las funciones en el mismo cubo, pero este es un camino peligroso. Las fuerzas de diseño en juego para diferentes categorías de conmutadores son bastante diferentes y manejarlas todas de la misma manera puede generar dolor en el futuro.
Las funciones de alternancia pueden clasificarse en dos dimensiones principales: cuánto tiempo durará la función y qué tan dinámica debe ser la decisión de alternar. Hay otros factores a tener en cuenta, por ejemplo, quién administrará la alternancia de funciones, pero considero que la longevidad y el dinamismo son dos factores importantes que pueden ayudar a guiar la forma en que se manejan los conmutadores.
Fuente: alternar funciones