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

Hoje, não há dúvida de que o processamento preciso 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, o número de gatilhos e eventos do usuário em aplicativos está aumentando.
Por esse motivo, as empresas fornecem a seus analistas informações cada vez mais "brutas" para análise e as transformam nas decisões corretas. A importância de um sistema de análise para uma empresa não deve ser subestimada, e o próprio sistema deve ser confiável e sustentável.
Análise do cliente
A análise de clientes é um serviço que uma empresa conecta ao seu site ou aplicativo por meio do SDK oficial, integra-se à sua própria base de códigos e seleciona os acionadores de eventos. Essa abordagem tem uma desvantagem óbvia: todos os dados coletados não podem ser totalmente processados como você gostaria, devido às limitações de qualquer serviço selecionado. Por exemplo, em um sistema não será fácil executar tarefas do MapReduce, em outro você não poderá executar seu modelo. Outra desvantagem será uma fatura regular (impressionante) de serviços.
Existem muitas soluções de análise de clientes no mercado, mas, mais cedo ou mais tarde, os analistas se deparam com o fato de que não há um serviço universal adequado para qualquer tarefa (enquanto os preços de todos esses serviços estão constantemente aumentando). Nessa situação, as empresas geralmente decidem criar seu próprio sistema de análise com todas as configurações e recursos personalizados necessários.
Análise de servidor
A análise de servidor é um serviço que pode ser implantado internamente em uma empresa em seus próprios servidores e (geralmente) por seus próprios esforços. Nesse modelo, todos os eventos do usuário são armazenados em servidores internos, permitindo que os desenvolvedores tentem bancos de dados diferentes para armazenamento e escolham a arquitetura mais conveniente. E mesmo se você ainda quiser usar análises de clientes de terceiros para algumas tarefas, ainda será possível.
A análise do servidor pode ser implantada de duas maneiras. Primeiro: selecione alguns utilitários de código aberto, implante em suas máquinas e desenvolva lógica de negócios.
Prós | Contras |
Você pode personalizar qualquer coisa | Muitas vezes, é muito difícil e são necessários desenvolvedores individuais. |
Segundo: adote serviços SaaS (Amazon, Google, Azure) em vez de implantá-lo você mesmo. Sobre o SaaS em mais detalhes, contaremos na terceira parte.
Prós | Contras |
Pode ser mais barato em volumes médios, mas com um grande crescimento ainda se tornará muito caro | Não é possível controlar todos os parâmetros |
A administração é totalmente transferida para os ombros do provedor de serviços | 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 evitar o uso da análise do cliente e montar a nossa própria, primeiro precisamos pensar na arquitetura do novo sistema. Abaixo, passo a passo, o que você deve considerar, por que cada uma das etapas é necessária e quais ferramentas você pode usar.
1. Aquisição de dados
Assim como no caso da análise de clientes, em primeiro lugar, os analistas da empresa escolhem os tipos de eventos que desejam estudar no futuro e os agrupam em uma lista. Geralmente, esses eventos ocorrem em uma determinada ordem, chamada de "padrão de evento".
Em seguida, imagine que um aplicativo móvel (site) tenha usuários regulares (dispositivos) e muitos servidores. Para transferir com segurança eventos de dispositivos para servidores, é necessária uma camada intermediária. Dependendo da arquitetura, várias filas de eventos diferentes podem ocorrer.
O Apache Kafka é uma
fila de pub / sub que é usada como uma fila para coletar eventos.
De acordo com um post no Kvor em 2014, o criador do Apache Kafka decidiu nomear o software como Franz Kafka porque "é um sistema otimizado para gravação" e porque ele amava os trabalhos de Kafka. - Wikipedia
No nosso exemplo, existem muitos produtores de dados e seus consumidores (dispositivos e servidores), e o Kafka ajuda a conectá-los. Os consumidores serão descritos com mais detalhes nas próximas etapas, onde serão os principais atores. Agora vamos considerar apenas produtores de dados (eventos).
Kafka encapsula os conceitos de fila e partição; mais especificamente, é melhor ler sobre isso em outro lugar (por exemplo, na
documentação ). Sem entrar em detalhes, imagine 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.

(foto
daqui )
Ao mesmo tempo, Kafka permite que você leia em pedaços e processe o fluxo de eventos com mini-morcegos. 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 se tornam mais difíceis devido ao dimensionamento (como sempre). Provavelmente ninguém vai querer usar apenas um fragmento físico na produção, pois a arquitetura deve ser tolerante a falhas. Além do Kafka, há outra solução conhecida - RabbitMQ. Não o usamos na produção como uma fila para análise de eventos (se você tiver essa experiência, conte-nos nos comentários!). No entanto, eles usaram o AWS Kinesis.
Antes de avançar para a próxima etapa, precisamos mencionar mais uma camada adicional do sistema - o armazenamento de logs brutos. Essa não é uma camada necessária, mas será útil se algo der errado e as filas de eventos no Kafka forem redefinidas. O armazenamento de logs brutos não requer uma solução complicada e cara; você pode simplesmente gravá-los em algum lugar na ordem correta (mesmo em um disco rígido).

2. Processamento de Fluxos de Eventos
Depois de preparar todos os eventos e colocá-los em filas adequadas, prosseguimos 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 em um sistema Apache. Todos os produtos Apache vivem no HDFS, um sistema de arquivos de réplica de arquivo seguro. O Spark Streaming é uma ferramenta fácil de usar que processa bem os dados de streaming e dimensiona bem. No entanto, pode ser um pouco difícil de manter.
Outra opção é criar seu próprio manipulador de eventos. Para fazer isso, por exemplo, você precisa escrever um aplicativo Python, construí-lo na janela de encaixe e assinar a fila Kafka. Quando os gatilhos chegarem aos manipuladores na janela de encaixe, o processamento será iniciado. Com esse método, você precisa manter aplicativos em execução constante.
Suponha que escolhemos uma das opções descritas acima e prossiga para o próprio processamento. Os processadores devem começar verificando a validade dos dados, filtrando o lixo e os eventos "interrompidos". Para validação, geralmente usamos o
Cerberus . Depois disso, você pode fazer o mapeamento dos dados: dados de diferentes fontes são normalizados e padronizados para serem adicionados ao rótulo geral.
3. Banco de Dados
O terceiro passo é manter os eventos normalizados. Ao trabalhar com um sistema analítico pronto, muitas vezes precisamos entrar em contato com eles, por isso é importante escolher um banco de dados conveniente.
Se os dados se
ajustarem bem a um esquema fixo, você poderá escolher
Clickhouse ou algum outro banco de dados de colunas. Portanto, as agregações funcionarão muito rapidamente. A desvantagem é que o esquema é rigidamente fixo e, portanto, dobrar objetos arbitrários sem refinamento falhará (por exemplo, quando ocorrer um evento não padrão). Mas você pode contar muito rápido.
Para dados não estruturados, você pode usar o NoSQL, por exemplo,
Apache Cassandra . Funciona no HDFS, é bem replicado, você pode criar várias instâncias, tolerante a falhas.
Você pode escolher algo mais simples, por exemplo,
MongoDB . É bastante lento e para pequenos volumes. Mas a vantagem é que é muito simples e, portanto, adequado para começar.
4. Agregações
Depois de salvar cuidadosamente todos os eventos, queremos coletar todas as informações importantes do lote que veio e atualizar o banco de dados. Globalmente, queremos obter painéis e métricas relevantes. Por exemplo, de eventos para coletar um perfil de usuário e de alguma forma medir o comportamento. Os eventos são agregados, coletados e salvos novamente (já em tabelas de usuários). Ao mesmo tempo, você pode criar o sistema para conectar também um filtro ao agregador-coordenador: 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, você poderá conectar sistemas de análises externos. Você pode tomar o Mixpanel novamente. mas, como é muito caro, não envia todos os eventos do usuário para lá, mas apenas o necessário. Para fazer isso, é necessário criar um coordenador que transmita alguns eventos brutos ou algo que nós mesmos agregamos anteriormente a sistemas externos, APIs ou plataformas de publicidade.
5. Frontend
Você precisa conectar o front-end ao sistema criado. Um bom exemplo é o serviço
redash , uma GUI para bancos de dados que ajuda a criar painéis. Como a interação funciona:
- O usuário faz uma consulta SQL.
- Em resposta, recebe um tablet.
- Para ela, ela cria uma 'nova visualização' e recebe uma agenda bonita que já pode ser salva para si mesma.
As visualizações no serviço são atualizadas automaticamente, você pode configurar e acompanhar seu monitoramento. O Redash é gratuito, no caso de hospedagem automática, e como o SaaS custará US $ 50 por mês.

Conclusão
Depois de concluir todas as etapas acima, você criará a análise do servidor. Observe que essa não é uma maneira tão fácil como simplesmente conectar a análise do cliente, porque tudo precisa ser configurado de forma independente. Portanto, antes de criar seu próprio sistema, vale a pena comparar a necessidade de um sistema de análise sério com os recursos que você está pronto para dedicar a ele.
Se você calculou tudo e descobriu que os custos são muito altos, na próxima parte, falarei sobre como criar uma versão mais barata da análise de servidor.
Obrigado pela leitura! Ficarei feliz em fazer perguntas nos comentários.