Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

802 Aufrufe

Veröffentlicht am

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.

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

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

×