Big Data como Serviço: da captura à visualização de dados com alto desempenho

322 visualizações

Publicada em

A Neoway fornece serviços de análise de dados e Big Data por assinatura, trabalhando com mais de 10 terabytes de dados indexados de centenas de fontes, em duas verticais: prospecção de clientes e prevenção de fraudes bancárias. Nesta palestra vamos mostrar como organizamos o fluxo de processamento e análise de dados, desde a captura dos dados de mais de 200 fontes públicas, até a disponibilização para clientes.

Apresentaremos como é gerenciado e monitorado nosso ecossistema para garantir alto desempenho e resiliência da plataforma, que consiste de 30 microsserviços e um cluster de ElasticSearch com mais de dez nós. Também serão mostradas as ferramentas utilizadas para implementar Continuous Integration/Delivery/Deployment, e o que nos motivou a refatorar grande parte dos serviços para a linguagem Go e a substituição de RabbitMQ para NSQ.io, assim como os ganhos obtidos e desafios enfrentados com essas mudanças.

Um dos nossos principais desafios tem sido minimizar o tempo desde a captura de grandes volumes de dados até a disponibilização para clientes. Mostraremos como foi acelerado este processo de nove dias para quase realtime através de uma Stream API.

Publicada em: Software
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
322
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
15
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Big Data como Serviço: da captura à visualização de dados com alto desempenho

  1. 1. Arquitetura Neoway Da captura à disponibilização dos dados
  2. 2. Kamila Hinckel Developer at Neoway Data Platform Team Ricardo Longa Developer at Neoway Core Team
  3. 3. Sede em Floripa GPTW: 6ª melhor empresa para se trabalhar Big Data Times independentes Neoway
  4. 4. O que a Neoway faz?
  5. 5. DADOS Em 2018, mais da metade das grandes organizações mundiais concorrerá utilizando análises avançadas e algoritmos proprietários, provocando a ruptura de indústrias inteiras.* *Fonte: Predicts 2016: Changes Coming in How We Buy Business Analytics Technology - Gartner PaaS+400 Clientes +3000 Bancos de dados +30 Parceiros de negócios +250 Colaboradores +35 milhões de empresas +194 milhões de pessoas no Brasil +180 milhões de processos judiciais +45 milhões de companies USA
  6. 6. Como processamos mais de 6 milhões de dados por dia?
  7. 7. Arquitetura
  8. 8. 200+ Crawlers!
  9. 9. Inputs Exemplos: ● CNPJ -> 05.337.875/0001-05 { “cnpj”: “05337875000105” } ● Sequencial -> 061256-01 { “protocolo”: “06125601” } ● CNPJ + Razão Social: { “cnpj”: “05337875000105”, “razaoSocial”: “NEOWAY” }
  10. 10. Exemplos: ● QCon São Paulo -> QCON SAO PAULO ● NEOWAY BUSINESS SOLUTIONS -> 05.337.875/0001-05 Tratamento e Enriquecimento
  11. 11. Exemplo: Informações das empresas da Receita Federal + Informações dos sócios das Juntas Comerciais = Dados completos de empresas do Brasil Integração
  12. 12. Exemplo: ● Dia 1: Nome da empresa -> Neoway LTDA ● Dia 2: Nome da empresa -> Neoway SA Histórico
  13. 13. Golang ● Compilada, fortemente tipada ● Standard library completa ● Ferramentas Built-in (go test, go bench) ● Pausas do GC na escala de nanosegundos
  14. 14. Golang ● Produtividade ○ Simplista (less is more) ○ Fortemente tipada ● Performance ○ Goroutines (thread 1mb / goroutine 2kb) ● Economia de recursos ○ Baixo consumo de memória
  15. 15. Golang package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "Hi there, I love this conference!") } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }
  16. 16. Testes de integração
  17. 17. Testes de integração ● Garante que os serviços funcionem de forma integrada ● Testes integrados com o banco e serviço de mensageria ● Desenvolvedor consegue executá-los em sua máquina
  18. 18. Exemplos: ● Nível de atividade de uma empresa ● Faturamento Presumido Modelos Estatísticos
  19. 19. ● Conexão persistente ● Novos dados são empurrados pelo servidor ● Sem necessidade de polling ● Controle de processamento via timestamp Stream API
  20. 20. ● Interessado em quaisquer tópicos com data-domains.* ● Na sequência, publica a mesma mensagem em domains.* Persistência
  21. 21. ● Utilizado p/ pesquisas simples (sempre pelo _id) ● Réplica com três nós ● Sub-arrays separados em collections MongoDB
  22. 22. ● empresas (database) ○ empresas(collection - parent) ○ funcionarios(collection - child) ○ socios(collection - child) ○ veiculos(collection - child) ○ arts(collection - child) ○ clientdata_x(collection - child / por cliente) ○ tags_x(collection - child / por cliente) MongoDB
  23. 23. Como usamos: ● Convenção de nomes de tópicos ○ data-domains.empresas.funcionarios(-> Mongo) ○ domains.empresas.funcionarios(-> ES) Mensageria
  24. 24. ● NSQ.io - Plataforma de mensageria ● Distribuída (without any centralized brokers) ● Admin UI ● Official Docker image ● Feito em Go Mensageria
  25. 25. ● Interesse em quaisquer tópicos com domains.* Indexação
  26. 26. Mapping: ● Estrutura similar ao Mongo(parent / child) Elastic Search
  27. 27. Dados indexados: ● Empresas: 6,3 TB ● Pessoas: 3 TB ● Processos Judiciais: 2,2 TB ● Companies USA: 178 GB Elastic Search
  28. 28. Um cluster com: ● 13 data nodes ● 3 master nodes Elastic Search
  29. 29. Motivo: ● Abtração da síntaxe do Elastic Search Neoway Search DSL
  30. 30. { "from": 0, "size": 10, "fields": ["cnpj", "razaoSocial"], "query": { "$or": [ { "$and": [ {"endereco.uf": "SP"}, {"socios.cpf": "12611122211"} ] }, {"totalFuncionarios": {"$lt": 100}} ] } } Neoway Search DSL
  31. 31. Como usamos: ● http://vulcand.github.io ● Rotas configuradas via ETCD Internal Router “It uses Etcd as a configuration backend, so changes to configuration take effect immediately without restarting the service.”
  32. 32. Necessidade: ● Analisar a ligação entre registros de forma visual Neo4J + Keylines
  33. 33. ● Outro serviço com VulcanD ● Rotas também configuradas via ETCD ● Custom middleware (redireciona p/ serviço de autenticação/autorização) ○ Autenticação ○ Autorização External Auth./Auth./Router
  34. 34. Requisitos: ● Cliente marca empresas em lote ● Cliente busca as empresas com suas marcações Marcadores
  35. 35. E se as filas estiverem congestionadas?
  36. 36. Requisito: ● Ao marcar uma empresa, a busca deve retorná-la imediatamente Processamento síncrono
  37. 37. Motivos: ● Sem sessões no servidor ● Informações necessárias trafegam dentro do token ● https://jwt.io/ Json Web Tokens
  38. 38. Cliente feliz!
  39. 39. Aplicações
  40. 40. DevOps
  41. 41. Infraestrutura ● 200+ crawlers capturando dados ● 70+ microservices ● 200+ instâncias no EC2 ● 100+ instâncias na Azure
  42. 42. Linux Containers ● Empacotamento de dependências em “containers” ● Permite versionamento das imagens ● Docker compose ● Rkt (uma alternativa minimalista ao Docker) ● Feito em Go
  43. 43. CoreOS ● Distro minimalista ● Focado em containers (Docker/Rkt) ● ETCD - Database(key/value) distribuído ● Rolling updates (facilita atualização de +300 instâncias) ● Cloud Config (provisionamento nativo)
  44. 44. Systemd Units system PRODUCTION # cat tyr.service [Unit] After=skydns.service Before=tyr-announce.service [Service] EnvironmentFile=/etc/profile.d/core ExecStart=/usr/bin/rkt --insecure-options=all run --net=host --no-store=true --inherit-env --volume tmp,kind=host,source=/data/tyr ${TYR_IMAGE} -- -port=${TYR_PORT} -etcdKey=tyr -etcd=http://127.0.0.1:4001
  45. 45. Environment Variables system PRODUCTION # cat /etc/profile.d/core #!/bin/sh # Globals GIN_MODE=release LOGGER_LEVEL=error LOGGER_OUTPUT=syslog LOGGER_SYSLOG_ADDRESS=log.neoway.local:1514/udp LOGGER_SYSLOG_DIR=core SYSLOG_ADDRESS=log.neoway.local:1514 # Backends MONGO_URL=mongo1.core.neoway.local:27017,mongo2.core.neoway.local:27017 ELASTICSEARCH_URL="http://x1.elasticsearch.core.neoway.local:9200,http://x2.elasticsearch.core.ne oway.local:9200,http://x3.elasticsearch.core.neoway.local:9200"
  46. 46. Service Discovery “SkyDNS is a distributed service for announcement and discovery of services built on top of etcd.”
  47. 47. Service Discovery system PRODUCTION # cat tyr-announce.service [Unit] Description=Announce tyr BindsTo=tyr.service [Service] EnvironmentFile=/etc/environment EnvironmentFile=/etc/profile.d/core ExecStart=/bin/sh -c "while true; do etcdctl set /skydns/local/neoway/core/api/%m '{"host": "'${COREOS_PRIVATE_IPV4}'"}' --ttl 15 ;sleep 10;done" ExecStop=/usr/bin/etcdctl rm /skydns/local/neoway/core/api/%m [Install] WantedBy=multi-user.target
  48. 48. Service Discovery system PRODUCTION # etcdctl ls --recursive /skydns/local/neoway/core/api /skydns/local/neoway/core/api/ 4b142d1ced0241a4bad59d4273f65a2e /skydns/local/neoway/core/api/ 1104a38250cf48f8bb8daefc25bc40c0 system PRODUCTION # host api.core.neoway.local api.core.neoway.local has address 10.11.12.95 api.core.neoway.local has address 10.11.11.219
  49. 49. Kubernetes ● Gerenciador de containers em cluster ● Criado pelo Google - Escrito em Go ● Fácil de escalar (cluster e serviços) ● Service discovery ● Atualização com zero downtime - Rolling Updates
  50. 50. Kubernetes
  51. 51. Monitoramento
  52. 52. Prometheus + Grafana ● Prometheus busca as métricas (pull based) ● https://github.com/google/cadvisor ● https://github.com/prometheus/node_exporter ● Armazena em um time series database ● Permite configuração de alertas
  53. 53. Neoway Open-source Projects ● https://github.com/NeowayLabs ○ nash: /nash ○ klb: /klb
  54. 54. Estamos contratando!
  55. 55. Apoio técnico! :)
  56. 56. Obrigado! :) Kamila Hinckel kamila.hinckel@neoway.com.br Ricardo Longa ricardo.longa@neoway.com.br @ricardolonga ricardolonga kamilash

×