conferência internacional de desenvolvimento de …...captação e gerenciamento de todos os...

29
GO EM PRODUÇÃO PARA APIS E MICROSERVICES QCONSP 2016

Upload: others

Post on 28-Jun-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

GO EM PRODUÇÃO PARA APIS E MICROSERVICES

QCONSP 2016

Page 2: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

APRESENTAÇÃO

VINICIUS FEITOSA PACHECO

▸ Analista na globo.com

▸ Instrutor na Caelum

▸ Teólogo de formação

▸ github.com/viniciusfeitosa

▸ @ViniciusPach

▸ viniciusfeitosa.com.br

Page 3: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

QUER TRABALHAR CONOSCO?

HTTPS://TALENTOS.GLOBO.COM

Page 4: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

MÉTRICAS GLOBO.COM

O DESAFIO

▸ Mais de 50 milhões de acesso diários

▸ Votações com mais de 4k/req por segundo

▸ Aplicações que podem gerar 300k/req por segundo

▸ Inclinação para BigData

▸ Captura de informação mais fácil do usuário logado

Page 5: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

ONDE EU ME ENCAIXO NESSES NÚMEROS?

GloboID

Page 6: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

MINHA ÁREA

O GLOBOID

▸ Captação e gerenciamento de todos os usuários da globo.com

▸ Autenticação e autorização de cada usuário

▸ Fornece informações de usuários para cada time da globo.com

▸ Atende a outras empresas do grupo globo

Page 7: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

ECOSSISTEMA DE CADASTRO DO GLOBOID.

Composição de softwares

Page 8: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

ECOSSISTEMA API DE CADASTRO

MONOLÍTICO API (JAVA, SPRING)

MONOLÍTICO CORE (JAVA)

BANCO DE DADOS (ORACLE)

FRONT-END (SCALA, PLAY, ANGULAR)

Page 9: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

MONOLITOS

O que são?

Page 10: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

COMO VOCÊ ACHA QUE É

MONOLITO

Page 11: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

COMO ELES REALMENTE SÃO (NA MAIORIA DAS VEZES)

MONOLITO

Page 12: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

ECOSSISTEMA API DE CADASTRO

STATUS

▸ Cadastra 200 usuários por segundo

▸ 2 grandes sistemas monolíticos

▸ Bibliotecas antigas e difíceis de atualizar

▸ Alto risco no deploy

▸ Merges numerosos e perigosos

Page 13: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

VAMOS MUDAR PARA UMA NOVA ARQUITETURA.

Microservices

Page 14: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

MICRO SERVIÇO NÃO ESTÁ LIGADO AO TAMANHO DA APLICAÇÃO, MAS AO TAMANHO DO NEGÓCIO.

Mario Fusco

O QUE É MICRO SERVIÇO

Page 15: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

COMO DEVERIAM SER

MICROSERVICES

Page 16: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

PROVA DE CONCEITO

KRATOS X GOLUN

Page 17: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

SIMPLICIDADE É ALGO MUITO IMPORTANTE

Page 18: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

HEY HO LET’S GO

NO QUE O GO NOS ATENDE MELHOR

▸ Simplicidade de código

▸ Biblioteca nativa completa

▸ Linguagem mais próximo da máquina (Compilada)

▸ Linguagem de alta performance

▸ Simplicidade para programação concorrente

▸ Muitas libs e ferramentas disponíveis

▸ Ótima documentação

Page 19: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

SIMPLICIDADE

UNDERTOWpublic class HelloWorldServer {

public static void main(final String[] args) {

Undertow server = Undertow.builder()

.addHttpListener(8080, "localhost")

.setHandler(new HttpHandler() {

@Override

public void handleRequest(final HttpServerExchange exchange) throws Exception {

exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");

exchange.getResponseSender().send("Hello World");

}

}).build();

server.start();

}

}

Page 20: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

SIMPLICIDADE

GOpackage main

import (

"fmt"

"net/http"

)

func handler(w http.ResponseWriter, r *http.Request) {

fmt.Fprint(w, “Hello, World")

}

func main() {

http.HandleFunc("/", handler)

http.ListenAndServe(":8080", nil)

}

func TestHandler(t *testing.T) { req, err := http.NewRequest("GET", "/", nil) if err != nil { log.Fatal(err) } w := httptest.NewRecorder()

handler(w, req) if w.Code != http.StatusOK { t.Error("Erro ao retornar o code") }

if w.Body.String() != "Hello, World\n" { t.Error("Erro ao retornar o body") } }

Page 21: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

PROGRAMAÇÃO CONCORRENTE

GOfunc main() { jobs := make(chan int, 100) results := make(chan int, 100)

for w := 1; w <= 3; w++ { go worker(w, jobs, results) }

for j := 1; j <= 9; j++ { jobs <- j } close(jobs)

for a := 1; a <= 9; a++ { <-results } }

func worker(id int, jobs <-chan int, results chan<- int) { for j := range jobs { fmt.Println("worker", id, "processing job", j) time.Sleep(time.Second) results <- j * 2 } }

worker 3 processing job 1 worker 1 processing job 2 worker 2 processing job 3 worker 3 processing job 4 worker 2 processing job 5 worker 1 processing job 6 worker 3 processing job 8 worker 1 processing job 7 worker 2 processing job 9

fonte: https://gobyexample.com/worker-pools

Page 22: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

GLIVE.

Page 23: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

PATTERN MICROSERVICE

POST UPDATE DELETE

CACHE QUEUE

GET

GOROUTINESOUTROS MICROSERVICES

DATABASE

Page 24: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

ECOSSISTEMA GO

O QUE ESTAMOS USANDO

▸ Muxer Pat - https://github.com/bmizerany/pat

▸ Redigo - https://github.com/garyburd/redigo

▸ mgo - https://labix.org/mgo

▸ ampq - https://github.com/streadway/amqp

▸ godep - https://github.com/tools/godep

▸ Testify - https://github.com/stretchr/testify

▸ govalidator - https://github.com/asaskevich/govalidator

▸ gotains - https://github.com/viniciusfeitosa/gotains

Page 25: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

GLIVE

STATUS

▸ Cadastra 19k usuários por segundo

▸ Pool de microservices

▸ Muita biblioteca nativa do Go e libs fáceis de mudar

▸ Deploy fácil e com cache para tempo de intermitência

▸ Merges distribuídos e mais simples

Page 26: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

E O LEGADO?

Page 27: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

ECOSSISTEMA GLIVE E O LEGADO

MONOLÍTICO API (JAVA, SPRING)

MONOLÍTICO CORE (JAVA)

BANCO DE DADOS (ORACLE)

FRONT-END (SCALA, PLAY, ANGULAR)

GLIVE

CONSUMER E

SYNC

Page 28: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

NÃO É MENTIRA. 1º DE ABRIL WORKSHOP DE MICROSERVICES EM GO NA QCONSP 2016

Page 29: Conferência Internacional de Desenvolvimento de …...Captação e gerenciamento de todos os usuários da globo.com Autenticação e autorização de cada usuário Fornece informações

DÚVIDAS.