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 := <...
Canais
func compute(ch chan int) {
ch <- someComputation()
}
func main() {
ch := make(chan int)
go compute(ch)
result := <...
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 + encoding
type user struct {
Name string
}
func userHandler (w http.ResponseWriter, r *http.Request) {
u := user{Nam...
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(ra...
race detector
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x8 pc=0x4...
race detector
==================
WARNING: DATA RACE
Read by goroutine 5:
main.func·001()
race.go:14 +0x169
Previous write ...
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 pa...
tsuru (vantagens)
● Debug tools
● Padrão (gofmt, govet)
● Race detector (go test -race)
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
Dúvidas?
● github.com/andrewsmedina
● twitter.com/andrewsmedina
InterCon 2016 - Software as a service usando Go como principal linguagem: os cases globo.com
InterCon 2016 - Software as a service usando Go como principal linguagem: os cases globo.com
InterCon 2016 - Software as a service usando Go como principal linguagem: os cases globo.com
Upcoming SlideShare
Loading in …5
×

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

68 views

Published on

Andrews Medina, Software Engineer da Globo.com fala sobre Software as a service usando Go como principal linguagem: os cases globo.com no InterCon 2016.
Saiba mais em http://intercon2016.imasters.com.br/

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
68
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Software as a service usando Go Andrews Medina
  2. 2. Who Am I ● Desenvolvedor na Globo.com desde 2008 ● Criado de projetos open source como Splinter e tsuru
  3. 3. tsuru.io
  4. 4. tsuru.io ● Torna deploys rápidos e simples ● Suporta Go, Ruby, Python, PHP, Java… ● Open source
  5. 5. tsuru.io $ tsuru app-deploy -a myapp -i dockerimage
  6. 6. tsuru.io $ tsuru app-deploy -a myapp -i grafana/grafana
  7. 7. Go ● Começou em 2007 por Robert Griesemer, Ken Thompson, and Rob Pike ● Aberta em 2009
  8. 8. Quem usa Go?
  9. 9. Quem usa Go?
  10. 10. Hello World! package main import "fmt" func main() { fmt.Println("Hello, 世界!") }
  11. 11. motivação
  12. 12. Escalar maquinas
  13. 13. Rápida e eficiente para computadores
  14. 14. Tipagem estática var users []User
  15. 15. Compilada $ go build ./main
  16. 16. Suporte a concorrência
  17. 17. Goroutines go sort(s[:i]) go sort(s[i:])
  18. 18. Goroutines go sort(s[:i]) go sort(s[i:])
  19. 19. Canais func compute(ch chan int) { ch <- someComputation() } func main() { ch := make(chan int) go compute(ch) result := <-ch }
  20. 20. Canais func compute(ch chan int) { ch <- someComputation() } func main() { ch := make(chan int) go compute(ch) result := <-ch }
  21. 21. Divertida e rápida para os seres humanos
  22. 22. Linguagem enxuta e simples
  23. 23. Inferência de tipos numbers := int{1, 2, 3}
  24. 24. Interfaces e duck typing type Closes interface { Close() }
  25. 25. Biblioteca padrão rica ● Encoding (json, xml) ● http ● html (template) ● image ● crypto
  26. 26. http func main() { http.HandleFunc("/hello", handleHello) http.ListenAndServe("localhost:7777", nil) } func handleHello(w http.ResponseWriter, req *http.Request) { fmt.Fprintln(w, "Hello, 世界!") }
  27. 27. 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) }
  28. 28. Compilação rápida $ go build ./main
  29. 29. Cross compilation $ GOOS=linux GOARCH=amd64 go build ./main
  30. 30. gofmt $ gofmt
  31. 31. gofmt func main() { http.HandleFunc("/hello", handleHello) http.ListenAndServe("localhost:7777", nil) }
  32. 32. gofmt func main() { http.HandleFunc("/hello", handleHello) http.ListenAndServe("localhost:7777", nil) }
  33. 33. race detector $ go (run|test) -race
  34. 34. 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)) }
  35. 35. 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
  36. 36. 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 ==================
  37. 37. profiling ● Profiler de memória e cpu ● Benchmarks automatizados
  38. 38. Go na Globo.com
  39. 39. tsuru.io
  40. 40. tsuru ● ~300 deploys por dia ● ~800 aplicações ● ~1400 units
  41. 41. tsuru ● Api REST ● Command line interface ● agents
  42. 42. tsuru (vantagens) ● Baixo overhead ● Cross compile (windows, linux, mac) ● Performance, no-blocking I/O, concorrência e paralelismo
  43. 43. tsuru (vantagens) ● Debug tools ● Padrão (gofmt, govet) ● Race detector (go test -race)
  44. 44. ID ● Api REST
  45. 45. ID (vantagens) ● Performance ● Simplicidade
  46. 46. Cartola ● Api REST ● Command line interface ● agents
  47. 47. Cartola ● 7 milhões de jogadores ● 500 mil simultâneos
  48. 48. Cartola ● Api REST ● Processamento em background
  49. 49. Cartola ● Performance sem precisar “escovar bits” ● Antes 24 máquinas com 24 cores ● Agora 24 máquinas com 4 cores
  50. 50. Simples e consistente
  51. 51. Fácil de aprender
  52. 52. Boa para máquina, boa para humanos
  53. 53. Dúvidas? ● github.com/andrewsmedina ● twitter.com/andrewsmedina

×