SlideShare uma empresa Scribd logo
1 de 131
Baixar para ler offline
Arquitetura Neoway
Da captura à disponibilização dos dados
Kamila Hinckel
Developer at Neoway
Data Platform Team
Ricardo Longa
Developer at Neoway
Core Team
Sede em
Floripa
GPTW:
6ª melhor empresa
para se trabalhar
Big Data Times
independentes
Neoway
O que a Neoway faz?
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
Como processamos
mais de 6 milhões de dados
por dia?
Arquitetura
200+ Crawlers!
Inputs
Exemplos:
● CNPJ -> 05.337.875/0001-05
{ “cnpj”: “05337875000105” }
● Sequencial -> 061256-01
{ “protocolo”: “06125601” }
● CNPJ + Razão Social:
{ “cnpj”: “05337875000105”, “razaoSocial”: “NEOWAY” }
Exemplos:
● QCon São Paulo -> QCON SAO PAULO
● NEOWAY BUSINESS SOLUTIONS -> 05.337.875/0001-05
Tratamento e Enriquecimento
Exemplo:
Informações das empresas da Receita Federal
+
Informações dos sócios das Juntas Comerciais
=
Dados completos de empresas do Brasil
Integração
Exemplo:
● Dia 1: Nome da empresa -> Neoway LTDA
● Dia 2: Nome da empresa -> Neoway SA
Histórico
Golang
● Compilada, fortemente tipada
● Standard library completa
● Ferramentas Built-in (go test, go bench)
● Pausas do GC na escala de nanosegundos
Golang
● Produtividade
○ Simplista (less is more)
○ Fortemente tipada
● Performance
○ Goroutines (thread 1mb / goroutine 2kb)
● Economia de recursos
○ Baixo consumo de memória
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)
}
Testes de integração
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
Exemplos:
● Nível de atividade de uma empresa
● Faturamento Presumido
Modelos Estatísticos
● Conexão persistente
● Novos dados são empurrados pelo servidor
● Sem necessidade de polling
● Controle de processamento via timestamp
Stream API
● Interessado em quaisquer tópicos com data-domains.*
● Na sequência, publica a mesma mensagem em domains.*
Persistência
● Utilizado p/ pesquisas simples (sempre pelo _id)
● Réplica com três nós
● Sub-arrays separados em collections
MongoDB
● 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
Como usamos:
● Convenção de nomes de tópicos
○ data-domains.empresas.funcionarios(-> Mongo)
○ domains.empresas.funcionarios(-> ES)
Mensageria
● NSQ.io - Plataforma de mensageria
● Distribuída (without any centralized brokers)
● Admin UI
● Official Docker image
● Feito em Go
Mensageria
● Interesse em quaisquer tópicos com domains.*
Indexação
Mapping:
● Estrutura similar ao Mongo(parent / child)
Elastic Search
Dados indexados:
● Empresas: 6,3 TB
● Pessoas: 3 TB
● Processos Judiciais: 2,2 TB
● Companies USA: 178 GB
Elastic Search
Um cluster com:
● 13 data nodes
● 3 master nodes
Elastic Search
Motivo:
● Abtração da síntaxe do Elastic Search
Neoway Search DSL
{
"from": 0, "size": 10, "fields": ["cnpj", "razaoSocial"],
"query": {
"$or": [
{
"$and": [
{"endereco.uf": "SP"},
{"socios.cpf": "12611122211"}
]
},
{"totalFuncionarios": {"$lt": 100}}
]
}
}
Neoway Search DSL
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.”
Necessidade:
● Analisar a ligação entre registros de forma visual
Neo4J + Keylines
● 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
Requisitos:
● Cliente marca empresas em lote
● Cliente busca as empresas com suas marcações
Marcadores
E se as filas
estiverem
congestionadas?
Requisito:
● Ao marcar uma empresa, a busca deve retorná-la imediatamente
Processamento síncrono
Motivos:
● Sem sessões no servidor
● Informações necessárias trafegam dentro do token
● https://jwt.io/
Json Web Tokens
Cliente feliz!
Aplicações
DevOps
Infraestrutura
● 200+ crawlers capturando dados
● 70+ microservices
● 200+ instâncias no EC2
● 100+ instâncias na Azure
Linux Containers
● Empacotamento de dependências em “containers”
● Permite versionamento das imagens
● Docker compose
● Rkt (uma alternativa minimalista ao Docker)
● Feito em Go
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)
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
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"
Service Discovery
“SkyDNS is a distributed service for announcement and discovery of
services built on top of etcd.”
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
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
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
Kubernetes
Monitoramento
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
Neoway Open-source Projects
● https://github.com/NeowayLabs
○ nash: /nash
○ klb: /klb
Estamos
contratando!
Apoio técnico! :)
Obrigado! :)
Kamila Hinckel
kamila.hinckel@neoway.com.br
Ricardo Longa
ricardo.longa@neoway.com.br
@ricardolonga
ricardolonga
kamilash

Mais conteúdo relacionado

Mais procurados

Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
Thiago Avelino
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
LelyBarros
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
Josino Rodrigues
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
Suissa
 

Mais procurados (20)

Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
Minicurso Epoca mongoDB
Minicurso Epoca mongoDBMinicurso Epoca mongoDB
Minicurso Epoca mongoDB
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 
Aumentando a produtividade com Android Libs
Aumentando a produtividade com Android LibsAumentando a produtividade com Android Libs
Aumentando a produtividade com Android Libs
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
Testes integrados automatizados
Testes integrados automatizadosTestes integrados automatizados
Testes integrados automatizados
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
Secomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao ElixirSecomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao Elixir
 
Grails
GrailsGrails
Grails
 
Jwt com implementação apache Oltu
Jwt com implementação apache OltuJwt com implementação apache Oltu
Jwt com implementação apache Oltu
 

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

Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
David Robert Camargo de Campos
 
Eiti Kimura - Analisador de dados automatizado utilizando machine learning
Eiti Kimura - Analisador de dados automatizado utilizando machine learningEiti Kimura - Analisador de dados automatizado utilizando machine learning
Eiti Kimura - Analisador de dados automatizado utilizando machine learning
DevCamp Campinas
 

Semelhante a Big Data como Serviço: da captura à visualização de dados com alto desempenho (20)

Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDAOficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
Oficina técnica da Infraestrutura Nacional de Dados Abertos - INDA
 
Big Data Analytics - Data Engineer, Arquitetura, AWS e Mais
Big Data Analytics - Data Engineer, Arquitetura, AWS e MaisBig Data Analytics - Data Engineer, Arquitetura, AWS e Mais
Big Data Analytics - Data Engineer, Arquitetura, AWS e Mais
 
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability EngineeringTDC 2017 - Borg até o Prometheus: Site Reliability Engineering
TDC 2017 - Borg até o Prometheus: Site Reliability Engineering
 
Arquitetura de dados em stream - TDC SP 2016
Arquitetura de dados em stream - TDC SP 2016Arquitetura de dados em stream - TDC SP 2016
Arquitetura de dados em stream - TDC SP 2016
 
Sql Server
Sql ServerSql Server
Sql Server
 
Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017Quebrando o monolito com microserviços - TDC 2017
Quebrando o monolito com microserviços - TDC 2017
 
Transformando Grandes Volumes de Dados em Insight em Tempo Real usando Fast D...
Transformando Grandes Volumes de Dados em Insight em Tempo Real usando Fast D...Transformando Grandes Volumes de Dados em Insight em Tempo Real usando Fast D...
Transformando Grandes Volumes de Dados em Insight em Tempo Real usando Fast D...
 
Bancos de dados analíticos open source
Bancos de dados analíticos open sourceBancos de dados analíticos open source
Bancos de dados analíticos open source
 
Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'Funcionalidades de Acesso a Dados no 'Mango'
Funcionalidades de Acesso a Dados no 'Mango'
 
Azure e suas vantagens (Palestra 1)
Azure e suas vantagens (Palestra 1) Azure e suas vantagens (Palestra 1)
Azure e suas vantagens (Palestra 1)
 
Como um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenhoComo um grande sistema REST funciona - arquitetura e desempenho
Como um grande sistema REST funciona - arquitetura e desempenho
 
Eiti Kimura - Analisador de dados automatizado utilizando machine learning
Eiti Kimura - Analisador de dados automatizado utilizando machine learningEiti Kimura - Analisador de dados automatizado utilizando machine learning
Eiti Kimura - Analisador de dados automatizado utilizando machine learning
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
[DTC21] André Marques - Jornada do Engenheiro de Dados
[DTC21] André Marques - Jornada do Engenheiro de Dados[DTC21] André Marques - Jornada do Engenheiro de Dados
[DTC21] André Marques - Jornada do Engenheiro de Dados
 
Cenário das Plataformas de Dados 2017/2018
Cenário das Plataformas de Dados 2017/2018Cenário das Plataformas de Dados 2017/2018
Cenário das Plataformas de Dados 2017/2018
 
Qual é o futuro da estratégia de dados?
Qual é o futuro da estratégia de dados?Qual é o futuro da estratégia de dados?
Qual é o futuro da estratégia de dados?
 
Rails: Porque programar deve ser divertido
Rails: Porque programar deve ser divertidoRails: Porque programar deve ser divertido
Rails: Porque programar deve ser divertido
 
Big Data
Big DataBig Data
Big Data
 
Splunklive! Universo Online
Splunklive! Universo OnlineSplunklive! Universo Online
Splunklive! Universo Online
 

Mais de Ricardo Longa

Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)
Ricardo Longa
 
Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)
Ricardo Longa
 

Mais de Ricardo Longa (18)

Aula 12/06 (SQLite)
Aula 12/06 (SQLite)Aula 12/06 (SQLite)
Aula 12/06 (SQLite)
 
Aula 05/06 (Notification)
Aula 05/06 (Notification)Aula 05/06 (Notification)
Aula 05/06 (Notification)
 
Aula 29/05 (AlarmManager)
Aula 29/05 (AlarmManager)Aula 29/05 (AlarmManager)
Aula 29/05 (AlarmManager)
 
Aula 22/05 (Handler)
Aula 22/05 (Handler)Aula 22/05 (Handler)
Aula 22/05 (Handler)
 
Adopt a JSR
Adopt a JSRAdopt a JSR
Adopt a JSR
 
JSR 339 - Java API for RESTful Web Services
JSR 339 - Java API for RESTful Web ServicesJSR 339 - Java API for RESTful Web Services
JSR 339 - Java API for RESTful Web Services
 
Aula 6 - 08/05 (SharedPreferences)
Aula 6 - 08/05 (SharedPreferences)Aula 6 - 08/05 (SharedPreferences)
Aula 6 - 08/05 (SharedPreferences)
 
Aula 6 - 08/05 (Menu)
Aula 6 - 08/05 (Menu)Aula 6 - 08/05 (Menu)
Aula 6 - 08/05 (Menu)
 
Aula 5 - 24/04 (Landscape / Portrait)
Aula 5 - 24/04 (Landscape / Portrait)Aula 5 - 24/04 (Landscape / Portrait)
Aula 5 - 24/04 (Landscape / Portrait)
 
JBoss Forge 2
JBoss Forge 2JBoss Forge 2
JBoss Forge 2
 
Aula 17 04 (Exercícios e ScrollView)
Aula 17 04 (Exercícios e ScrollView)Aula 17 04 (Exercícios e ScrollView)
Aula 17 04 (Exercícios e ScrollView)
 
Aula 10 04 (intents)
Aula 10 04 (intents)Aula 10 04 (intents)
Aula 10 04 (intents)
 
Aula 10 04 (Gerenciadores de layouts)
Aula 10 04 (Gerenciadores de layouts)Aula 10 04 (Gerenciadores de layouts)
Aula 10 04 (Gerenciadores de layouts)
 
Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)Android - Programação para dispositivos móveis (Aula 2)
Android - Programação para dispositivos móveis (Aula 2)
 
Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)Android - Programação para dispositivos móveis (Aula 1)
Android - Programação para dispositivos móveis (Aula 1)
 
Da introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento AndroidDa introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento Android
 
Open Networking
Open NetworkingOpen Networking
Open Networking
 
Da introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools FlowDa introdução à prática com Drools Expert e Drools Flow
Da introdução à prática com Drools Expert e Drools Flow
 

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

  • 1. Arquitetura Neoway Da captura à disponibilização dos dados
  • 2. Kamila Hinckel Developer at Neoway Data Platform Team Ricardo Longa Developer at Neoway Core Team
  • 3. Sede em Floripa GPTW: 6ª melhor empresa para se trabalhar Big Data Times independentes Neoway
  • 4. O que a Neoway faz?
  • 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. Como processamos mais de 6 milhões de dados por dia?
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 19.
  • 20.
  • 21. Inputs Exemplos: ● CNPJ -> 05.337.875/0001-05 { “cnpj”: “05337875000105” } ● Sequencial -> 061256-01 { “protocolo”: “06125601” } ● CNPJ + Razão Social: { “cnpj”: “05337875000105”, “razaoSocial”: “NEOWAY” }
  • 22.
  • 23.
  • 24. Exemplos: ● QCon São Paulo -> QCON SAO PAULO ● NEOWAY BUSINESS SOLUTIONS -> 05.337.875/0001-05 Tratamento e Enriquecimento
  • 25.
  • 26.
  • 27. Exemplo: Informações das empresas da Receita Federal + Informações dos sócios das Juntas Comerciais = Dados completos de empresas do Brasil Integração
  • 28. Exemplo: ● Dia 1: Nome da empresa -> Neoway LTDA ● Dia 2: Nome da empresa -> Neoway SA Histórico
  • 29.
  • 30. Golang ● Compilada, fortemente tipada ● Standard library completa ● Ferramentas Built-in (go test, go bench) ● Pausas do GC na escala de nanosegundos
  • 31. Golang ● Produtividade ○ Simplista (less is more) ○ Fortemente tipada ● Performance ○ Goroutines (thread 1mb / goroutine 2kb) ● Economia de recursos ○ Baixo consumo de memória
  • 32. 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) }
  • 34. 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
  • 35.
  • 36.
  • 37. Exemplos: ● Nível de atividade de uma empresa ● Faturamento Presumido Modelos Estatísticos
  • 38.
  • 39.
  • 40. ● Conexão persistente ● Novos dados são empurrados pelo servidor ● Sem necessidade de polling ● Controle de processamento via timestamp Stream API
  • 41.
  • 42.
  • 43.
  • 44. ● Interessado em quaisquer tópicos com data-domains.* ● Na sequência, publica a mesma mensagem em domains.* Persistência
  • 45. ● Utilizado p/ pesquisas simples (sempre pelo _id) ● Réplica com três nós ● Sub-arrays separados em collections MongoDB
  • 46. ● 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
  • 47.
  • 48.
  • 49. Como usamos: ● Convenção de nomes de tópicos ○ data-domains.empresas.funcionarios(-> Mongo) ○ domains.empresas.funcionarios(-> ES) Mensageria
  • 50. ● NSQ.io - Plataforma de mensageria ● Distribuída (without any centralized brokers) ● Admin UI ● Official Docker image ● Feito em Go Mensageria
  • 51.
  • 52.
  • 53.
  • 54. ● Interesse em quaisquer tópicos com domains.* Indexação
  • 55. Mapping: ● Estrutura similar ao Mongo(parent / child) Elastic Search
  • 56. Dados indexados: ● Empresas: 6,3 TB ● Pessoas: 3 TB ● Processos Judiciais: 2,2 TB ● Companies USA: 178 GB Elastic Search
  • 57. Um cluster com: ● 13 data nodes ● 3 master nodes Elastic Search
  • 58.
  • 59.
  • 60. Motivo: ● Abtração da síntaxe do Elastic Search Neoway Search DSL
  • 61. { "from": 0, "size": 10, "fields": ["cnpj", "razaoSocial"], "query": { "$or": [ { "$and": [ {"endereco.uf": "SP"}, {"socios.cpf": "12611122211"} ] }, {"totalFuncionarios": {"$lt": 100}} ] } } Neoway Search DSL
  • 62.
  • 63.
  • 64.
  • 65. 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.”
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72. Necessidade: ● Analisar a ligação entre registros de forma visual Neo4J + Keylines
  • 73.
  • 74.
  • 75.
  • 76. ● 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
  • 77.
  • 78.
  • 79.
  • 80. Requisitos: ● Cliente marca empresas em lote ● Cliente busca as empresas com suas marcações Marcadores
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91. E se as filas estiverem congestionadas?
  • 92. Requisito: ● Ao marcar uma empresa, a busca deve retorná-la imediatamente Processamento síncrono
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100. Motivos: ● Sem sessões no servidor ● Informações necessárias trafegam dentro do token ● https://jwt.io/ Json Web Tokens
  • 101.
  • 102.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109. DevOps
  • 110. Infraestrutura ● 200+ crawlers capturando dados ● 70+ microservices ● 200+ instâncias no EC2 ● 100+ instâncias na Azure
  • 111. Linux Containers ● Empacotamento de dependências em “containers” ● Permite versionamento das imagens ● Docker compose ● Rkt (uma alternativa minimalista ao Docker) ● Feito em Go
  • 112. 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)
  • 113.
  • 114. 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
  • 115. 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"
  • 116. Service Discovery “SkyDNS is a distributed service for announcement and discovery of services built on top of etcd.”
  • 117. 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
  • 118. 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
  • 119. 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
  • 122. 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
  • 123.
  • 124.
  • 125.
  • 126.
  • 127. Neoway Open-source Projects ● https://github.com/NeowayLabs ○ nash: /nash ○ klb: /klb
  • 129.
  • 131. Obrigado! :) Kamila Hinckel kamila.hinckel@neoway.com.br Ricardo Longa ricardo.longa@neoway.com.br @ricardolonga ricardolonga kamilash