Tarantool: olhar do analista

Olá a todos! Meu nome é Andrey Kapustin. Eu trabalho como analista de sistemas no Mail.ru Group. Nossos produtos formam um ecossistema único para o usuário, no qual os dados geram muitas infraestruturas independentes: serviços de pedidos de táxi e comida, serviços de correio, redes sociais. Hoje, quanto mais rápido e mais preciso podemos prever a necessidade do cliente, mais rápido e mais preciso podemos oferecer a ele nossos produtos.

Muitos analistas de sistema e engenheiros agora estão fazendo perguntas:

  1. Como projetar uma arquitetura de plataforma de gatilho para marketing em tempo real?
  2. Como organizar uma estrutura de dados que atenda aos requisitos de uma estratégia de marketing para interagir com os clientes?
  3. Como garantir a operação estável de um sistema assim com cargas muito altas?

Esses sistemas são baseados no processamento de alta carga e na análise de big data. Adquirimos uma experiência considerável nessas áreas. E, como exemplo de uma história real, falarei sobre nossa abordagem de análise e desenvolvimento de soluções no campo de Marketing em Tempo Real usando Tarantool.

Certa vez, uma grande operadora de telecomunicações procurou nossa ajuda.

A tarefa era esta:

Temos mais de 100 milhões de assinantes. Sabemos muito sobre eles: saldo atual, volume de tráfego, serviços conectados, viagens, lugares favoritos. Usamos as informações da maneira que podemos: coletamos dados durante o dia, colocamos enormes quantidades de informações no repositório (DataLake). Começamos os manipuladores à noite, pela manhã criamos campanhas publicitárias e enviamos ofertas.

E queremos fazer a mesma coisa em tempo real!

Por quê? Como quanto mais rápido o operador de telecomunicações processa as informações, mais dinheiro elas podem ganhar. Por exemplo, em compras por impulso: um usuário passa por um café na hora do almoço e, em seguida, recebe um desconto em seu telefone para que ele escolha esse café em particular. Ou seja, você precisa "apenas" oferecer o produto certo no momento certo e ajudar a responder imediatamente à oferta de maneira conveniente.



O que você precisa para resolver um problema de negócios:

  • Você pode determinar a necessidade através do perfil do cliente.
  • Determine o momento - de acordo com os eventos da vida humana.
  • Estimular feedback - escolhendo o canal de comunicação ideal.

Isso é chamado de marketing em tempo real. No que diz respeito ao setor de telecomunicações, enviar mensagens personalizadas relevantes aos assinantes no momento certo, com a capacidade de responder IMEDIATAMENTE a uma oferta. As propostas podem ser formadas para o grupo-alvo e para um usuário específico, enquanto a solicitação deve ser processada em tempo real em qualquer caso.

Do ponto de vista técnico, devemos resolver os seguintes problemas:

  • Manter dados atualizados de mais de 100 milhões de assinantes;
  • Processamento de fluxo de eventos em tempo real a uma carga de 30.000 RPS;
  • Formação e roteamento de ofertas direcionadas aos assinantes com o cumprimento de requisitos não funcionais (tempo de resposta, disponibilidade, etc.);
  • Conexão perfeita de novas fontes de dados heterogêneos pelos assinantes.

"Tempo real", neste caso, significa processar informações em 30 segundos. Não faz sentido mais, o momento é perdido, o cliente se foi. E o mais triste é que, em tal situação, não ficará claro por que (?) - propusemos a coisa errada ou não conseguimos a tempo?

Obter a resposta para esta pergunta é muito importante para o desenvolvimento do produto:

  1. Promoção de marketing de seus produtos: teste hipóteses, aumente a receita.
  2. Atraímos clientes em potencial: investimos em publicidade, capturamos o mercado.
  3. Conectamos serviços ou serviços adicionais: expandimos a linha de produtos.

É fácil cometer erros em todas as etapas. E o preço do erro é ótimo. Devemos vencer com rapidez e precisão! E para isso, as informações do cliente devem estar completas e atualizadas. Nesse caso, as informações realmente valem o dinheiro!

Afinal, quanto mais soubermos sobre nossos clientes, mais ganharemos. Isso significa que adicionar cada novo parâmetro ao perfil do cliente aumenta a precisão da segmentação. Mas este é um processo contínuo porque:

  1. A base de clientes está em constante crescimento.
  2. A gama de serviços está em expansão.

Em tais condições, é muito eficaz segmentar a base de clientes. Nesse caso, decidiu-se usar o mecanismo de estratificação - classificação multivariada de assinantes.

Simplificando, distinguimos grupos específicos de assinantes (estratos) por faixas de valores de um número ilimitado de atributos. Nesse caso, o assinante deve alterar automaticamente o estrato imediatamente após a transição do valor do atributo para o intervalo correspondente.

A figura abaixo é um exemplo de um modelo tridimensional de estratificação desde a infância. Uma bola é um assinante.



Para cada cliente, podemos calcular quanto gastaram em atraí-lo, quanto ganharam e como. Ou seja, sabemos quanto custa a informação e quanto perdemos se não a atualizarmos.

Eles contaram e decidiram - é necessário atualizar! E imediatamente surgem problemas: sempre falta alguma coisa. Em cada projeto, novos requisitos vêm do cliente que contradizem o TK, a arquitetura, o outro e ... o senso comum. Manter a integridade e a relevância dos dados está se tornando mais difícil a cada dia. Novas fontes de informações aparecem com novos atributos que não são claros onde armazenar e como processar.

Deve-se ter em mente que quanto mais normalizadadados, mais restrições, diretórios, verifica neles. Qualquer um que tente adicionar alguns campos à tabela "em movimento" sabe que tipo de "pintor" é: não se encaixa no modelo de dados atual! E como o cliente pode explicar que, se você adicionar um novo campo, terá que reescrever metade do código do projeto ?! "Recolhemos" ou "descartamos" as análises "extras" na entrada e, como resultado, não podemos formar ofertas relevantes.

Colegas ocidentais chamam esse efeito de "merda dentro - merda fora".

Como resultado, os dados ocupam mais espaço e são mais difíceis de processar. Com o aumento da quantidade de informações, isso se torna crítico, porque a velocidade de processamento da transação diminui. E nosso objetivo é processar cada solicitação por não mais que um minuto, com uma carga de 30.000 solicitações por segundo.

Conclusão: para marketing em tempo real, normalizaçãonão é adequado para mais de 100 milhões de assinantes.

Chegamos a uma solução na forma de um perfil de cliente universal. Está no armazenamento de valores-chave, portanto não podemos consertar a estrutura de dados. Cada coluna é uma chave e um valor, que podem ser qualquer coisa.

Temos uma combinação de:

  • Atributos estáticos que raramente são atualizados (nome, passaporte, endereço). Bloco obrigatório com identificação.
  • E uma cauda dinâmica de comprimento arbitrário - dados atualizados frequentemente que dependem da fonte. Vários blocos independentes para cada fonte.

Essa abordagem é chamada desnormalização. Quão conveniente é isso?

  1. A "cauda" pode não ser validada.
  2. Nós salvamos os dados "brutos" como estão sem processamento.
  3. Salvamos todas as informações recebidas, não perdemos nada.
  4. ID , .
  5. ( 2-3 ), .
  6. : .


Agora você precisa selecionar uma ferramenta para implementação. Isso geralmente é feito pelo arquiteto de acordo com os requisitos que o analista reuniu. É muito importante descobrir a NFT - a quantidade esperada de dados e o nível de carga. Depende de quais métodos de armazenamento e processamento de dados usaremos.

O cabeçalho deste capítulo indica que nosso serviço processará muitos dados. E muito - quanto? Vamos descobrir.

Os dados podem ser considerados grandes se o relacionamento não for visível a eles a olho nu.

Processamos mais de 100 milhões de perfis de clientes diferentes, que contêm informações não estruturadas, são frequentemente atualizados e usados ​​- trata-se de um grande volume de dados.

Você precisa armazenar em cache os perfis atuais de clientes. Sem armazenar dados quentes na RAM, o processamento em tempo real não pode ser alcançado.

Carga elevada


Agora vamos lidar com a intensidade da carga, ou seja, com o número de solicitações. O termo "carga alta" é usado para descrever situações em que o equipamento deixa de suportar a carga.

Processamos diferentes tipos de eventos que ocorrem continuamente com uma intensidade de 10 a 30 mil solicitações por segundo. Nesse caso, é usada uma lógica de negócios complexa e a velocidade da reação é crítica. Obviamente, estamos projetando um serviço altamente carregado, que deve ser escalado dinamicamente, dependendo da carga instantânea.

Tarantool como acelerador


Nós do Mail.ru Group usamos Tarantool para resolver esses problemas. No Habré, muito se falou sobre como é construído "sob o capô", não repetirei, lembrarei apenas dos pontos principais:

Tarantool é um DBMS na memória e servidor de aplicativos em uma garrafa.

Ao trabalhar com uma grande quantidade de dados, é recomendável usá-los de duas maneiras:

  1. Como uma demonstração de dados para armazenar informações em cache na RAM, a fim de acelerar o acesso.
  2. Como servidor de aplicativos para processar dados de acordo com as regras especificadas.

Ou seja, a lógica de negócios é armazenada ao lado dos dados, o que é vital para serviços altamente carregados. Em nosso projeto, usamos o Tarantool como uma loja de dados "inteligente" com lógica de negócios incorporada, segundo a qual o processamento on-the-fly do fluxo de entrada de eventos e informações ocorre.

Por que o Tarantool é eficaz para a RTM:

  1. Armazenamento em cache de dados a quente. O perfil do cliente é armazenado em cache na memória, portanto, está sempre atualizado.
  2. Computação complexa em tempo real. Ofertas pessoais aos clientes são formadas em tempo real para cada evento.
  3. Solução tolerante a falhas e escalável:

Existem dois riscos óbvios em nosso projeto:

  1. , . — Tarantool c , .
  2. , . , . , . , . , ou seja, distribua 100 milhões de registros da tabela de perfil do cliente entre vários shards para paralelizar o processamento de consultas e, assim, reduzir a carga no registro. O exemplo mais simples é dividir a tabela de perfil do cliente pelo intervalo de valores de ID. Para resolver esse problema, o Tarantool fornece ferramentas de dimensionamento horizontal, mais sobre as quais podem ser encontradas, por exemplo, no artigo “ Cartucho Tarantool: dividindo o back-end Lua em três linhas ”.

Conclusão


O Tarantool não substitui o Oracle ou outros repositórios analíticos. Ao mesmo tempo, é eficaz para processar uma grande quantidade de dados em tempo real. Resolvemos com êxito a tarefa do cliente dentro dos termos acordados e do orçamento do projeto, por isso recomendo experimentar essa ferramenta ao criar serviços altamente carregados.

All Articles