qconsp 2016 go em produÇÃo para apis e … · fornece informações de usuários para cada time...

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

Upload: voduong

Post on 09-Nov-2018

213 views

Category:

Documents


0 download

TRANSCRIPT

GO EM PRODUÇÃO PARA APIS E MICROSERVICES

QCONSP 2016

APRESENTAÇÃO

VINICIUS FEITOSA PACHECO

▸ Analista na globo.com

▸ Instrutor na Caelum

▸ Teólogo de formação

▸ github.com/viniciusfeitosa

▸ @ViniciusPach

▸ viniciusfeitosa.com.br

QUER TRABALHAR CONOSCO?

HTTPS://TALENTOS.GLOBO.COM

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

ONDE EU ME ENCAIXO NESSES NÚMEROS?

GloboID

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

ECOSSISTEMA DE CADASTRO DO GLOBOID.

Composição de softwares

ECOSSISTEMA API DE CADASTRO

MONOLÍTICO API (JAVA, SPRING)

MONOLÍTICO CORE (JAVA)

BANCO DE DADOS (ORACLE)

FRONT-END (SCALA, PLAY, ANGULAR)

MONOLITOS

O que são?

COMO VOCÊ ACHA QUE É

MONOLITO

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

MONOLITO

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

VAMOS MUDAR PARA UMA NOVA ARQUITETURA.

Microservices

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

COMO DEVERIAM SER

MICROSERVICES

PROVA DE CONCEITO

KRATOS X GOLUN

SIMPLICIDADE É ALGO MUITO IMPORTANTE

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

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();

}

}

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") } }

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

GLIVE.

PATTERN MICROSERVICE

POST UPDATE DELETE

CACHE QUEUE

GET

GOROUTINESOUTROS MICROSERVICES

DATABASE

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

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

E O LEGADO?

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

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

DÚVIDAS.