SlideShare uma empresa Scribd logo
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
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
200+ Crawlers!
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Inputs
Exemplos:
● CNPJ -> 05.337.875/0001-05
{ “cnpj”: “05337875000105” }
● Sequencial -> 061256-01
{ “protocolo”: “06125601” }
● CNPJ + Razão Social:
{ “cnpj”: “05337875000105”, “razaoSocial”: “NEOWAY” }
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Exemplos:
● QCon São Paulo -> QCON SAO PAULO
● NEOWAY BUSINESS SOLUTIONS -> 05.337.875/0001-05
Tratamento e Enriquecimento
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
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
Big Data como Serviço: da captura à visualização de dados com alto desempenho
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
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Exemplos:
● Nível de atividade de uma empresa
● Faturamento Presumido
Modelos Estatísticos
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
● Conexão persistente
● Novos dados são empurrados pelo servidor
● Sem necessidade de polling
● Controle de processamento via timestamp
Stream API
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
● 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
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
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
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
● 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
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
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
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
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.”
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Necessidade:
● Analisar a ligação entre registros de forma visual
Neo4J + Keylines
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
● 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
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Requisitos:
● Cliente marca empresas em lote
● Cliente busca as empresas com suas marcações
Marcadores
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
E se as filas
estiverem
congestionadas?
Requisito:
● Ao marcar uma empresa, a busca deve retorná-la imediatamente
Processamento síncrono
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Motivos:
● Sem sessões no servidor
● Informações necessárias trafegam dentro do token
● https://jwt.io/
Json Web Tokens
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Cliente feliz!
Aplicações
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
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)
Big Data como Serviço: da captura à visualização de dados com alto desempenho
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
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Neoway Open-source Projects
● https://github.com/NeowayLabs
○ nash: /nash
○ klb: /klb
Estamos
contratando!
Big Data como Serviço: da captura à visualização de dados com alto desempenho
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

PDF
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
PPTX
Treze ferramentas/frameworks para desenvolvimento android
PDF
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
PPTX
Android - Frameworks de Persistência
PPTX
Treze ferramentas/frameworks para desenvolvimento Android
PPSX
Aula 05/06 (Service)
PDF
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
PDF
Mini-Curso de MongoDB
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Treze ferramentas/frameworks para desenvolvimento android
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Android - Frameworks de Persistência
Treze ferramentas/frameworks para desenvolvimento Android
Aula 05/06 (Service)
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
Mini-Curso de MongoDB

Mais procurados (20)

PPT
Modelando aplicação em documento - MongoDB
ODP
MongoDB - Tudo o que você precisa saber
PPTX
#5 CRUD no MongoDB
PDF
Introdução ao MongoDB
PDF
Minicurso Epoca mongoDB
PPTX
MongoDB: Uma forma diferente de pensar no desenvolvimento
PDF
Grails parte 1 - introdução
PDF
Aumentando a produtividade com Android Libs
KEY
MongoDB na Campus Party
PDF
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
ODP
MongoDB - Tudo que você precisa saber - FGSL 2014
PDF
Curso mongo db com php
PPTX
#1 Introdução ao MongoDB
PDF
Turbinando o desenvolvimento Android com Kotlin
ZIP
Testes integrados automatizados
PPTX
Como o elasticsearch salvou minhas buscas
PPTX
MongoDB - Iniciando e Conhecendo
PDF
Secomp 2018 - DO Ruby ao Elixir
PPTX
Grails
DOCX
Jwt com implementação apache Oltu
Modelando aplicação em documento - MongoDB
MongoDB - Tudo o que você precisa saber
#5 CRUD no MongoDB
Introdução ao MongoDB
Minicurso Epoca mongoDB
MongoDB: Uma forma diferente de pensar no desenvolvimento
Grails parte 1 - introdução
Aumentando a produtividade com Android Libs
MongoDB na Campus Party
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
MongoDB - Tudo que você precisa saber - FGSL 2014
Curso mongo db com php
#1 Introdução ao MongoDB
Turbinando o desenvolvimento Android com Kotlin
Testes integrados automatizados
Como o elasticsearch salvou minhas buscas
MongoDB - Iniciando e Conhecendo
Secomp 2018 - DO Ruby ao Elixir
Grails
Jwt com implementação apache Oltu
Anúncio

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

PDF
Arquitetura de dados em stream
PDF
Arquitetura de dados em stream - TDC SP 2016
PPTX
Lambda architecture for large data volumes.
PPTX
DevTalk 08/2019
PPTX
Dev Parana - Praticas Devops aplicadas a Big Data
PPTX
Architecture performance using micro services
PDF
Erros que cometemos na arquitetura de micro-serviços e a evolução para Contai...
PDF
Skalena - Overview de Soluções
PDF
Keynote AWS Roadshow Campinas 2013
PDF
AWS Innovate 2020 - Entenda como o Data Flywheel pode apoiá-lo em sua estraté...
PDF
Introdução a Microservices com Node.JS
PDF
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
PDF
Bigadata casese opotunidades
PDF
QCon SP 2016 - WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...
PDF
Cloud & AWS: Da teoria à prática
PDF
Escalando para os primeiros 10 milhoes de usuarios
PDF
Big Data na Nuvem
PDF
Qcon Rio 2015 - Data Lakes Workshop
PDF
Data Lakes com Hadoop e Spark: Agile Analytics na prática
PPTX
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Arquitetura de dados em stream
Arquitetura de dados em stream - TDC SP 2016
Lambda architecture for large data volumes.
DevTalk 08/2019
Dev Parana - Praticas Devops aplicadas a Big Data
Architecture performance using micro services
Erros que cometemos na arquitetura de micro-serviços e a evolução para Contai...
Skalena - Overview de Soluções
Keynote AWS Roadshow Campinas 2013
AWS Innovate 2020 - Entenda como o Data Flywheel pode apoiá-lo em sua estraté...
Introdução a Microservices com Node.JS
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
Bigadata casese opotunidades
QCon SP 2016 - WebAPIs e delivery: Matando a fome de 1 milhão de pedidos men...
Cloud & AWS: Da teoria à prática
Escalando para os primeiros 10 milhoes de usuarios
Big Data na Nuvem
Qcon Rio 2015 - Data Lakes Workshop
Data Lakes com Hadoop e Spark: Agile Analytics na prática
Cloud Native Microservices - Rumo a uma Arquitetura de Microsserviços Nativos...
Anúncio

Mais de Ricardo Longa (18)

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

Último (9)

PPT
09_Evolucao de software e_Refatoracao.ppt
PDF
SLIDES - AULA 3 - CLASSES E OBJETOS EM JAVA - Material de Cleyton Souza - IFPB
PDF
SLIDES - AULA 5 - HERANÇA - Material de Cleyton Souza - IFPB
PPT
03_slide de Gerenciamento de Projetos .ppt
PDF
SLIDES - AULA 2 - INTRODUÇÃO - Material de Cleyton Souza - IFPB
PDF
SLIDES - AULA 1 - APRESENTAÇÃO - Material de Cleyton Souza - IFPB
PPT
06_slide de Arquitetura_de_Software .ppt
PDF
SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB
PPT
05_slide especificacao de sistemas de software e a uml UML.ppt
09_Evolucao de software e_Refatoracao.ppt
SLIDES - AULA 3 - CLASSES E OBJETOS EM JAVA - Material de Cleyton Souza - IFPB
SLIDES - AULA 5 - HERANÇA - Material de Cleyton Souza - IFPB
03_slide de Gerenciamento de Projetos .ppt
SLIDES - AULA 2 - INTRODUÇÃO - Material de Cleyton Souza - IFPB
SLIDES - AULA 1 - APRESENTAÇÃO - Material de Cleyton Souza - IFPB
06_slide de Arquitetura_de_Software .ppt
SLIDES - AULA 7 - SWING - Cleyton Souza - IFPB
05_slide especificacao de sistemas de software e a uml UML.ppt

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?
  • 21. Inputs Exemplos: ● CNPJ -> 05.337.875/0001-05 { “cnpj”: “05337875000105” } ● Sequencial -> 061256-01 { “protocolo”: “06125601” } ● CNPJ + Razão Social: { “cnpj”: “05337875000105”, “razaoSocial”: “NEOWAY” }
  • 24. Exemplos: ● QCon São Paulo -> QCON SAO PAULO ● NEOWAY BUSINESS SOLUTIONS -> 05.337.875/0001-05 Tratamento e Enriquecimento
  • 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
  • 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
  • 37. Exemplos: ● Nível de atividade de uma empresa ● Faturamento Presumido Modelos Estatísticos
  • 40. ● Conexão persistente ● Novos dados são empurrados pelo servidor ● Sem necessidade de polling ● Controle de processamento via timestamp Stream API
  • 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
  • 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
  • 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
  • 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
  • 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.”
  • 72. Necessidade: ● Analisar a ligação entre registros de forma visual Neo4J + Keylines
  • 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
  • 80. Requisitos: ● Cliente marca empresas em lote ● Cliente busca as empresas com suas marcações Marcadores
  • 91. E se as filas estiverem congestionadas?
  • 92. Requisito: ● Ao marcar uma empresa, a busca deve retorná-la imediatamente Processamento síncrono
  • 100. Motivos: ● Sem sessões no servidor ● Informações necessárias trafegam dentro do token ● https://jwt.io/ Json Web Tokens
  • 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)
  • 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
  • 127. Neoway Open-source Projects ● https://github.com/NeowayLabs ○ nash: /nash ○ klb: /klb
  • 131. Obrigado! :) Kamila Hinckel kamila.hinckel@neoway.com.br Ricardo Longa ricardo.longa@neoway.com.br @ricardolonga ricardolonga kamilash