Las menciones de alta escalabilidad cuentan con banderas aquí:
5 cosas tóxicas para la escalabilidad , "5. Falta de indicadores de funciones"
¿Qué son exactamente las banderas de características?
Las menciones de alta escalabilidad cuentan con banderas aquí:
5 cosas tóxicas para la escalabilidad , "5. Falta de indicadores de funciones"
¿Qué son exactamente las banderas de características?
Respuestas:
Un 'indicador de funciones' (o alternancia de funciones) es la capacidad de activar o desactivar funciones (subsecciones) de su aplicación fácilmente:
Supongo que el ejemplo fue que es útil tener el control para reducir un poco el conjunto de características si necesita, por ejemplo, reducir las consultas de base de datos si la carga es demasiado alta.
Sin embargo, hay muchas otras razones por las que querría usar esto, una de las principales es habilitar la Entrega continua : llevar las cosas a producción / en vivo pero tener la función desactivada / activada hasta que se complete. A menudo usamos lo que llamamos una 'cookie de desarrollo' para mostrar funciones incompletas solo al equipo de desarrollo. De esta manera, podemos probar el trabajo parcialmente completado en producción (¡oh, sí! ¿Hay una mejor integración?) En múltiples lanzamientos / implementaciones antes de que lo "desactivemos" (lo completemos) y se vuelva visible para el público.
Aquí hay un paquete simple que lo ayuda a hacer esto en ASP.NET MVC land: https://github.com/cottsak/DevCookie (divulgación completa: soy el autor)
Fowler también tiene un artículo mucho más largo que el vinculado anteriormente con muchos más detalles .
Esta publicación (en el sitio de Fowler también) explica los diversos tipos de estrategias de alternancia . DevCookie es compatible con la estrategia de línea principal / troncal y se denomina " Alternancia de lanzamiento " en el artículo.
La respuesta de Adil destaca que hay muchos términos y razones por las que es posible que desee parte de esta infraestructura. Tenga en cuenta que es posible que solo necesite algunas de estas cosas. Por ejemplo, es posible que solo desee habilitar un flujo de trabajo de implementación / entrega simple y ágil, por lo que una infraestructura simple será suficiente. Si luego elige que desea pasar a la experimentación completa de #leanstartup con A / B, pruebas de cohortes y cosas como implementación controlada, debe considerar una herramienta de análisis (por ejemplo, Heap ) que facilite esas metodologías de desarrollo basadas en datos como una solución distinta . Una infraestructura de alternancia que hace todo lo anterior conducirá a una complejidad innecesaria y abultada.
Si llegaste tan lejos, entonces te gustaría ver algunos de mis otros pensamientos sobre Mainline Development, alternancia de funciones y otras ideas tontas como TEST, QA, SIT, STAND, CROUCH .
Feature Flag es una técnica para desactivar algunas funciones de su aplicación, a través de la configuración, sin implementar código nuevo.
Los indicadores de características juegan un papel clave en el esquema de CI donde las características se implementan constantemente pero no necesariamente se "lanzan" a la producción.
Más info aquí:
- EDITAR:
Los indicadores de funciones, los cambios de funciones, los experimentos y las implementaciones controladas son sinónimos de una idea simple pero poderosa: implementaciones de código separadas de las implementaciones de funciones. En pocas palabras, es la capacidad de impulsar los compromisos de sus funciones con la producción mientras elige quién entre sus clientes, si es que hay alguien, puede ver esa función.
Fueron popularizados en parte por Gatekeeper de Facebook . LiX de LinkedIn es otro buen ejemplo.
Adoptar esta simple idea sienta las bases para muchas mejores prácticas, que incluyen:
Implementación / entrega continua : múltiples impulsos de código a producción en un día.
Desarrollo de línea principal / troncal : las ramas de características deben crearse solo para solicitudes de extracción, no para el desarrollo de características de larga duración.
No más trenes de lanzamiento para empantanar las cosas.
Pruebas de calidad / rendimiento en producción: las pruebas de calidad y rendimiento reales se realizan en la infraestructura de producción con tráfico de producción. No pierda el tiempo en la creación de amplios laboratorios de rendimiento y entornos de ensayo.
Experimentación : sepa cómo una nueva función mueve la aguja en sus KPI.
Evitar revisiones o reversiones de código cuando surgen problemas : tanto las revisiones como las reversiones de código son estresantes, toman mucho tiempo y generan más problemas de los necesarios. En su lugar, desactive la función o bájela.
Otros han mencionado bibliotecas de código abierto. Un buen ejemplo de una solución completa, como Gatekeeper y LiX, es Split . Trabajo para Split.
Aquí hay muchas respuestas excelentes, todas conduciendo a la importante definición básica popularizada en la publicación de Martin Fowler :
Son fragmentos de código que "[permiten] a los equipos modificar el comportamiento del sistema sin cambiar el código".
Así que históricamente hemos pensado en ellos como representados por el pseudocódigo:
if(app_settings["beta-mode"] == "true")
showAwesomeNewGui();
else
sameOldSnoozeFeset();
Esa es una forma totalmente precisa de pensar en ello, y tanto Matt como Adil lo amplían muy bien con una variedad de casos de uso táctico para la bandera de funciones.
Pero me gustaría ofrecer una definición revisada que refleje cómo la realidad ha evolucionado en los seis años y ha cambiado desde que dotnetdev hizo la pregunta original. Trabajo para Rollout.io , una plataforma de bandera de características, así que tuve un asiento de primera fila para esta evolución.
En pocas palabras, los indicadores de funciones ya no son solo una forma de activar y desactivar partes de la funcionalidad en su aplicación. Es como responder "qué es una línea de pedido de factura" diciendo "es una descripción y una cantidad de moneda". Es cierto, pero no se maneja en el punto más amplio de la propia factura.
Los indicadores de funciones son las partes tácticas de una solución estratégica general en el software moderno. Son el medio por el cual pospone la lógica de decisión importante en su código hasta el tiempo de ejecución cuando tiene más información. Y, quizás lo más importante, ya no se producen de forma aislada, con una única comprobación para ver si el número de versión es mayor que 2.7 o no; las organizaciones que los utilizan normalmente los incluyen como parte de un enfoque de producto integral para todo el sistema.
Como han mencionado otros, Facebook y LinkedIn fueron pioneros en esto, pero en 2018, muchas organizaciones lo están haciendo. Están aplazando las preguntas de lógica de decisión para el tiempo de ejecución como parte de la estrategia de desarrollo, la estrategia de operaciones (o estrategia DevOps, si lo desea) y la estrategia del producto. A continuación se muestran ejemplos de tales preguntas.
Para tener una aplicación que pospone un número significativo de decisiones de este tipo hasta el tiempo de ejecución, no puede colocar indicadores de características en su aplicación de manera ad-hoc o se hundirá en una deuda técnica. En estos días, necesita tener una estrategia integral de gestión de indicadores de características, que incluya algunos componentes diferentes.
Entonces, al final, ¿qué son las banderas de características?
Bueno, son una parte importante de una estrategia más amplia para tener una aplicación que se adapte a las necesidades técnicas y del mercado.
Una marca de función (también conocida como cambio de función o alternancia de función ) es un interruptor para habilitar o deshabilitar una función potencialmente cara según sea necesario (como, por ejemplo, cuando un sitio está siendo golpeado con tráfico inesperado). Esto le dará un poco de tiempo hasta que aumente la escala o hasta que desaparezca el pico de carga.
Aquí hay un ejemplo de la documentación de SWIG .
En mi empresa solíamos tener una solución propia para eso. Creamos un servicio que proporciona un .json
archivo config ( ) descargable para cada aplicación. En esa configuración, almacenamos las banderas para las características. Según esa configuración, la aplicación puede mostrar u ocultar la función actual. (Por ejemplo, mostrar u ocultar un elemento de menú en la barra lateral).
También creamos una página de administración interna donde podemos configurar los indicadores de características. Funcionó bastante bien durante un tiempo, pero después de eso nos hubiera gustado hacer una orientación de usuario y pruebas A / B. Desarrollar por cuenta propia nos pareció demasiado esfuerzo, por lo que optamos por una solución de terceros. Como ya se mencionó aquí, hay muchas soluciones para eso.
Elegimos ConfigCat porque admite grupos objetivo personalizados y despliegue basado en porcentajes a la vez. Puede consultar los sdks de código abierto compatibles en github .
Los indicadores de funciones (o alternancia de funciones) le permiten habilitar funciones de forma remota en una aplicación sin necesidad de reconstruir / volver a implementar la aplicación. Esto le permite implementar el código en producción, pero no lanzar la función hasta que esté listo. Puede dirigirse a usuarios específicos, por lo que podría habilitar una nueva función para que sus usuarios beta la prueben.
En nuestra empresa, hemos utilizado anteriormente LaunchDarkly y otras sugerencias de FeatureFlags.io . También hemos intentado usar la configuración remota de Firebase para intentar que esto funcione, sin embargo, descubrimos que no era realmente adecuado para este propósito.
Terminamos desarrollando nuestra propia versión llamada Bullet Train , que hemos abierto. Combina tanto Feature Flags / Toggles como Remote Config.
Los indicadores de características se utilizan para varios propósitos. La idea general es delegar el control sobre qué usuario ve qué característica a algún tablero remoto o back-office de algún tipo.
Una vez que una función está marcada en el código, ahora puede usar varios métodos para determinar qué usuario la ve en su aplicación: 1. Activado / Desactivado : muestra la función a todos o ninguno de sus usuarios. 2. Lanzamiento gradual : muestre la función solo a un porcentaje de sus usuarios, luego muéstrela gradualmente a todos los usuarios. 3. Segmentación : muestra la función a usuarios específicos según las propiedades o características de ese usuario.
Las herramientas que ayudan a controlar los indicadores de características (booleanos) y las configuraciones de características (cadenas, números, etc.) generalmente se denominan plataformas de administración de características. Existe un gran servicio para la administración de características llamado Configz.io
Desde el punto de vista de la codificación, un indicador de función puede ser tan simple como una if
declaración que envuelve una nueva pieza de código que está escribiendo. Cuando la if
declaración se evalúa como verdadera (el indicador de función está activado), se ejecutará el nuevo código.
En un ejemplo del mundo real de entrega de software, la if
declaración descrita anteriormente se evaluaría de manera diferente según el entorno en el que se esté ejecutando el software. Por ejemplo, si la aplicación se está ejecutando en su servidor de control de calidad, el indicador de función se volverá verdadero y la nueva función será visto. Si se está ejecutando en su servidor de producción, el indicador de función volverá falso y la función se ocultará.
Desde mi experiencia personal durante mi carrera, he utilizado banderas de características de las siguientes maneras:
Desacoplar las implementaciones de código de la liberación de funciones a los clientes. Este fue mi primer uso inicial de indicadores de funciones en nuestro proceso de desarrollo. Lo usamos para eliminar la dependencia entre nuestro equipo de marketing y producto y el equipo de ingeniería que estaba haciendo el desarrollo y las versiones. Los indicadores de características nos permitieron implementar nuestro código semanas antes de un lanzamiento, mientras que anteriormente estábamos implementando el código la noche anterior a un lanzamiento.
Pruebas en producción. Antes de que usáramos indicadores de funciones cuando lanzamos nuestro código, era un evento de todo o nada, o todos nuestros clientes obtuvieron la función o ninguno de ellos. Usamos indicadores de funciones para permitirnos implementar una nueva función para un pequeño porcentaje de usuarios a la vez. Esto nos permitió recopilar comentarios y datos valiosos sobre una nueva función sin arriesgarnos a problemas potenciales para toda la base de clientes.
Habilitar / deshabilitar una función por entorno en el ciclo de vida del desarrollo. Usamos esto ampliamente en el desarrollo para permitir un proceso de implementación mucho más fluido; tenemos una canalización de CI / CD en la que el uso de indicadores de funciones es vital.
Creando un interruptor de apagado. Hemos envuelto ciertas características de nuestra aplicación con un indicador de características que nos permite 'eliminar' esa característica en caso de que tengamos algún problema con la aplicación en ese momento. Por ejemplo, si nos encontramos bajo una gran carga, podemos desactivar ciertas funciones no esenciales del sitio web para ayudar con el problema.
Puede leer más sobre las banderas de funciones aquí.
Puede agregar indicadores de funciones a su código de varias maneras.
Escribir su propia biblioteca puede parecer una buena idea al principio y, por lo general, puede comenzar de esa manera. Sin embargo, pronto puede tener problemas cuando desee implementar los casos de uso más avanzados de marcas de funciones, como la implementación a un porcentaje de usuarios o la orientación a grupos de usuarios específicos. Otro problema con la creación de su propia implementación de marcas de características es que si está utilizando varios idiomas, deberá implementar su código varias veces.
La forma mejor y más fácil de utilizar los indicadores de características es utilizar un servicio de gestión de indicadores de características en línea, como Floodgate . De esta manera, puede aprovechar la plataforma para todo el trabajo pesado, lo que le permite concentrarse en crear la función para su aplicación.
A continuación, se muestra un ejemplo de cómo agregar una marca de característica de Floodgate a una aplicación usando el SDK de .NET.
using FloodGate.SDK;
var floodgateClient = new FloodGateClient("API-KEY");
var flag = floodgateClient.GetValue("a-new-feature", false);
if (flag)
{
// Execute the code for my new feature here...
}
Si está trabajando en un equipo de desarrollo y no está utilizando marcas de funciones y está experimentando problemas en las implementaciones y la administración de código dentro del equipo. El uso de indicadores de funciones puede ser una excelente manera de resolver estos problemas. También hay un buen efecto secundario de que los indicadores de características aceleran la velocidad de desarrollo de sus equipos.
Martin Fowler ofrece una descripción muy detallada de los indicadores de características aquí que le recomiendo que lea.
Tengo entendido que los indicadores de funciones le ayudan a controlar la funcionalidad al decidir qué usuarios reciben determinadas funciones.
Por ejemplo, supongamos que solo desea que sus usuarios beta vean una nueva función. "Activaría" esa función para los usuarios beta y el resto de sus usuarios no la verían.
LDUser user = new LDUser("user@test.com");
boolean showFeature = ldClient.toggle("your.feature.key", user, false);
if (showFeature) {
// application code to show the feature
}
else {
// the code to run if the feature is off
}
Estoy probando los indicadores de características de LaunchDarkly para algunas pruebas de front-end JS A / B; parece que funciona bien. También puede consultar este sitio para alternar funciones y bibliotecas de marcas de funciones .
Feature Flags básicamente le brinda la capacidad de activar y desactivar una función sin realizar ningún cambio en el código o lanzar una nueva versión. Es una solución importante especialmente para los desarrolladores de aplicaciones móviles, ya que no tienen control sobre los usuarios para actualizar su aplicación a una nueva versión.
Hay varias empresas que ofrecen este servicio para desarrolladores de aplicaciones móviles.
En mi empresa utilizamos indicadores de funciones para cada función nueva que presentamos en nuestra aplicación SaaS. Además de los beneficios para el rendimiento, también nos permite implementar nuevas funciones gradualmente, introduciendo nuevas funciones a los usuarios avanzados primero, obteniendo comentarios de ellos e improvisándolas antes de que podamos implementarlas para todos los usuarios.
También nos permite personalizar la oferta para usuarios individuales: los usuarios avanzados quieren todas las funciones; los usuarios simples pueden querer lo básico y pueden confundirse con todas las poderosas funciones complejas. También permite a nuestro equipo de ventas realizar ventas adicionales.
Y, por supuesto, como han señalado otros, si encontramos que una característica está causando una degradación del rendimiento, podemos simplemente desactivar esa característica (ya sea para todos los clientes o para el cliente que está causando el problema).