Successfully reported this slideshow.

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

0

Share

Upcoming SlideShare
Linguagem Go
Linguagem Go
Loading in …3
×
1 of 56
1 of 56

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

0

Share

Download to read offline

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/

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/

More Related Content

More from iMasters

Related Books

Free with a 14 day trial from Scribd

See all

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

×