Dev + Ops = Go · - Transport (http2, gRPC) 44. 45. Built for Backend Nicht nur Infrastruktur...

56
Dev + Ops = Go DevOpsCon 2018 C. Petrausch, I. Lankin Dezember 2018

Transcript of Dev + Ops = Go · - Transport (http2, gRPC) 44. 45. Built for Backend Nicht nur Infrastruktur...

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 @ashleymcnamara 3

4

All aboard the hype train!

https://research.hackerrank.com/developer-skills/2018/#insight4 5

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

EinfachheitKeep It Simple

9

einfache, klare Syntax

weniger Tipparbeit

flaches Typsystem

klarer Programmfluss

einheitliche Formatierung

Lesbarkeitund 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ä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

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.slide 22

Abgespaced?

24

Status Quo

25

anno 2015

Video Infrastructure Team

AWS+Data Center

Glasfasernetz

Docker, Prometheus, Grafana

Python, Saltstack

AufgabeEncoder Steuern

26

cli

encoder

configure

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

Single BinaryAll Inclusive

Statisch gelinked

Keine Abhängigkeiten

Cross-Compiling

29

Nachmacherwir waren nicht die Ersten

30

AufgabeEncoder Steuern

31

cli

encoder

configure

for ch := range []{ ard, zdf, … } {for enc := range []{encoder1,encoder2,...} {

configure(enc, ch)}

}

Unser erstes Go Programmnaiv

32

LangsamEncoder 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 ProgrammParallel!

34

OverloadZu viele Request

35

cli

encoder

configure

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

Microservices in Go

40

Effizient & Leichtgewichtig

41

kleine, spezialisierte Bibliotheken

- Auth- Routing- DBs / ORM- Session- Cloud- …

Libs statt Frameworks

Oder auch Frameworkswer es mag...

gin-gonic/gin

go-kit/kit

nytimes/gizmo

micro/go-micro

42

Keep it Simple

43

RobustheitDevOps!

kleine, spezialisierte Bibliotheken

- Monitoring (prometheus)- Circuit Breaker (hystrix)- Logging (logrus, zap)- Tracing (zipkin)- Transport (http2, gRPC)

44

45

Built for BackendNicht 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

FazitGo...

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 PetrauschIgor Lankin

inovex GmbHLudwig-Erhard-Allee 676131 Karlsruhe