Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Dev + Ops = Go

143 views

Published on

In den letzten drei Jahren haben wir die Infrastruktur der Fernseh-Plattform waipu.tv gebaut. Dabei haben wir angefangen Tools für den Betrieb in Golang zu schreiben. Aus einigen der Tools wurden Core-Services, die auch die Last einer Fußball-WM-Übertragung locker wegstecken. Wir wollen euch zeigen, wie wir mit der selben Tool-Chain (Golang & Co) Betriebs-Probleme lösen und kritische Business-Applikationen entwickeln. Klassisch DevOps oder Golden Hammer?

Speaker: Christoph Petrausch, Igor Lankin (beide inovex)
Event: DevOpsConference, 04.12.2018

Mehr Tech-Vorträge: inovex.de/vortraege
Mehr Tech-Artikel: inovex.de/blog

Published in: Software
  • Be the first to comment

  • Be the first to like this

Dev + Ops = Go

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

×