=1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10...

29
Diego Bernardes Gaulke

Transcript of =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10...

Page 1: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

GOLANG EM UM GRANDE PRODUTO

GOLANG , GO BIG

Diego Bernardes Gaulke

Page 2: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

DIEGO GAULKEENGENHEIRO DE SOFTWARE

[email protected]

https://github.com/diegogaulke

https://www.linkedin.com/in/diegobernardesgaulke/

Page 3: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

OS DADOS...

Page 4: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

BRASILEIROS ENDIVIDADOS

Page 5: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

BRASILEIROS ENDIVIDADOS

50%

Page 6: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

POPULAÇÃO ECONOMICAMENTE ATIVA (PEA)

120 Milhões de brasileiros

Page 7: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

INADIMPLENTES

60 milhões de Brasileiros50% da PEA

Page 8: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

QUANTAS DÍVIDAS EXISTEM NO BRASIL?

NA BASE DA MAIOR EMPRESA DE

RECUPERAÇÃO DE CRÉDITO?

Page 9: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

QUANTAS DÍVIDAS EXISTEM NO BRASIL?

NA BASE DA MAIOR EMPRESA DE

RECUPERAÇÃO DE CRÉDITO?

350 milhões de dívidas

Page 10: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

O PROBLEMA...

Aumento de acessos no siteDisponibilizar informações em tempo realConcorrência computacional com grandes parceirosQuedas constantes (throttling mainframe)

Page 11: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

E TEM MAIS...

Custo de mainframeUm novo produto entrando no arCampanhas de mídia online e offline já agendadasPouco tempo para resolução

Page 12: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

COMO RESOLVER?

Buscar uma fonte de dados alternativaNão concorrer com outras áreas ou parceirosManter uma base consistente

Page 13: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

DESAFIOS

6 tipos de dividasAtualização D-1Regras de negócio na carga dos dados

Page 14: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

MAIS DESAFIOS...

Grande quantidade de dados sensíveisFalta de documentação e normalização dos dados disponíveisArmazenamento de dados sensíveis na nuvem (compliance)

Page 15: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

PRIMEIRA "SOLUÇÃO" ...

Golang para ETLDynamoDBIndice CPF criptografadoGoroutines controladas (channels)

Page 16: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

PROBLEMAS

Goroutines controladas (channels)DynamoDB

Page 17: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

DYNAMODB

Não é feito para escalar de maneira rápidaDeixar ele "escalado" tem um custo muito altoPreso a uma única cloudDemora na carga dos dados (mais de 10 horas para 50 milhões de registros)

Page 18: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

MESMO ASSIM...

A solução importou 3 tipos de dívidasAparentemente estava rodando sem problemasTrazia rapidamente os registros de dívidas pelo CPF

Page 19: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

MAS...

Como conferir a consistência do que foi importado?Como contar a quantidade de dívidas importadas por cada tipo?Como aumentar a performance da carga?Como diminuir a complexidade das rotinas no Go?

Page 20: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

OUTROS PROBLEMAS...

Para um CPF com 5 dívidas apareciam apenas 3DynamoDB fazendo throttling e API da aws não dava erro

Page 21: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

"VOCÊS DEVEM ESTAR

FAZENDO ERRADO"

Page 22: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

"CLANDESTINO"

Diminuir a complexidade do código GoReduzir o custo de cloudAumentar a velocidade da carga dos dadosMonitorar e aferir a consistência da base

Page 23: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

SOLUÇÃO "1"

LogstashElastic Search

Page 24: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

DESCARTE SOLUÇÃO "1"

Go como "plugin" para o LogstashElastic SearchUma camada a mais de controle

Page 25: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

"SOLUÇÃO 2"

(ESCOLHIDA)

Elastic SearchGolangBiblioteca ElasticSearch para Go, Olivere

Page 26: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

MODELAGEMINDEXAÇÃO

Índice por tipo de dívida e pela data da cargaPossibilidade em caso de falha de refazer a carga

Page 27: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

CONCLUSÃO

Redução de custoBaixa complexidade de códigoPossibilidade de aferição rápida dos dadosConsistência dos dados importados

Page 28: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

AGRADECIMENTOS

Page 29: =1 8 ; = # =1 8 7 W7 J 8 GJ= WS= · Preso a uma única cloud Demora na carga dos dados (mais de 10 horas para 50 milhões de registros) 7 N7=; NN#7 ... Golang Biblioteca ElasticSearch

FIM

Dúvidas?

[email protected]/diegogaulke