Condições de corrida
Uma condição de corrida ocorre quando um resultado depende da sequência ou do tempo de vários eventos. Por exemplo, se a sequência desejada de eventos for “Evento A” e depois “Evento B”, mas às vezes o “Evento A” vem primeiro e outras vezes o “Evento B” vem primeiro, isso é conhecido como condição de corrida. Isso pode levar a resultados inesperados ou erros porque esses eventos competem para acessar recursos ou dados compartilhados.
No Braze, as condições de corrida podem ocorrer quando várias ações são disparadas ao mesmo tempo com base em dados de usuários ou eventos. Por exemplo, se um usuário disparar várias campanhas (como inscrever-se em um boletim informativo ou fazer uma compra), ele poderá não receber as mensagens na ordem correta.
Tipos de condições de corrida
Os tipos mais comuns de condições de corrida podem ocorrer quando você estiver fazendo o seguinte:
- Direcionamento a novos usuários
- Uso de vários endpoints de API
- Correspondência entre filtros de público e disparadores baseados em ação.
Considere os seguintes cenários e implemente as práticas recomendadas para evitar essas condições de corrida.
Cenário 1: Direcionamento a novos usuários
No Braze, uma das condições de corrida mais comuns ocorre com mensagens direcionadas a usuários recém-criados. A ordem esperada dos eventos é:
- Um usuário é criado;
- O mesmo usuário é imediatamente direcionado para uma mensagem, realiza um evento personalizado ou registra um atributo personalizado.
No entanto, em alguns casos, o segundo evento é disparado primeiro. Isso significa que uma mensagem está tentando ser enviada para um usuário que ainda não existe. Como resultado, o usuário nunca a recebe. Isso também se aplica a eventos ou atribuições, em que o evento ou atributo tenta ser registrado de usuários de eventos em um perfil de usuário que ainda não foi criado.
Melhores práticas
Introduzir postergações
Depois que um novo usuário é criado, é possível adicionar uma postergação antes de enviar qualquer campanha de direcionamento ou Canvas. Essa postergação permite que o perfil do usuário seja criado e que quaisquer atribuições relevantes sejam atualizadas, o que pode determinar sua elegibilidade para receber a mensagem.
Por exemplo, depois que um usuário se registra no seu app, você pode enviar uma oferta promocional após 24 horas. Ou, se estiver criando um usuário ou registrando um atributo personalizado, poderá adicionar uma postergação de um minuto antes de prosseguir com o processo para evitar essa condição de corrida.
Você também pode adicionar essa postergação no Braze SDK para o evento personalizado específico que dispara um novo usuário a entrar em um canva.
Cenário 2: Uso de vários endpoints de API
Usamos processamento assíncrono para maximizar a velocidade e a flexibilidade. Isso significa que, quando chamadas de API são enviadas para nós separadamente, não podemos garantir que elas sejam processadas na ordem em que foram enviadas.
Há alguns cenários em que vários endpoints da API também podem resultar nessa condição de corrida, como quando:
- Usar endpoints de API separados para criar usuários e disparar Canvas ou campanhas
- Fazer várias chamadas separadas para o endpoint
/users/trackpara atualizar atributos, eventos ou compras personalizados
Quando as informações do usuário são enviadas para o Braze usando o endpoint /users/track, elas podem ocasionalmente levar alguns segundos para serem processadas. Isso significa que, quando solicitações são feitas simultaneamente para os /users/track e os endpoints de envio de mensagens como /campaign/trigger/send, não há garantia de que as informações do usuário sejam atualizadas antes que uma mensagem seja enviada.
Se atributos e eventos do usuário forem enviados na mesma solicitação (seja do /users/track ou do SDK), então o Braze processa os atributos antes dos eventos ou de tentar enviar qualquer mensagem.
Melhores práticas
Ao usar vários endpoints, envie suas solicitações uma de cada vez
Se estiver usando vários endpoints, tente escalonar as solicitações para que cada uma seja concluída antes do início da próxima. Isso pode reduzir a chance de uma condição de corrida. Por exemplo, se for necessário atualizar as atribuições do usuário e enviar uma mensagem, primeiro espere que o perfil do usuário seja completamente atualizado antes de enviar uma mensagem usando um endpoint.
Se estiver enviando uma solicitação de API de mensagem programada, essas solicitações deverão ser separadas e um usuário deverá ser criado antes de enviar a solicitação de API programada.
Incluir dados-chave com o disparador
Em vez de usar vários pontos de extremidade, é possível incluir as atribuições do usuário e as propriedades do gatilho em uma única chamada de API usando o endpoint campaign/trigger/send.
Quando esses objetos são incluídos com o disparador, os atributos são processados primeiro, antes que a mensagem seja disparada, eliminando potenciais condições de corrida. Note que as propriedades do disparador não atualizam o perfil do usuário, mas são usadas apenas no contexto da mensagem.
Use o POST: Endpoint de rastreamento de usuários (sincronização)
Use o endpoint /users/track/sync/ para registrar eventos e compras personalizados e atualizar os atributos do perfil do usuário de forma síncrona. O uso desse endpoint para atualizar os perfis de usuário ao mesmo tempo e em uma única chamada pode ajudar a evitar possíveis condições de corrida.
This endpoint está atualmente em beta. Entre em contato com o gerente da sua conta Braze se estiver interessado em participar da versão beta.
Cenário 3: Correspondência de disparadores baseados em ação e filtros de público
Outra condição de corrida comum pode ocorrer se você configurar uma campanha baseada em ação ou o Canvas com o mesmo disparo que o filtro de público (como um atributo alterado ou a realização de um evento personalizado). O usuário pode não estar no público no momento em que realizar o evento de gatilho, o que significa que ele não receberá a campanha nem entrará no Canva.
Melhores práticas
Verifique seu público após uma postergação
Para evitar o uso de filtros de público que contenham os critérios de disparo, recomendamos verificar seu público antes da entrega. Por exemplo, você pode usar as validações de entrega nas etapas do Canva Message como uma verificação adicional para confirmar que seu público atende aos critérios de entrega no envio da mensagem. Você também pode aproveitar os critérios de saída do Canva para sair de qualquer usuário em qualquer ponto da jornada do usuário, se ele atender aos seus critérios.
Para campanhas, é possível usar eventos de saída para permitir que as campanhas com um evento de gatilho abortem o envio de mensagens aos usuários que realizarem o evento de saída durante a postergação.
Use filtros exclusivos com o evento de gatilho
Ao configurar seus filtros, talvez você queira adicionar um filtro redundante “por precaução”. No entanto, essa redundância pode levar a mais problemas. Em vez disso, evite usar qualquer filtro que contenha o disparador quando possível. Esse é o caminho mais seguro para evitar uma condição de corrida.
Por exemplo, se o disparo de sua campanha for “Fez uma compra” e o filtro do público for “Fez qualquer compra”, essa redundância poderá causar uma condição de corrida.
Evite filtros de público que presumam que o evento de gatilho foi atualizado
Essa prática recomendada é semelhante a evitar filtros redundantes com o evento de gatilho. Normalmente, um filtro que assume que o evento de disparo é atualizado no perfil do usuário falha.
Use Liquid aborts (somente atribuições)
Nas campanhas e etapas do Canva, use o Liquid aborts para evitar o uso de filtros de público que contenham os atributos de disparo na programação de entrada. Por exemplo, digamos que você tenha um atributo de matriz “cores favoritas” e queira direcionar qualquer usuário que atualize a matriz de atributos com qualquer valor e que também tenha a cor “azul” na matriz após a conclusão da atualização. Se você usar os filtros de público neste exemplo, encontrará uma condição de corrida e perderá os usuários que adicionarem “blue” na matriz pela primeira vez.
Nesse caso, é possível implementar uma postergação de disparo em uma campanha ou usar uma etapa do canva para permitir que o perfil do usuário seja atualizado por um período de tempo e, em seguida, usar a seguinte lógica de abortamento do Liquid:
1
2
3
4
{%assign colors={{custom_attribute.$(Favorite Color)|split:”,”}}%}
{%unless colors contains ‘Blue’%}
{%abort_message(Blue not present)%}
{%endunless%}
Confirme como os dados do usuário estão sendo gerenciados
Se houver uma condição de corrida durante a avaliação de entrada no canva, os usuários podem entrar em um canva que não deveriam ter entrado. Por exemplo, o perfil do usuário pode ser configurado para ser incluído no público e, subsequentemente, atualizado após o canva ter enfileirado os usuários para não serem mais elegíveis no público.
Se um usuário disparar o evento de entrada no canva várias vezes dentro do mesmo segundo, o Braze permite apenas uma entrada para aquele segundo (mesmo que a reentrada esteja habilitada). Isso previne entradas duplicadas, então o número total de entradas no canva pode ser menor do que o total de eventos de disparo.
Recomendamos confirmar como os dados do usuário são gerenciados e atualizados, especificamente quando e como atributos específicos são atualizados, como por SDK, API, API em lote e outros métodos. Isso pode ajudar a identificar e esclarecer por que um usuário entrou em uma campanha ou canva em vez de quando o perfil de um usuário foi atualizado.
Editar esta página no GitHub