SlideShare uma empresa Scribd logo
Software as a service usando
Go
Andrews Medina
Who Am I
● Desenvolvedor na Globo.com desde 2008
● Criado de projetos open source como Splinter e tsuru
tsuru.io
tsuru.io
● Torna deploys rápidos e simples
● Suporta Go, Ruby, Python, PHP, Java…
● Open source
tsuru.io
$ tsuru app-deploy -a myapp -i dockerimage
tsuru.io
$ tsuru app-deploy -a myapp -i grafana/grafana
Go
● Começou em 2007 por Robert Griesemer, Ken Thompson, and Rob Pike
● Aberta em 2009
Quem usa Go?
Quem usa Go?
Hello World!
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界!")
}
motivação
Escalar maquinas
Rápida e eficiente para
computadores
Tipagem estática
var users []User
Compilada
$ go build
./main
Suporte a concorrência
Goroutines
go sort(s[:i])
go sort(s[i:])
Goroutines
go sort(s[:i])
go sort(s[i:])
Canais
func compute(ch chan int) {
ch <- someComputation()
}
func main() {
ch := make(chan int)
go compute(ch)
result := <-ch
}
Canais
func compute(ch chan int) {
ch <- someComputation()
}
func main() {
ch := make(chan int)
go compute(ch)
result := <-ch
}
InterCon 2016 - Software as a service usando Go como principal linguagem: os cases globo.com
Divertida e rápida para
os seres humanos
Linguagem enxuta
e simples
Inferência de tipos
numbers := int{1, 2, 3}
Interfaces e duck typing
type Closes interface {
Close()
}
Biblioteca padrão rica
● Encoding (json, xml)
● http
● html (template)
● image
● crypto
http
func main() {
http.HandleFunc("/hello", handleHello)
http.ListenAndServe("localhost:7777", nil)
}
func handleHello(w http.ResponseWriter, req *http.Request) {
fmt.Fprintln(w, "Hello, 世界!")
}
http + encoding
type user struct {
Name string
}
func userHandler (w http.ResponseWriter, r *http.Request) {
u := user{Name: “andrews”}
b, err := json.Marshal(u)
if err != nil {
panic(err)
}
w.Write(b)
}
Compilação rápida
$ go build
./main
Cross compilation
$ GOOS=linux GOARCH=amd64 go build
./main
gofmt
$ gofmt
gofmt
func main() {
http.HandleFunc("/hello", handleHello)
http.ListenAndServe("localhost:7777", nil)
}
gofmt
func main() {
http.HandleFunc("/hello", handleHello)
http.ListenAndServe("localhost:7777", nil)
}
race detector
$ go (run|test) -race
race detector
func main() {
start := time.Now()
var t *time.Timer
t = time.AfterFunc(randomDuration(), func() {
t.Reset(randomDuration())
})
time.Sleep(5 * time.Second)
}
func randomDuration() time.Duration {
return time.Duration(rand.Int63n(1e9))
}
race detector
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x8 pc=0x41e38a]
goroutine 4 [running]:
time.stopTimer(0x8, 0x12fe6b35d9472d96)
src/pkg/runtime/ztime_linux_amd64.c:35 +0x25
time.(*Timer).Reset(0x0, 0x4e5904f, 0x1)
src/pkg/time/sleep.go:81 +0x42
main.func·001()
race.go:14 +0xe3
created by time.goFunc
src/pkg/time/sleep.go:122 +0x48
race detector
==================
WARNING: DATA RACE
Read by goroutine 5:
main.func·001()
race.go:14 +0x169
Previous write by goroutine 1:
main.main()
race.go:15 +0x174
Goroutine 5 (running) created at:
time.goFunc()
src/pkg/time/sleep.go:122 +0x56
timerproc()
src/pkg/runtime/ztime_linux_amd64.c:181 +0x189
==================
profiling
● Profiler de memória e cpu
● Benchmarks automatizados
Go na Globo.com
tsuru.io
tsuru
● ~300 deploys por dia
● ~800 aplicações
● ~1400 units
tsuru
● Api REST
● Command line interface
● agents
tsuru (vantagens)
● Baixo overhead
● Cross compile (windows, linux, mac)
● Performance, no-blocking I/O, concorrência e paralelismo
tsuru (vantagens)
● Debug tools
● Padrão (gofmt, govet)
● Race detector (go test -race)
InterCon 2016 - Software as a service usando Go como principal linguagem: os cases globo.com
ID
● Api REST
ID (vantagens)
● Performance
● Simplicidade
Cartola
● Api REST
● Command line interface
● agents
Cartola
● 7 milhões de jogadores
● 500 mil simultâneos
Cartola
● Api REST
● Processamento em background
Cartola
● Performance sem precisar “escovar bits”
● Antes 24 máquinas com 24 cores
● Agora 24 máquinas com 4 cores
Simples e consistente
Fácil de aprender
Boa para máquina, boa
para humanos
InterCon 2016 - Software as a service usando Go como principal linguagem: os cases globo.com
Dúvidas?
● github.com/andrewsmedina
● twitter.com/andrewsmedina

Mais conteúdo relacionado

PDF
Linguagem Go
PDF
Introdução a linguagem Go
PDF
Possibilidades com python
PDF
Why functional programming matters
PDF
Treinamento com SphinxTrain
PDF
TDC2016SP - Trilha Node.Js
DOCX
Exercício da lógica (16 ao 25)
KEY
Design de código: princípios e práticas para ter um código sustentável
Linguagem Go
Introdução a linguagem Go
Possibilidades com python
Why functional programming matters
Treinamento com SphinxTrain
TDC2016SP - Trilha Node.Js
Exercício da lógica (16 ao 25)
Design de código: princípios e práticas para ter um código sustentável

Mais procurados (11)

PDF
Jug bizus (4)
PDF
Jug bizus
PDF
[Devcamp] usando programação funcional agora!
PDF
Compilando o Android 5 para o Nexus 5
PPTX
Fazendo Analise de dados SÓ com Python (Just Python)
PDF
shell bash Fpar aula6
PPTX
programação c 10 aula
PPTX
Revisão - Funções
PDF
Gnome no FreeBSD
PDF
Git para quem gosta de Git
PDF
Python e Linux para a criação de ferramentas para pentest
Jug bizus (4)
Jug bizus
[Devcamp] usando programação funcional agora!
Compilando o Android 5 para o Nexus 5
Fazendo Analise de dados SÓ com Python (Just Python)
shell bash Fpar aula6
programação c 10 aula
Revisão - Funções
Gnome no FreeBSD
Git para quem gosta de Git
Python e Linux para a criação de ferramentas para pentest
Anúncio

Destaque (8)

PPTX
Containerisation and DEIS
PPTX
Artificial intelligence
PPTX
Tsuru @ Devops world
PDF
Deis overview
PDF
Deis, a PaaS built with Docker, Docker Meetup Sao Paulo #3 @Wayra
PDF
Build your own PaaS using Kubernetes and Deis — GDG DevFest NL
PDF
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
PDF
Deis - Building our own PaaS at Springest
Containerisation and DEIS
Artificial intelligence
Tsuru @ Devops world
Deis overview
Deis, a PaaS built with Docker, Docker Meetup Sao Paulo #3 @Wayra
Build your own PaaS using Kubernetes and Deis — GDG DevFest NL
[EXTENDED] Ceph, Docker, Heroku Slugs, CoreOS and Deis Overview
Deis - Building our own PaaS at Springest
Anúncio

Semelhante a InterCon 2016 - Software as a service usando Go como principal linguagem: os cases globo.com (20)

PDF
[Android devcamp] Android Bootcamp – 2012
PDF
Entre na fila. Processamento distribuído usando Gearman
PDF
Golang para desenvolvedores pragmáticos parte 2
PPT
Python No Terra (2006-12-21)
PDF
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
ODP
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
PDF
Adeus Wordpress. Ola Pelican!
PDF
Minicurso Python
PDF
Introdução a linguagem Python
PDF
Flutter do zero a publicacao
PDF
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
PDF
Cacheamento Lado Servidor
PDF
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
PDF
Python Para Maemo
PDF
Arduino e Python: Do It Yourself
PDF
Flutter do zero a publicacao
PDF
JavaScript - A Linguagem
PDF
Frameworks para C 3º DeSif
PDF
Python: Cabe no seu bolso, no seu micro, no seu cérebro.
[Android devcamp] Android Bootcamp – 2012
Entre na fila. Processamento distribuído usando Gearman
Golang para desenvolvedores pragmáticos parte 2
Python No Terra (2006-12-21)
(2013-05-20) [DevInSampa] AudioLazy - DSP expressivo e em tempo real para o P...
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Adeus Wordpress. Ola Pelican!
Minicurso Python
Introdução a linguagem Python
Flutter do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
Cacheamento Lado Servidor
Tutorial dev cpp 002 - criação, leitura e alteração de arquivos
Python Para Maemo
Arduino e Python: Do It Yourself
Flutter do zero a publicacao
JavaScript - A Linguagem
Frameworks para C 3º DeSif
Python: Cabe no seu bolso, no seu micro, no seu cérebro.

Mais de iMasters (20)

PPTX
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
PDF
Postgres: wanted, beloved or dreaded? - Fabio Telles
PPTX
Por que minha query esta lenta? - Suellen Moraes
PPTX
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
PDF
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
PPTX
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
PDF
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
PDF
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
PDF
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
PDF
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
PDF
Entendendo os porquês do seu servidor - Talita Bernardes
PDF
Backend performático além do "coloca mais máquina lá" - Diana Arnos
PPTX
Dicas para uma maior performance em APIs REST - Renato Groffe
PPTX
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
PDF
Quem se importa com acessibilidade Web? - Mauricio Maujor
PDF
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
PDF
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
PDF
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
PDF
Construindo aplicações mais confiantes - Carolina Karklis
PDF
Monitoramento de Aplicações - Felipe Regalgo
O que você precisa saber para modelar bancos de dados NoSQL - Dani Monteiro
Postgres: wanted, beloved or dreaded? - Fabio Telles
Por que minha query esta lenta? - Suellen Moraes
Relato das trincheiras: o dia a dia de uma consultoria de banco de dados - Ig...
ORMs heróis ou vilões dentro da arquitetura de dados? - Otávio gonçalves
SQL e NoSQL trabalhando juntos: uma comparação para obter o melhor de ambos -...
Arquitetando seus dados na prática para a LGPD - Alessandra Martins
O papel do DBA no mundo de ciência de dados e machine learning - Mauro Pichil...
Desenvolvimento Mobile Híbrido, Nativo ou Web: Quando usá-los - Juliana Chahoud
Use MDD e faça as máquinas trabalharem para você - Andreza Leite
Entendendo os porquês do seu servidor - Talita Bernardes
Backend performático além do "coloca mais máquina lá" - Diana Arnos
Dicas para uma maior performance em APIs REST - Renato Groffe
7 dicas de desempenho que equivalem por 21 - Danielle Monteiro
Quem se importa com acessibilidade Web? - Mauricio Maujor
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
Erros: Como eles vivem, se alimentam e se reproduzem? - Augusto Pascutti
Elasticidade e engenharia de banco de dados para alta performance - Rubens G...
Construindo aplicações mais confiantes - Carolina Karklis
Monitoramento de Aplicações - Felipe Regalgo

Último (20)

PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Curso de Java 14 - (Explicações Adicionais (Classes Abstrata e Interface)).pptx
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Aula sobre banco de dados com firebase db
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Émile Durkheim slide elaborado muito bom
PPTX
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
PPTX
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
PPTX
Curso de Java 17 - (JEE (Sessões e Cookies)).pptx
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
Apple Pippin Uma breve introdução. - David Glotz
Curso de Java 14 - (Explicações Adicionais (Classes Abstrata e Interface)).pptx
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Aula sobre banco de dados com firebase db
Custos e liquidação no SAP Transportation Management, TM130 Col18
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Émile Durkheim slide elaborado muito bom
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
Curso de Java 17 - (JEE (Sessões e Cookies)).pptx
Processos na gestão de transportes, TM100 Col18
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
COBITxITIL-Entenda as diferença em uso governança TI
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14

InterCon 2016 - Software as a service usando Go como principal linguagem: os cases globo.com