Modo de desarrollo de próxima generación basado en Feature Flag

Frente a una iteración rápida, ¿cómo reducir el riesgo de estar en línea? El equipo de ByteDance DataTester encontró un equilibrio entre el riesgo y la iteración: lanzamiento incremental.

La entrega progresiva se considera la forma de entrega continua de última generación, que se centra en mejorar el control del proceso de lanzamiento y reducir los riesgos de lanzamiento, lo que en última instancia mejora los ingresos generales. Los gigantes tecnológicos internacionales como Amazon, Google y Netflix ofrecen miles de actualizaciones de funciones, correcciones de errores y más a los entornos de los usuarios todos los días a través de lanzamientos incrementales.

Mientras se itera rápidamente, es inevitable introducir algunos errores inesperados. Por lo tanto, es particularmente importante encontrar un buen equilibrio entre riesgo y rentabilidad sobre cómo utilizar las herramientas adecuadas. En la actualidad, la versión continua (CD) puede monitorear las funciones implementadas a través de algunos datos de usuario, monitoreo del sistema o algunos indicadores centrales, y retroceder en el tiempo cuando se encuentran problemas, formando así un circuito cerrado iterativo continuo. Pero cuando el volumen de usuarios es muy grande, un pequeño problema puede causar pérdidas incalculables, lo cual es inaceptable.

Con el fin de encontrar un equilibrio entre el riesgo y la iteración, el método de liberación incremental se ha propuesto gradualmente y se le ha prestado mucha atención.

¿Qué es la liberación progresiva?

La liberación progresiva tiene dos características: control de progreso de liberación y autorización de etapa de liberación.

Entre ellos, el control del progreso de la versión consiste en enviar nuevo software o funciones a los usuarios a un cierto ritmo, y el ritmo de la versión puede ser continuo o paso a paso, para controlar el alcance efectivo cada vez. Este enfoque se basa en los principios básicos de la entrega continua, que consiste en separar la "implementación de código" de la "versión de características".

La autorización en la fase de lanzamiento se refiere a delegar la autoridad operativa de la función a diferentes equipos en diferentes etapas, como transferir lentamente la propiedad de la función de ingeniería a producto, y luego de gestión de producto a marketing, etc.

La combinación del control del cronograma de lanzamiento y la autorización de la fase de lanzamiento reduce los riesgos asociados con la entrega continua y brinda a los equipos más control sobre todo el ciclo de lanzamiento.

La diferencia entre liberación continua y liberación progresiva

La integración continua y el lanzamiento continuo (CI/CD) enfatizan que el código de la rama principal debe mantenerse en un estado desplegable en todo momento, lo que requiere que la rama de desarrollo de características se fusione con la rama principal continuamente, en lugar de esperar a que semana o incluso semanas Todas las características se desarrollan y prueban completamente antes de fusionarse en la rama principal. El propósito de CI/CD es acelerar la velocidad y la eficiencia del desarrollo y la implementación de software, implementar nuevas funciones lo antes posible y reducir los riesgos tanto como sea posible.

Aunque CI/CD puede acelerar la entrega de software y funciones, los riesgos asociados con él no se eliminan por completo. Cuando todas las funciones se lanzan al entorno de producción al mismo tiempo, si hay errores graves que no se pueden encontrar a tiempo, los resultados serán impredecibles. Si bien la versión canary en el modelo CI/CD puede controlar el alcance del impacto de un error, se basa en un sistema de control más complejo. Por lo tanto, los sistemas de CI/CD en la mayoría de los escenarios no son estrictamente de integración continua y entrega continua. En la mayoría de los casos, se desarrollan en función de ramas de características y luego se fusionan en la rama principal en el momento adecuado y se lanzan juntos.

El método de lanzamiento progresivo oculta nuevas funciones en un indicador de características y puede controlar de manera flexible el proceso de lanzamiento a través de una interfaz visual. Esta es una diferencia clave entre el lanzamiento progresivo y el formulario CI/CD actual. Su diagrama esquemático. Además, hay funciones como apagado con una tecla, parámetros efectivos de emergencia, control de flujo y monitoreo.Cuando hay un problema, no es necesario volver a implementar el código, y la función se puede revertir presionando el botón, por lo tanto reducir al máximo posible el alcance de la influencia en caso de fallo. Se puede decir que la liberación incremental es un concepto de liberación nacido para resolver problemas de liberación y mejorar la estabilidad de la liberación.

Entonces hay tantas ventajas de la liberación progresiva, pero es muy complicado desarrollar un sistema de control de forma independiente ¿Hay alguna plataforma fácil de usar que se pueda usar? La respuesta es Sí. En la prueba A/B de Volcano Engine, la versión inteligente de FeatureFlag se enfoca en pulir la plataforma de versión y realiza una vinculación completa con la prueba A/B, que será una buena opción.

¿Qué es la plataforma de publicación inteligente FeatureFlag?

Feature Flag es Feature Toggle, como su nombre lo indica, su esencia es una lógica de control oculta en el código comercial. Aunque parece ser una lógica if else simple, tiene una función muy poderosa en el campo de la publicación, que puede realizar un control dinámico de las funciones en el entorno de producción sin volver a implementar el código; además, también puede realizar un control flexible del tráfico efectivo y público objetivo.

La función FeatureFlag de prueba A/B de Volcano Engine se basa en un motor de publicación inteligente avanzado y una plataforma de alojamiento de configuración integral para cumplir con diferentes escenarios de aplicaciones, como la publicación empresarial en escala de grises, las pruebas A/B y la publicación diferenciada dirigida. Ayude al personal de desarrollo, producto, operación y mantenimiento a iterar nuevas funciones y corregir errores en un entorno de bajo riesgo para lograr un desarrollo eficiente y ágil. Sus objetivos principales son garantizar la calidad de las iteraciones de la aplicación, ayudar a optimizar la eficiencia del desarrollo y respaldar escenarios comerciales refinados y el empoderamiento de la matriz de productos.

Cómo implementar la liberación progresiva basada en FeatureFlag

Si una buena plataforma quiere ser fácil de usar, debe encontrar un equilibrio entre la complejidad funcional y la simplicidad de interacción. Por lo tanto, para reducir el umbral de uso, la configuración de la función Feature Flag actualmente solo necesita cuatro pasos para completar la configuración de los parámetros requeridos. El proceso de configuración se presentará brevemente a continuación.

01 - Configuración de información básica

Los parámetros requeridos en la información básica incluyen el nombre de la función, la tecla correspondiente a la función (es decir, el interruptor correspondiente a una función) y el tipo de terminal. El lado del servidor y el lado del cliente son solo ligeramente diferentes cuando están integrados, pero las operaciones son las mismas cuando se usan en la plataforma. Por lo tanto, solo necesita completar algunos parámetros requeridos y el primer paso está completo.

¿Qué son las variantes? De hecho, se puede entender fácilmente que la tecla de función se usa para identificar la función, y el valor de la variante es el valor correspondiente a la tecla de función, que corresponde a los datos en el código para controlar la lógica si no. Actualmente, Feature Flag admite cuatro tipos de configuraciones de parámetros, que se pueden usar según sea necesario.

Como sugiere el nombre, la audiencia de lanzamiento se utiliza para controlar el alcance efectivo de la configuración actual y se divide en tres partes. La lista blanca de audiencia es la condición de audiencia con la prioridad más alta. Si se habilita una lista blanca para un usuario, el valor correspondiente a la variante se aplicará primero a ese usuario. Las reglas de audiencia personalizadas pueden seleccionar audiencias objetivo de manera flexible en función de los atributos del usuario. Estos parámetros están relacionados con los atributos informados por los usuarios. Por ejemplo, en la captura de pantalla, los usuarios cuyo canal es la tienda de aplicaciones y el navegador es Chrome se aplicarán a la variante 2. Para los usuarios que no cumplan con los criterios anteriores, se aplicará la variante 1 de la regla final predeterminada.

En la actualidad, si la función APM Insight está habilitada, puede seleccionar algunos indicadores de rendimiento predefinidos como indicadores de monitoreo aquí. Puede monitorear a los usuarios en línea actuales en tiempo real de acuerdo con el estado de la versión y retroceder en el tiempo si ocurren problemas. Por ejemplo, la siguiente figura muestra el monitoreo de la tasa de error JS y los resultados de eventos de alarma agregados.

02 - Control de progreso de liberación

Para realizar el control flexible del progreso de liberación en la liberación progresiva, actualmente se admiten funciones como liberación manual, liberación temporizada, fuera de línea automático, cierre con una sola tecla, liberación direccional y liberación aleatoria. Se introducen de la siguiente manera.

Liberación incremental manual

Los usuarios pueden ajustar manualmente el flujo de publicación actual, logrando así el control del alcance de la publicación.

escena aplicable

  • Se lanza la nueva función, y es necesario controlar cuidadosamente el alcance y el efecto efectivo
  • La cadencia de lanzamiento de funciones no puede ser controlada por tiempo

Lanzamiento automático programado

En la liberación automática temporizada, puede configurar la validez del tráfico de acuerdo con la línea de tiempo por adelantado, y automáticamente tendrá efecto para los usuarios en un rango de tráfico específico después de que se acabe el tiempo.

escena aplicable

  • Eventos festivos, las configuraciones relacionadas deben tener efecto en un momento específico

Cerrar con un clic

Feature Flag puede ayudar a los usuarios a probar los efectos de las nuevas funciones en el entorno de producción y puede controlar rápidamente el estado de las nuevas funciones a través de interruptores para minimizar el impacto de los problemas de las nuevas funciones en el entorno en línea. Tradicionalmente, la modificación de los problemas encontrados después del lanzamiento de nuevas funciones a menudo requiere la modificación del código y la redistribución de los servicios, lo que a su vez hace que los servicios no estén disponibles durante un período de tiempo, y este proceso suele ser más complicado que el control de los conmutadores. Detrás de esta tecnología está el uso de diferentes ramas lógicas. Cuando se activa la bandera de función, ciertas funciones se activan y, de lo contrario, ciertas funciones se desactivan.

Por ejemplo, si una interfaz optimiza un tablero Kanban, puede configurar la clave de función para permitir que algunos usuarios experimenten primero la nueva función Kanban, mientras que los otros usuarios mantienen la misma. De esta manera, se puede juzgar que esta función es estable. al sistema de acuerdo con el efecto en línea.Impacto sexual, pero también para evitar que los errores en el nuevo Kanban afecten al usuario en general. En el código, es posible que deba usar el siguiente código por adelantado:

if (isFeatureEnabled('new_dashboard')) { // verdadero o falso showNewDashboard(); ​ } else { ​ mostrarTableroExistente(); ​ }

Lanzamiento dirigido

El lanzamiento dirigido significa que las nuevas funciones específicas surten efecto solo para usuarios específicos. Los indicadores de función pueden controlar nuevas funciones para que surtan efecto solo para un pequeño rango de usuarios a través de la agrupación de usuarios o audiencias objetivo automáticas.

Por ejemplo, un Kanban recién lanzado solo tendrá efecto para los usuarios cuyo canal sea la tienda de aplicaciones. Su código es el siguiente:

if (isFeatureEnabled('channel', 'app store')) { // verdadero o falso showNewDashboard();
} más { mostrar el tablero existente ();
}


 escena aplicable

  • Por ejemplo, algunos usuarios ya son fanáticos antiguos y tienden a experimentar las nuevas funciones del producto lo antes posible, por lo que puede crear un grupo de usuarios de prueba interno basado en esto, y las nuevas funciones se enviarán primero a estos usuarios. Los usuarios beta internos a menudo pueden proporcionar comentarios sobre las nuevas funciones lo antes posible y luego realizar ajustes funcionales de manera oportuna.
  • Para las empresas internacionales, las funciones en línea en diferentes países pueden seleccionar diferentes usuarios a través de los países y luego personalizar el desarrollo de funciones para diferentes regiones.
  • Las nuevas funciones se pueden probar con usuarios gratuitos para ver cómo funcionan.

liberación aleatoria

Liberación aleatoria significa extraer una parte del tráfico de todos los usuarios en línea para su verificación, como se muestra en la siguiente figura.

escena aplicable

  • Las nuevas funciones se lanzarán gradualmente y la cantidad total se lanzará en la fecha especificada, lo que reduce en gran medida el riesgo. Incluso si hay un problema, solo afectará a una pequeña cantidad de usuarios y se puede revertir en tiempo.
  • Los cambios arriesgados se activan (como migraciones de infraestructura, migraciones de datos, refactorizaciones importantes o cambios de infraestructura) con poco o ningún impacto negativo en su producto o negocio.
  • Los problemas como el rendimiento se exponen de antemano, y los cambios futuros en el rendimiento del servicio se pueden predecir a través de los datos de una parte del tráfico, para no causar que el servicio deje de estar disponible debido al lanzamiento de nuevas funciones.

03 - Autorización de fase de publicación

La autorización de la fase de liberación es otra característica de la liberación progresiva, por lo que también se admite en FeatureFlag. La autorización de la etapa de publicación específica incluye principalmente dos partes: la gestión de derechos y la gestión del flujo de trabajo.

gestión de autoridad

En combinación con el sistema de cuentas, se pueden establecer permisos para cada función por rol y usuario. Si una característica aún se encuentra en las primeras etapas de prueba, solo puede habilitar permisos para usuarios cuyas funciones sean I+D, etc. Entregar gradualmente el control de permisos a preventas u operaciones, y concretar la separación de funciones online y efectiva.

Gestión de flujo de trabajo

La gestión del flujo de trabajo puede controlar el proceso de lanzamiento. En diferentes etapas de lanzamiento, se pueden introducir diferentes roles o usuarios para su revisión, y el alcance de la autorización de cada etapa de lanzamiento se puede ajustar de manera flexible para garantizar la capacidad de control del proceso de lanzamiento.

¿Cuáles son los escenarios de aplicación de la publicación inteligente FeatureFlag?

FeatureFlag tiene muchos escenarios de aplicación. En función de su capacidad de lanzamiento progresivo, puede acelerar el proceso de iteración del producto y mejorar la estabilidad del servicio. A continuación se describen los escenarios de aplicación comunes desde varios aspectos.

01 - Nueva función de escala de grises lanzada

La versión de lanzamiento de la nueva función puede expandir gradualmente el volumen, permitir que un pequeño número de usuarios experimente la nueva función primero, observar los comentarios de los usuarios y el rendimiento de los datos, y luego expandir inicialmente el volumen y encontrar problemas ocultos a tiempo para detener rápidamente las pérdidas, como se muestra en la figura de abajo.

  • Paso 1 Prueba de lista blanca + prueba interna + prueba pública
    Antes de lanzar la nueva función, use primero la prueba de lista blanca y permita que los usuarios internos y los usuarios de prueba pública externa participen en la verificación y se ejecuten durante un período de tiempo para garantizar la estabilidad.
  • Paso 2 Después de pasar la prueba interna de la revisión de la versión, invite a otras personas del grupo a participar en la revisión y luego continúe con la escala de grises de seguimiento después de pasar la revisión.
  • Paso 3: escala de grises de tráfico + liberación incremental
    : se prefiere un 1% de tráfico pequeño, y no hay problema para ajustar gradualmente la relación de tráfico y aumentar el volumen en escala de grises. Se encontraron problemas durante el proceso de tráfico pequeño y revertimos la configuración a tiempo para que la configuración de la versión anterior tuviera efecto. Después de la reparación, la nueva versión se lanzará gradualmente.  

02 - FeatureFlag conectado con pruebas A/B

Superar las pruebas A/B es una característica importante de la función FeatureFlag de Volcano Engine La combinación perfecta de las dos acelerará en gran medida la velocidad de iteración y la eficiencia del producto. Los escenarios específicos se pueden dividir en las siguientes tres partes:

  • Una vez que el experimento A/B produce una versión ganadora, el experimento se puede solidificar directamente en una característica para lograr un experimento A/B rápido a gran escala, y se puede lanzar una versión a gran escala más robusta en escala de grises.
  • Después de crear la función en la publicación inteligente de FeatureFlag, el experimento A/B se puede iniciar directamente desde la función para realizar rápidamente la apertura y la gestión posterior del experimento.
  • Los parámetros de los experimentos A/B se pueden solidificar en funciones, que se pueden colocar en FeatureFlag para una gestión unificada de lanzamiento inteligente, y el producto puede ver globalmente la relación entre las versiones de funciones y los experimentos.

Entonces, las pruebas A/B y FeatureFlag se pueden transformar entre sí, ¿cuál es la relación entre ellos y cómo se deben elegir los escenarios de uso?

La prueba A/B es una prueba de efecto (generalmente se usa para verificar si una idea cumple con las expectativas). Al mismo tiempo, existen múltiples versiones de funciones que brindan servicios al mundo exterior. Estas funciones son servicios que se han probado lo suficiente para cumplir los estándares en línea Hay diferencias pero no viejos y nuevos. Se centra en el efecto real de las diferentes características de la versión, como la tasa de conversión, la retención, etc. Su propósito es verificar que la dirección iterativa del producto es correcta.

Feature Flag enfatiza la estrategia de lanzamiento. El objetivo es garantizar la estabilidad del sistema recién lanzado. Se enfoca en los errores, los riesgos de rendimiento y la estabilidad del nuevo sistema, y ​​enfatiza que la existencia de problemas se puede encontrar antes en el proceso de lanzamiento. .

El proceso de selección de Feature Flag y A/B testing puede consultar la siguiente figura.

03 - Alarma inteligente de monitoreo anormal

En la actualidad, la versión inteligente de FeatureFlag se ha conectado con la supervisión del rendimiento de la aplicación APM, que puede realizar la supervisión desde la aplicación->Característica->Nivel de bandera. Cuando ocurre una anomalía en un indicador técnico monitoreado, se activa automáticamente una alarma para encontrar rápidamente problemas anormales en línea. Soporte de seguimiento para indicadores técnicos del lado del servidor.

  • La combinación flexible de indicadores hace que el seguimiento sea más cómodo.
  • Agregación de eventos de alarma para mejorar el monitoreo
  • La verificación de validez + ACK hace que el monitoreo sea más efectivo. 

04 - Miles de personas y miles de rostros - liberación diferenciada de la multitud

En función de las condiciones flexibles de la audiencia objetivo personalizada en FeatureFlag, diferentes usuarios pueden emitir diferentes parámetros de configuración y se puede realizar una publicación flexible.

  1. Las funciones se pueden mostrar de acuerdo con las características de los diferentes grupos de personas, como los usuarios de Android que recomiendan el inicio de sesión de QQ, los usuarios de IOS que recomiendan el inicio de sesión de WeChat, para mejorar la experiencia personalizada de los diferentes grupos de personas.
  2. Al operar actividades, se pueden adoptar estrategias de operación diferenciadas para diferentes regiones y grupos para lograr una operación refinada de grupos subdivididos.
  3. Personalice los parámetros de la audiencia objetivo para satisfacer las necesidades de la publicación dirigida personalizada.

05 - Mejorar la integración continua y las capacidades de implementación continua

CI/CD permite a los desarrolladores desarrollar, iterar y lanzar nuevas funciones rápidamente. Implementación continua (en línea con las prácticas de software empresarial, es una evolución natural de los principios bien establecidos de integración continua. Sin embargo, los casos de integración e implementación continuas son muy raros, probablemente debido a la necesidad de una gestión compleja y al temor de fallas en la implementación que afectan la disponibilidad del sistema.

En la actualidad, durante el proceso de desarrollo, los desarrolladores extraerán nuevas ramas de la rama de desarrollo para desarrollar sus propias funciones nuevas y luego las fusionarán con la rama principal después de completar la prueba completa, de modo que se pueda garantizar que la rama principal esté en línea en cualquier momento. Sin embargo, existen algunos problemas con este método de desarrollo, por ejemplo, cuanto más se bifurca la rama, más difícil es fusionar el código. Una vez que hay ramas en el código base, ya no hay una integración continua real. Por supuesto, puede crear un CI correspondiente para cada rama, pero solo puede probar la exactitud de la rama actual. Si la función se modifica en una rama, pero aún se usa de acuerdo con la suposición original en otra rama, se introducirán errores al fusionarse y tomará mucho tiempo corregir estos errores.

El proceso de CI basado en Feature Flag se muestra en la siguiente figura. El código desarrollado se puede fusionar en la rama troncal en cualquier momento, y las funciones no desarrolladas son invisibles para los usuarios a través del interruptor Feature Flag; se pueden lanzar nuevas funciones por adelantado y roles como productos u operaciones se pueden controlar mediante el interruptor cuando y qué La nueva función tiene efecto en el alcance; la reparación de problemas en línea se puede verificar controlando el alcance de la versión y utilizando el tráfico en línea.

  1. Para acelerar aún más el proceso de CI/CD, la rama principal se puede implementar en cualquier momento, lo que mejora la eficiencia de la iteración.
  2. La separación del lanzamiento de funciones y la implementación de código, ocultando nuevas funciones a través de banderas, por un lado, es conveniente para las pruebas de tráfico pequeño en línea, por otro lado, los productos u operaciones pueden habilitar funciones según sea necesario, y no hay necesidad de preguntar para que I+D se programe, mejorando la eficiencia de la colaboración. 

Resumir

La publicación continua ha desempeñado un papel importante en el desarrollo de las empresas de software modernas, pero es muy peligroso realizar una publicación continua sin agregar los controles necesarios. El método de lanzamiento incremental agrega suficiente control a todo el proceso de lanzamiento e integra la autorización de la fase de lanzamiento, lo que puede reducir en gran medida los problemas que puede causar la implementación continua.

El lanzamiento inteligente de FeatureFlag puede ayudar más fácilmente a los usuarios a lograr un lanzamiento gradual, reducir los problemas y lanzar los riesgos introducidos en el proceso de iteración del producto y, en última instancia, mejorar la velocidad de iteración con la premisa de reducir los riesgos. Iteración rápida, seguridad garantizada y control en tiempo real, esa es la función de publicación inteligente de FeatureFlag para las pruebas A/B de Volcano Engine.

**Portal de experiencia de funciones: [Volcano Engine FeatureFlag]

**Para obtener más información, haga clic en: [Centro de ayuda de versión inteligente de la función Volcano Engine]

Prueba A/B del motor Volcano

Pruebas A/B, eliminando las conjeturas, midiendo los beneficios de la toma de decisiones con experimentos científicos, creando mejores productos y haciendo que cada paso del negocio conduzca al crecimiento.

En la actualidad, Volcano Engine lanzó por primera vez el impulso de crecimiento "Tinder Plan". Como uno de los productos del "Tinder Plan", la prueba A/B de Volcano Engine le proporcionará 200 millones de eventos y 50,000 MAU gratis, así como hasta 12 meses de derecho de uso. [Portal de experiencia]

Bienvenido a prestar atención a la cuenta pública del mismo nombre de **"Byte Beat Data Platform"**

{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/5588928/blog/5516607
Recomendado
Clasificación