arquitetura de dados em stream

37
Arquitetura para processamento de dados em stream Utilizando MongoDB, RabbitMQ e Go TDC . SP . 2016

Upload: matheus-vill

Post on 14-Feb-2017

189 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Arquitetura de dados em stream

Arquitetura para processamento de dados em stream

Utilizando MongoDB, RabbitMQ e Go

TDC . SP . 2016

Page 2: Arquitetura de dados em stream

Kamila Hinckel

Desenvolvedora na Neoway

Graduada em Sistemas Eletrônicos (IF-SC)

5 anos de experiência na área de desenvolvimento de software

Desenvolvedor na Neoway

Graduado em Sistemas de Informação (UFSC)

6 anos de experiência na área de desenvolvimento de software

Olá!

Matheus Vill

Page 3: Arquitetura de dados em stream

Sede em Floripa

Love Mondays:3ª Melhor empresapara se trabalhar

Big Data Times independentes

Neoway

Page 4: Arquitetura de dados em stream

O que a NEOWAY faz?

Page 5: Arquitetura de dados em stream

Dados qualificados

+ de 19 bilhõesDe documentos lidos, analisados e

disponibilizados para nossos clientes

Page 6: Arquitetura de dados em stream

Data Science

Page 7: Arquitetura de dados em stream

O que fazemos?

Scheduling de inputs para os BOTs

Page 8: Arquitetura de dados em stream

O que fazemos?

Serviços de tratamento e enriquecimento de dados

Exemplos:Apresentação do TDC -> APRESENTACAO DO TDC

DILMA VANA ROUSSEFF -> 133.267.246-91

Page 9: Arquitetura de dados em stream

O que fazemos?

Integração e disponibilização de dados

Exemplo:Informações das empresas da Receita Federal

+Informações dos sócios das Juntas Comerciais

Page 10: Arquitetura de dados em stream

O que fazemos?

Geração de histórico das fontes capturadas

Exemplos:Dia 1: Nome da empresa -> Neoway

Dia 2: Nome da empresa -> Neoway Business

Page 11: Arquitetura de dados em stream

O que fazemos?

Criação de modelos estatísticos para qualificação e predição

Exemplos:- Nível de atividade de uma empresa- Faturamento Presumido

Page 12: Arquitetura de dados em stream

Arquitetura 1.0

Page 13: Arquitetura de dados em stream

➔ Custo elevado e dificuldades para escalar;

➔ Atraso na disponibilização dos dados para as aplicações;

➔ Dificuldades para simular o ambiente existente;

➔ Dificuldade de mapear os impactos de alterações.

Problemas

Page 14: Arquitetura de dados em stream

Nova arquitetura!

Page 15: Arquitetura de dados em stream

Nova Arquitetura

Page 16: Arquitetura de dados em stream

Go, Rabbit e Mongo

Go

- Simples e leve

- Concorrência/paralelismo

- É demais!!!! :)

Rabbit

- Servidor de mensageria

- Filas e tópicos

- Persistência de mensagens

Mongo

- NoSQL

- Orientado à documento

- Não possui schema definido

- JSON como protocolo

Page 17: Arquitetura de dados em stream

Scheduling de Inputs

Page 18: Arquitetura de dados em stream

Tratamento e enriquecimento

Page 19: Arquitetura de dados em stream

Integração e disponibilização

Page 20: Arquitetura de dados em stream

Disponibilização do histórico capturado

Page 21: Arquitetura de dados em stream

O que ganhamos?

Tempo: Disponibilização dos dados de forma contínua e integrada entre todas as aplicações.

Escalabilidade: Necessidade de escalar horizontalmente devido ao aumento do número de fontes capturadas.

Infraestrutura imutável: Scripts automatizados, evitando máquinas “flocos de neve”.

Qualidade: Arquitetura orientada à testes automatizados.

Custo: Possibilidade de redução de custos de infra.

Page 22: Arquitetura de dados em stream

Testes

Page 23: Arquitetura de dados em stream

Testes Unitários

Vantagens:

- Executam em poucos segundos

- Segurança para implementar novas features

- Teste de erros e exceções

Desvantagens:

- Alguns problemas com Mongo e Rabbit não eram percebidos e só foram descobertos nos primeiros deploys

Page 24: Arquitetura de dados em stream

Testes end-to-end

Page 25: Arquitetura de dados em stream

Testes end-to-end

Vantagens:

- Garante que todos os serviços funcionem de forma integrada

- Ideia futura de integrar os bots nesses testes também

Desvantagens:

- Mais lento

- Mais díficil de encontrar onde está o problema

Page 26: Arquitetura de dados em stream

Testes de integração

Vantagens:

- Necessidade de ter uma meio termo entre os testes unitários e os testes end-to-end

- Permitiram testes integrados com o Mongo e o Rabbit, porém com cases específicos de cada serviço

Desvantagens:

- Setup desses testes são mais complexos que os testes unitários

- Mais difícil garantir o isolamento dos testes

Page 27: Arquitetura de dados em stream

Testes de carga

Características:

- Possível verificar se novas features não impactaram na performace do stream de dados

- Verificar qual dos microserviços pode estar dimuindo a velocidade do fluxo de dados

Ferramentas:

- rabbit-mq-stress-tester: https://github.com/backstop/rabbit-mq-stress-tester

- boom: https://github.com/rakyll/boom

Page 28: Arquitetura de dados em stream

Tests Dicas

- Table driven tests

- Test Fixtures

- Mock package

Page 29: Arquitetura de dados em stream

Table Driven Tests

Page 30: Arquitetura de dados em stream

Test Fixtures

Page 31: Arquitetura de dados em stream

Mock Package

sources/sources_mock.gocontrol/control_test.go

Page 32: Arquitetura de dados em stream
Page 33: Arquitetura de dados em stream

Golang exemplos

● Neowayhttps://github.com/NeowayLabs

● Terraformhttps://github.com/hashicorp/terraform

● Dockerhttps://github.com/docker/docker

● Kuberneteshttps://github.com/kubernetes/kubernetes

Page 34: Arquitetura de dados em stream
Page 35: Arquitetura de dados em stream

Bóra trabalhar em Floripa?

Page 36: Arquitetura de dados em stream
Page 37: Arquitetura de dados em stream

Obrigado!!!:)