Saltar a contenido

0. Introduccion

Conceptos Previos

  • Flag: Es un valor variable y gestionado en una plataforma remota. Nuestra aplicación la consultará para saber que comportamiento realizar en cada ejecución. Aunque su tipo generalmente usado es Boolean (true/false) tambien puede tener un valor numerico o de cadena de texto.

  • Context: El valor de una flag es calculado en base a un contexto de ejecución. Es decir una flag llamada “applyDiscount” puede tener un valor true para un usuario A, pero para un usuario B tener un valor false. La información del usuario que hace la compra es lo que llamamos contexto. Las invocaciones al servicio LaunchDarkly deben informar del contexto de ejecución.

  • Segmento: Son el conjunto de reglas que analizarán el contexto de ejecución y en base a ello devolvera un valor u otro para una misma flag.

1. Instalacion

Si se quiere conectar a LaunchDarkly a traves del LD-Relay puedes usar este ejemplo de Dockerfile

1.1 Maven dependency

Añadir la dependencia

<dependency>
  <groupId>com.launchdarkly</groupId>
  <artifactId>launchdarkly-java-server-sdk</artifactId>
  <version>7.0.0</version>
</dependency>

Inicializarlo

LDClient client = new LDClient("sdk-key-123abc");

Uso basico:

LDContext context = LDContext.builder("context-key-123abc")
  .name("Sandy")
  .build();

boolean flagValue = client.boolVariation("flag-key-123abc", context, false);

if (flagValue) {
  // Application code to show the feature
}
else {
  // The code to run if the feature is off
}

2. Usando LaunchDarkly Relay

version: '3.7'

networks:
  featureflags-demo-network:
    name: feature-flags-demo-network

services:
  ld-relay:
    image: launchdarkly/ld-relay
    environment:
      STREAM_URI: https://stream.eu.launchdarkly.com
      BASE_URI: https://sdk.eu.launchdarkly.com
      EVENTS_HOST: https://events.eu.launchdarkly.com
      LD_ENV_test: ${APIkey_for_test_env}
      LD_ENV_itg: ${APIkey_for_itg_env}
      LD_ENV_prod: ${APIkey_for_prod_env}
      USE_EVENTS: "true"
    ports:
      - "8030:8030"
    networks:
      - featureflags-demo-network

3. LaunchDarkly SaaS

3.1 FLAGS

Vamos a crear la flag is-car-winner, vamos a la seccion Flags o pulsamos el boton Create

Elegimos el fiendlyName y la key que tendra la flag is-car-winner

./images/tuto-flag-creation.png

Pulsamos en Create Flag y nos lleva a la vista general de la Flag donde indica que para todo el trafico esta sirviendo el valor False, ya que no esta activada:

./images/tuto-flag-review.png

3.2 SEGMENTOS

Vamos a crear un segmento, que es un conjunto de reglas que rigen cual es el valor de la flag para cada ejecucion.

Vamos a la seccion Segments y pulsamos en Create Segment. En el wizard tenemos 2 opciones de crear Segmentos:

./images/tuto-create-segment.png

3.2.1 List-Based Segments

Es la configuracion mas sencilla ya que unicamente crea una regla en la que comprueba que el key del contexto tenga un valor que este dentro de la lista.

Creamos el segmento

./images/tuto-segment-creation.png

Por defecto ya nos ha creado una regla que se configura con includedkeys y excludedKeys.

Vamos a añadir el nombre de contexto demotest-feature-flag-app a los incluidos, incluyendolo en la caja de texto y pulsando en Add :

./images/tuto-list-based-add-rule.png

Pulsamos en Save.

Asociamos el Segmento a la Flag

En la parte de arriba vemos la advertencia

./images/tuto-segment-to-flag.png

Pulsamos en Target this segment y seleccionamos la flag de la lista

./images/tuto-flag-segment-asociation.png

Pulsamos en Target para guardar los cambios.

En la pantalla resumen de la flag podemos ver un diagrama de trafico que nos indica que como la flag no esta activada, no se evaluaran los segmentos ni reglas

./images/tuto-flag-pre-activation.png

Vamos a activar la flag seteandola a On, al activarla recupera la regla que creamos en la segmentacion y nos pide que indiquemos cual el valor de la flag si al evaluar el contexto contra el segmento es favorable. Le indicamos que para ese caso devuelva true y modificamos la Default rule para que sirva por defecto Off, de esta manera la flag solo devolvera true para los contextos que esten en el segmento que hemos creado.

./images/tuto-flag-segment-finish.png Pulsamos en Review and Save ya tendriamos la flag activada y segmentada.

3.2.2 Rule Based

Vamos a crear otra regla is-bicycle-winner

./images/tuto-is-bicycle-winner-flag.png

Esta segmentacion nos da un grado mas fino para las validaciones. Este enfoque esta basado en los contextValues que mandamos. Puede tener varias rules sobre distintos valores de un contexto para ejecutarse.

Creamos una nueva rule y elegimos Rule-Based en el wizard

./images/tuto-create-segment.png

Vamos a crea un segmento basado en 2 reglas: - la edad de la persona, en base a si es mayor o no a 18 años - el nombre de la persona empieza por “D”.

Nos quedará así:

./images/tuto-rule-based.png

Activamos la flag y setemos la Default Rule a false y la Rule 1 a true condicionada al segmento users-age-and-letter-match

./images/tuto-isflag-winner2.png