| Go Language for Ops and Site Reliability Engineering |
| |
| Gustavo Franco |
| Site Reliability Engineer, Google |
| http://developers.google.com |
| |
| * Operations vs Site Reliability Engineering |
| |
| Operations |
| |
| - Interrupt driven |
| - Repetitive |
| - Hard to scale |
| |
| Site Reliability Engineering |
| |
| - Project oriented |
| - Values automation |
| - Focus on scale |
| |
| * Go Programming Language |
| |
| "Go is an open source programming environment that makes it easy to build simple, |
| reliable, and efficient software." -- golang.org |
| |
| * Hello OSCON |
| |
| .play go-sreops/hello.go |
| |
| $ go run hello.go -help |
| Usage of /tmp/go-build212699297/command-line-arguments/_obj/a.out: |
| -message="Hello, OSCON!": what to say |
| exit status 2 |
| |
| * Programming for SRE and Ops - State of the Union |
| |
| - "I will just write a small throw away script for that" |
| |
| - "I don't want to learn a new language" |
| |
| - "Language X is awesome and solves everything" |
| |
| * Programming for SRE and Ops - Where do we go? |
| |
| - One liners are here to stay |
| |
| - Throw away scripts too so let's make them better |
| |
| - Think of languages you can read as a toolkit |
| |
| - Get very good at writing in just a few of them |
| |
| * Agenda |
| |
| - Why Go for Ops and SRE? |
| |
| - Go features |
| |
| - Go in production at Google |
| |
| - Go in production outside Google |
| |
| - Q&A |
| |
| * Why Go for Ops and SRE? Simple, reliable and efficient |
| |
| - Open Source |
| |
| - One binary to rule them all |
| |
| - No need for a Makefile, import defined dependencies |
| |
| - Very fast compilation |
| |
| * Why Go for Ops and SRE? Simple, reliable and efficient |
| |
| - Garbage collection |
| |
| - Readability is easy to achieve via gofmt |
| |
| - RE2 regular expressions |
| |
| - Testing, benchmarking and profiling built-in |
| |
| * Why Go for Ops and SRE? Standard library examples |
| |
| .link /pkg/fmt fmt |
| |
| .link /pkg/io/ioutil io/ioutil |
| |
| .link /pkg/net/http net/http |
| |
| .link /pkg/os/exec os/exec |
| |
| .link /pkg/path/filepath path/filepath |
| |
| .link /pkg/regexp regexp |
| |
| .link /pkg/strings strings |
| |
| .link /pkg/text/tabwriter text/tabwriter |
| |
| .link /pkg/time time |
| |
| [[https://pkg.go.dev/][pkg.go.dev]] to your needs beyond the standard library |
| |
| * Why Go for Ops and SRE? Concurrency via Goroutines |
| |
| .play go-sreops/goroutines.go |
| |
| * Why Go for Ops and SRE? Concurrency and Channels |
| |
| .play go-sreops/goroutines-channels.go /START/,/STOP/ |
| |
| * Go features |
| |
| - Hashes or dicts? Maps |
| |
| - Arrays? Yes, but you will probably want to use Slices instead |
| |
| - Modules are called Packages |
| |
| - Structs |
| |
| - Methods |
| |
| - Pointers without arithmetic operations |
| |
| Go grows with you - see interfaces and reflection |
| |
| * Go in production at Google |
| |
| dl.google.com - OSCON talk by Brad Fitzpatrick Friday, 10:00am |
| |
| .link http://code.google.com/p/vitess Vitess |
| |
| vtocc: front-end to MySQL that improves scalability |
| |
| .link http://code.google.com/p/emtail Emtail |
| |
| Whitebox monitoring data from logs to a timeseries database |
| |
| .link http://code.google.com/p/go-commander Go Commander |
| |
| Command line library for Go |
| |
| Machine lifecycle management |
| |
| via App Engine |
| |
| * Go in production outside Google |
| |
| .link http://labix.org/pipe Pipe |
| |
| Unix-like pipelines for Go |
| |
| .link http://www.gocircuit.org Gocircuit |
| |
| Inter host Goroutines |
| |
| .link http://juju.ubuntu.com Juju |
| |
| Service orchestration management tool |
| |
| .link http://www.docker.io Docker |
| |
| Containers management tool |
| |
| .link http://www.packer.io Packer |
| |
| Tool for creating identical machine images for multiple platforms |
| |
| * Q&A |
| |
| Take the tour - [[tour.golang.org]] |