Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
All aboard the hype train!
https://research.hackerrank.com/developer-skills/2018/#insight4 5
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
EinfachheitKeep It Simple
9
einfache, klare Syntax
weniger Tipparbeit
flaches Typsystem
klarer Programmfluss
einheitliche Formatierung
Lesbarkeitund Verständlichkeit
10
standardisierte Formatierung
kein Styleguide
keine Kompromisse
automatische Formatierung (go fmt)
TABS!
Ende des Heiligen Krieges
12
große Netzwerke
massive Cluster
Multi-Core Prozessoren
Millionen Code-Zeilen
Web Applikationen
Veränderungenvor 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
Warten auf die Singularität
18 http://philosophyworkout.blogspot.de/2016/01/a-decade-of-economic-stagnation-looms.html
Communicating Sequential Processes (CSP)
21
Interaction between concurrent systems (T. Hoare, 1977)
Channel
Status Quo
25
anno 2015
Video Infrastructure Team
AWS+Data Center
Glasfasernetz
Docker, Prometheus, Grafana
Python, Saltstack
Let’s build a CLIno go
› Python› Sprachversion 2 vs 3› Viel Testing um Typfehler zu vermeiden› Mac vs. Linux vs. Windows› Paketierung?
27
PaketierungSo banal es klingt…
Häufige Probleme:
Paketformat
Python Runtime
Dependency Management
28
for ch := range []{ ard, zdf, … } {for enc := range []{encoder1,encoder2,...} {
configure(enc, ch)}
}
Unser erstes Go Programmnaiv
32
for ch := range []{ ard, zdf, … } {for enc := range []{encoder1,encoder2,...} {
go configure(enc, ch)}
}
Unser erstes Go ProgrammParallel!
34
rate := time.Second / 10throttle := time.Tick(rate)for ch := range []{ ard, zdf, … } {
for enc := range []{encoder1, encoder2,...} {go func() {
<-throttleconfigure(enc, ch)
}()}
}
Rate limiting
36
mächtige CLIs möglich
- Subcommands- Usability- Hilfe- Robustheit
siehe docker, kubectl
CLIsein 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 ExporterSNMP 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
Effizient & Leichtgewichtig
41
kleine, spezialisierte Bibliotheken
- Auth- Routing- DBs / ORM- Session- Cloud- …
Libs statt Frameworks
RobustheitDevOps!
kleine, spezialisierte Bibliotheken
- Monitoring (prometheus)- Circuit Breaker (hystrix)- Logging (logrus, zap)- Tracing (zipkin)- Transport (http2, gRPC)
44
Built for BackendNicht nur Infrastruktur
Schnelle Entwicklung
Extrem Effizienz
Robustheit
Business-Metriken
Embedded UI
46
› 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
FazitGo...
49