Sistemas de análise de servidor

Esta é a segunda parte de uma série de artigos sobre sistemas analíticos (link para a parte 1).

Sistemas de análise de servidor

Hoje não há mais dúvidas de que o processamento cuidadoso dos dados e a interpretação dos resultados podem ajudar quase qualquer tipo de negócio. Nesse sentido, os sistemas analíticos estão cada vez mais carregados de parâmetros e o número de gatilhos e eventos de usuário nas aplicações está crescendo.
Por causa disso, as empresas estão fornecendo aos seus analistas cada vez mais informações brutas para analisar e transformar em decisões acertadas. A importância de um sistema analítico para uma empresa não deve ser subestimada, e o próprio sistema deve ser confiável e estável.

Analistas de clientes

A análise de clientes é um serviço que uma empresa conecta ao seu site ou aplicativo por meio do SDK oficial, integra em sua própria base de código e seleciona gatilhos de eventos. Há uma desvantagem óbvia nesta abordagem: todos os dados coletados podem não ser processados ​​exatamente como você gostaria devido às limitações de qualquer serviço que você escolher. Por exemplo, em um sistema não será fácil executar tarefas MapReduce, em outro você não conseguirá executar seu modelo. Outra desvantagem será a conta regular (impressionante) dos serviços.
Existem muitas soluções de análise de clientes no mercado, mas mais cedo ou mais tarde os analistas deparam-se com o facto de não existir um serviço universal adequado para todas as tarefas (enquanto os preços de todos estes serviços aumentam constantemente). Em tal situação, as empresas muitas vezes decidem criar seu próprio sistema analítico com todas as configurações e recursos personalizados necessários.

Analistas de servidor

A análise do lado do servidor é um serviço que pode ser implantado em uma empresa em seus próprios servidores e (geralmente) com seus próprios esforços. Neste modelo, todos os eventos do usuário são armazenados em servidores internos, permitindo que os desenvolvedores experimentem diferentes bancos de dados de armazenamento e escolham a arquitetura mais conveniente. E mesmo que você ainda queira usar análises de clientes de terceiros para algumas tarefas, isso ainda será possível.
A análise do lado do servidor pode ser implantada de duas maneiras. Primeiro: escolha alguns utilitários de código aberto, implante-os em suas máquinas e desenvolva lógica de negócios.

Prós
Contras

Você pode personalizar o que quiser
Isso geralmente é muito difícil e requer desenvolvedores separados

Segundo: use serviços SaaS (Amazon, Google, Azure) em vez de implantá-los você mesmo. Falaremos sobre SaaS com mais detalhes na terceira parte.

Prós
Contras

Pode ser mais barato em volumes médios, mas com grande crescimento ainda se tornará muito caro
Não será possível controlar todos os parâmetros

A administração é inteiramente transferida para os ombros do prestador de serviço
Nem sempre se sabe o que está dentro do serviço (pode não ser necessário)

Como coletar análises do servidor

Se quisermos deixar de usar análises de clientes e construir a nossa própria, primeiro precisamos pensar na arquitetura do novo sistema. A seguir direi passo a passo o que você precisa considerar, por que cada etapa é necessária e quais ferramentas você pode usar.

1. Recebendo dados

Assim como no caso da análise de clientes, em primeiro lugar, os analistas da empresa selecionam os tipos de eventos que desejam estudar no futuro e os reúnem em uma lista. Normalmente, esses eventos ocorrem em uma ordem específica, chamada de “padrão de evento”.
A seguir, imagine que um aplicativo móvel (site) possui usuários regulares (dispositivos) e muitos servidores. Para transferir eventos com segurança de dispositivos para servidores, é necessária uma camada intermediária. Dependendo da arquitetura, pode haver diversas filas de eventos diferentes.
Apache Kafka - É fila pub/sub, que é usado como fila para coleta de eventos.

Conforme postar no Quora em 2014, o criador do Apache Kafka decidiu nomear o software em homenagem a Franz Kafka porque “é um sistema otimizado para escrita” e porque adorava os trabalhos de Kafka. - Wikipedia

Em nosso exemplo, existem muitos produtores e consumidores de dados (dispositivos e servidores), e o Kafka ajuda a conectá-los entre si. Os consumidores serão descritos com mais detalhes nas etapas seguintes, onde serão os sujeitos principais. Agora consideraremos apenas produtores de dados (eventos).
Kafka encapsula os conceitos de fila e partição; é melhor ler mais especificamente sobre isso em outro lugar (por exemplo, em documentação). Sem entrar em detalhes, vamos imaginar que um aplicativo móvel seja lançado para dois sistemas operacionais diferentes. Em seguida, cada versão cria seu próprio fluxo de eventos separado. Os produtores enviam eventos para Kafka, eles são gravados em uma fila adequada.
Sistemas de análise de servidor
(foto por isso)

Ao mesmo tempo, Kafka permite ler em pedaços e processar um fluxo de eventos em minilotes. Kafka é uma ferramenta muito conveniente que se adapta bem às necessidades crescentes (por exemplo, por geolocalização de eventos).
Normalmente, um fragmento é suficiente, mas as coisas ficam mais complicadas durante o dimensionamento (como sempre acontece). Provavelmente ninguém vai querer usar apenas um shard físico em produção, já que a arquitetura deve ser tolerante a falhas. Além do Kafka, existe outra solução conhecida - RabbitMQ. Não o utilizamos na produção como fila para análise de eventos (se você tem essa experiência, conte-nos nos comentários!). No entanto, usamos AWS Kinesis.

Antes de passar para a próxima etapa, precisamos mencionar mais uma camada adicional do sistema – armazenamento de log bruto. Esta não é uma camada obrigatória, mas será útil se algo der errado e as filas de eventos no Kafka forem redefinidas. Armazenar logs brutos não requer uma solução complexa e cara; você pode simplesmente gravá-los em algum lugar na ordem correta (até mesmo em um disco rígido).
Sistemas de análise de servidor

2. Processando fluxos de eventos

Depois de prepararmos todos os eventos e colocá-los nas filas apropriadas, passamos para a etapa de processamento. Aqui vou falar sobre as duas opções de processamento mais comuns.
A primeira opção é habilitar o Spark Streaming no sistema Apache. Todos os produtos Apache residem no HDFS, um sistema de arquivos seguro com réplicas de arquivos. Spark Streaming é uma ferramenta fácil de usar que lida bem com dados de streaming e é bem dimensionada. No entanto, pode ser difícil mantê-lo.
Outra opção é construir seu próprio manipulador de eventos. Para fazer isso, você precisa, por exemplo, escrever um aplicativo Python, construí-lo no Docker e assinar a fila Kafka. Quando os gatilhos chegarem aos manipuladores do docker, o processamento será iniciado. Com esse método, você precisa manter os aplicativos em execução o tempo todo.
Suponhamos que escolhemos uma das opções descritas acima e passamos ao processamento propriamente dito. Os processadores devem começar verificando a validade dos dados, filtrando lixo e eventos “quebrados”. Para validação geralmente usamos Cerberus. Depois disso, você pode fazer o mapeamento de dados: dados de diferentes fontes são normalizados e padronizados para serem adicionados a uma tabela comum.
Sistemas de análise de servidor

3. Banco de dados

O terceiro passo é manter os eventos normalizados. Ao trabalhar com um sistema analítico pronto, teremos que acessá-los com frequência, por isso é importante escolher um banco de dados conveniente.
Se os dados se enquadrarem bem em um esquema fixo, você poderá escolher Clickhouse ou algum outro banco de dados colunar. Desta forma as agregações funcionarão muito rapidamente. A desvantagem é que o esquema é rigidamente fixo e, portanto, não será possível adicionar objetos arbitrários sem modificação (por exemplo, quando ocorrer um evento fora do padrão). Mas você pode contar muito rapidamente.
Para dados não estruturados, você pode usar o NoSQL, por exemplo, Apache Cassandra. Ele roda em HDFS, replica bem, você pode criar muitas instâncias e é tolerante a falhas.
Você também pode levantar algo mais simples, por exemplo, MongoDB. É bastante lento e para pequenos volumes. Mas a vantagem é que é muito simples e, portanto, adequado para começar.
Sistemas de análise de servidor

4. Agregações

Depois de salvar cuidadosamente todos os eventos, queremos coletar todas as informações importantes do lote que chegou e atualizar o banco de dados. Globalmente, queremos obter painéis e métricas relevantes. Por exemplo, colete um perfil de usuário a partir de eventos e meça de alguma forma o comportamento. Os eventos são agregados, coletados e salvos novamente (em tabelas de usuários). Ao mesmo tempo, você pode construir um sistema para que também possa conectar um filtro ao coordenador-agregador: coletar usuários apenas de um determinado tipo de evento.
Depois disso, se alguém da equipe precisar apenas de análises de alto nível, sistemas analíticos externos poderão ser conectados. Você pode pegar o Mixpanel novamente. mas como é bastante caro, nem todos os eventos do usuário são enviados para lá, mas apenas o que é necessário. Para fazer isso, precisamos criar um coordenador que irá transferir alguns eventos brutos ou algo que nós mesmos agregamos anteriormente para sistemas externos, APIs ou plataformas de publicidade.
Sistemas de análise de servidor

5. Interface

Você precisa conectar o frontend ao sistema criado. Um bom exemplo é o serviço traço vermelho, é uma GUI de banco de dados que ajuda a criar painéis. Como funciona a interação:

  1. O usuário faz uma consulta SQL.
  2. Em resposta, ele recebe um sinal.
  3. Ele cria uma 'nova visualização' para ele e obtém um lindo gráfico que você pode salvar para si mesmo.

As visualizações no serviço são atualizadas automaticamente, você pode personalizar e rastrear seu monitoramento. O Redash é gratuito se for auto-hospedado, mas como SaaS custará US$ 50 por mês.
Sistemas de análise de servidor

Conclusão

Depois de concluir todas as etapas acima, você criará as análises do seu servidor. Observe que isso não é tão simples quanto conectar análises de clientes, porque tudo precisa ser configurado por você mesmo. Portanto, antes de criar seu próprio sistema, vale a pena comparar a necessidade de um sistema analítico sério com os recursos que você deseja alocar para ele.
Se você fez as contas e descobriu que os custos são muito altos, na próxima parte falarei sobre como fazer uma versão mais barata de análise do lado do servidor.

Obrigado por ler! Terei prazer em fazer perguntas nos comentários.

Fonte: habr.com

Adicionar um comentário