Dev + Ops = Go
DevOpsCon 2018
C. Petrausch, I. Lankin Dezember 2018
Christoph Petrausch
Systems Engineer
Vorstellungsrunde
2
Igor Lankin
Software Entwickler
Gopher
gophers by @reneefrench @ashleymcnamara3
4
All aboard the hype train!
https://research.hackerrank.com/developer-skills/2018/#insight45
Was ist so toll an Go?
6
einfach
pragmatisch
effizient
modern
Was ist so toll an Go?
statisch typisierte Sprache mit “scripty feeling”
7
8https://www.pexels.com/photo/person-raising-hands-mid-air-sidewards-while-standing-on-gray-steel-railings-680257
Grundbotschaft von Go ist “KISS”
kleine, einfache Lösungen
Lesbarkeit
Verständlichkeit
Einfachheit
Keep It Simple
9
einfache, klare Syntax
weniger Tipparbeit
flaches Typsystem
klarer Programmfluss
einheitliche Formatierung
Lesbarkeit
und Verständlichkeit
10
Tabs vs Spaces
11
standardisierte Formatierung
kein Styleguide
keine Kompromisse
automatische Formatierung (go fmt)
TABS!
Ende des Heiligen Krieges
12
Die Welt hat sich verändert
13
14
große Netzwerke
massive Cluster
Multi-Core Prozessoren
Millionen Code-Zeilen
Web Applikationen
Veränderungen
vor allem bei Google
15
Programmierung häufig umständlich & langsam
schwache Unterstützung von Nebenläufigkeit
lange Build-Zeiten
schlechtes Tooling
Und die Programmiersprachen?
eher weniger
16
Effiziente Entwicklung
Garbage Collector
Networking
Tooling
Nebenläufigkeit
Und Go?
by design!
17
Warten auf die Singularität
18 http://philosophyworkout.blogspot.de/2016/01/a-decade-of-economic-stagnation-looms.html
19
goroutines
go doSomething()
Communicating Sequential Processes (CSP)
21
Interaction between concurrent systems (T. Hoare, 1977)
Channel
https://talks.golang.org/2012/waza.slide22
Abgespaced?
24
Status Quo
25
anno 2015
Video Infrastructure Team
AWS+Data Center
Glasfasernetz
Docker, Prometheus, Grafana
Python, Saltstack
Aufgabe
Encoder Steuern
26
cli
encoder
configure
Let’s build a CLI
no go
› Python
› Sprachversion 2 vs 3
› Viel Testing um Typfehler zu vermeiden
› Mac vs. Linux vs. Windows
› Paketierung?
27
Paketierung
So banal es klingt…
Häufige Probleme:
Paketformat
Python Runtime
Dependency Management
28
Single Binary
All Inclusive
Statisch gelinked
Keine Abhängigkeiten
Cross-Compiling
29
Nachmacher
wir waren nicht die Ersten
30
Aufgabe
Encoder Steuern
31
cli
encoder
configure
for ch := range []{ ard, zdf, … } {
for enc := range []{encoder1,encoder2,...} {
configure(enc, ch)
}
}
Unser erstes Go Programm
naiv
32
Langsam
Encoder Steuern
33
Seeeehr lange Response Zeiten
cli
encoder
configure
for ch := range []{ ard, zdf, … } {
for enc := range []{encoder1,encoder2,...} {
go configure(enc, ch)
}
}
Unser erstes Go Programm
Parallel!
34
Overload
Zu viele Request
35
cli
encoder
configure
rate := time.Second / 10
throttle := time.Tick(rate)
for ch := range []{ ard, zdf, … } {
for enc := range []{encoder1, encoder2,...} {
go func() {
<-throttle
configure(enc, ch)
}()
}
}
Rate limiting
36
mächtige CLIs möglich
- Subcommands
- Usability
- Hilfe
- Robustheit
siehe docker, kubectl
CLIs
ein Traum in Go
37
› Upstreams nicht passende Features
› Upstream Python war schwer anpassbar
› Viele Exporter sind in Go
› Go hat beim CLI Tool funktioniert
Unser erster Go Prometheus Exporter
SNMP Prometheus Exporter
38
› Infrastrukturinformation zugänglich machen
› Interne API
› Build Tooling wie beim Exporter
› Deployment wie beim Exporter
Unser erster Go Service
… einige Exporter später
39
Microservices in Go
40
Effizient & Leichtgewichtig
41
kleine, spezialisierte Bibliotheken
- Auth
- Routing
- DBs / ORM
- Session
- Cloud
- …
Libs statt Frameworks
Oder auch Frameworks
wer es mag...
gin-gonic/gin
go-kit/kit
nytimes/gizmo
micro/go-micro
42
Keep it Simple
43
Robustheit
DevOps!
kleine, spezialisierte Bibliotheken
- Monitoring (prometheus)
- Circuit Breaker (hystrix)
- Logging (logrus, zap)
- Tracing (zipkin)
- Transport (http2, gRPC)
44
45
Built for Backend
Nicht nur Infrastruktur
Schnelle Entwicklung
Extrem Effizienz
Robustheit
Business-Metriken
Embedded UI
46
Go All-In
47
› Steuern des CDN
› Kontrollieren Encoder
› Manipulieren Video Manifeste
› Steuern des Netzwerks
› ….
› Stand heute > 50 Services mit ~5 Entwicklern
Unser erster Go Service
… bleibt nicht allein
48
› … rockt
› … ist geeignet für Infrastruktur
› … ist geeignet für Web Services
› … hat uns extrem effizient gemacht
› … hat auch seine Eigenheiten
Fazit
Go...
49
50
Don’t fight it
51
Dependency Management war schwer
52
Nicht zu viel Concurrency
53
Cross-funktionales Team essentiell
54
Dev + Ops = Go
55
Vielen Dank
Christoph Petrausch
Igor Lankin
inovex GmbH
Ludwig-Erhard-Allee 6
76131 Karlsruhe

Dev + Ops = Go