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.

Per Anhalter durch den Cloud Native Stack (extended edition)

OOP 2017, München: Vortrag von Mario-Leander Reimer (@LeanderReimer, Cheftechnologe bei QAware).

Abstract: Cloud-Größen wie Google und Twitter haben die Kern-Bausteine ihrer Infrastruktur quelloffen verfügbar gemacht. Jeder kann nun selbst cloud-native Anwendungen entwickeln – Anwendungen, die in der Cloud zuverlässig laufen und fast beliebig skalieren. Dafür muss man sich seinen Cloud Native Stack zusammenstellen aus Bausteinen wie Docker, DC/OS, Kubernetes und Spring Cloud. Wir bereisen die wichtigsten Technologien und Architekturmuster rund um den Cloud Native Stack und bringen dabei eine Beispielanwendung schrittweise in der Cloud zum Laufen.

Zielpublikum: Architekten, Entwickler, Projektleiter, Entscheider, Cloud Native Nerds
Voraussetzungen: Grundkenntnisse in Java
Schwierigkeitsgrad: Anfänger

Extended Abstract: Jeder spricht über die Cloud, jeder ist in der Cloud. Dennoch scheinen die Akzeptanz und der Wille, die damit verbundenen Technologien im eigenen Unternehmen gewinnbringend einzusetzen, nach wie vor eher zögerlich. Dieser Vortrag soll dazu beitragen, die bestehenden Vorbehalte abzubauen. Wir werden nicht viele Worte zur Theorie von Cloud-nativen Anwendungen verschwenden. Stattdessen werden wir zeigen, dass der Cloud Native Stack reif ist für unternehmenskritische Anwendungen.

Related Books

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

Per Anhalter durch den Cloud Native Stack (extended edition)

  1. 1. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware PER ANHALTER DURCH DEN CLOUD NATIVE STACK 1
  2. 2. Mario-Leander Reimer Cheftechnologe Kontakt Mail: mario-leander.reimer@qaware.de Twitter: @LeanderReimer • Vollblut Entwickler && Architekt • #CloudNativeNerd • Open Source Enthusiast
  3. 3. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Let’s talk about Cloud Native Applications 3
  4. 4. #GIFEE Google’s (and Facebook’s, Twitter’s, Airbnb’s, ...) Infrastructure For Everyone Else
  5. 5. CONTINUOUS
 DELIVERY & DEVOPS ANTIFRAGILITY HYPERSCALE 
 TRAFFIC, DATA, FEATURES OPEX SAVINGS
 (automation & utilization) CLOUD NATIVE APPLICATIONS DISRUPTINDUSTRIALIZE
  6. 6. PACKAGED AND DISTRIBUTED AS CONTAINERS BUILD AND COMPOSED AS MICROSERVICES DYNAMICALLY EXECUTED IN THE CLOUD CLOUD NATIVE APPLICATIONS 3KEYPRINCIPLES
  7. 7. „There ain’t no such thing as a free lunch.“ Robert A. Heinlein, 1966, The Moon Is a Harsh Mistress
  8. 8. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Die 5 Gebote der Cloud. 1. Everything Fails All The Time. 2. Focus on MTTR and not on MTTF. 3. Know the Eight Fallacies of Distributed Computing. 4. Scale out, not up. 5. Treat resources as cattle, not pets. 8
  9. 9. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Design Prinzipien Cloud-nativer Anwendungen • Design for Performance: responsive; concurrency; efficiency. • Design for Automation: automate dev tasks & ops tasks. • Design for Resiliency: fault-tolerant; self-healing. • Design for Elasticity: dynamically scale; be reactive. • Design for Delivery: short roundtrips; automated delivery. • Design for Diagnosability: cluster-wide logs, traces, metrics. 9
  10. 10. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Maturity Model Cloud-nativer Anwendungen 10 https://www.opendatacenteralliance.org/docs/architecting_cloud_aware_applications.pdf Level 0: Virtualized Level 1: Loosely Coupled Level 2: Abstracted Level 3: Adaptive Cloud Native - Skaliert elastisch abhängig von Stimuli. - Dynamische Migration auf andere Infrastruktur
 ohne eine Service Downtime. Cloud Resilient - Fehler-tolerant und resilient entworfen. - Metriken und Monitoring eingebaut. - Runs anywhere. Infrastruktur agnostisch. Cloud Friendly - Besteht aus lose gekoppelten Diensten. - Dienste können über Namen gefunden werden. - 12-Factor App Principles. Cloud Ready - Keine Anforderungen an das Datei-System. - Läuft auf virtualisierter Hardware. - Self-contained, kann als Image ausgeführt werden.
  11. 11. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Die Anatomie des Cloud Native Stack 11 Application Platform Cloud Native App Cluster Orchestrator Applications Cluster Scheduler Containers Cluster Virtualization Resources Cluster Operating System Entkoppelt von physischer Hardware. Verwaltet Ressourcen für die Ausführung von Containern Führt Applikationen auf dem Cluster aus. Stellt Ablauf- Umgebung und APIs für Apps bereit.
  12. 12. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Cloud Native Stack mit Spring Cloud und K8S. 13 Application Platform Cloud Native App Cluster Orchestrator Applications Cluster Scheduler Containers Cluster Virtualization Resources
  13. 13. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Orchestration Composition Die 4 Schritte zur Cloud-nativen Anwendung 1. MICROSERVICES 2. CONTAINERIZATION 3. COMPOSITION 4. ORCHESTRATION 14 Containerization Microservices docker compose
  14. 14. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware MICROSERVICES 15
  15. 15. 3
  16. 16. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware 2002 17 Items Registration Buying
  17. 17. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware 2008 18 Additional Services
  18. 18. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware 2011 19 Additional Services
  19. 19. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Bad News. 20 § “[…] it was unable to scale for 6 million pageviews per minute and was down for most of the day during peak events.” § “This is the multi-million dollar question which the IT Department of Walmart Canada had to address after they were failing to provide to their users on Black Fridays for two years in a row.” https://blog.risingstack.com/how-enterprises-benefit-from-microservices-architectures Walmart auf http://www.oneops.com Sehr lange Release-Zyklen Mangelnde Skalierbarkeit
  20. 20. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware 2016 21 Additional Services
  21. 21. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Good News. 22 Walmart auf http://www.oneops.com “They wanted to prepare for the world by 2020, with 4 billion people connected, 25+ million apps available, and 5.200 GB of data for each person on Earth. Walmart replatformed […] with the intention of achieving close to 100% availability with reasonable costs.” https://blog.risingstack.com/how-enterprises-benefit-from-microservices-architectures § “In fact, the organization reports thatsome 3,000 engineers […] drive 30,000 changes per month to Walmart software.” § “Those new applications,which span everything from mobile devices to the Internet of things (IoT), are crucial weapons in a global e-commerce contest that pits Walmart againstthe likes of Amazon and Alibaba,as well as a host of other rivals that are emerging as the cost of entry into the online retail sector continues to decline in the age of the API economy.” http://www.baselinemag.com/enterprise-apps/walmart-embraces-microservices-to-get- more-agile.html § “The Walmart […] servers […] were able to handle all mobile Black Friday traffic with about10 CPU cores and 28Gb RAM.” § “On Thanksgiving weekend,Walmartservers processed 1.5 billion requests per day. 70 percent of which were delivered through mobile.” http://techcrunch.com/2014/12/02/walmart-com-reports-biggest-cyber-monday-in- history-mobile-traffic-at-70-over-the-holidays 1000 deployments a day … … triggered by dev teams. ~ 100% availability Resource efficiency Suitable scalability Enabled new kinds of applications ( IoT, mobile, APIs) to compete globally
  22. 22. 3 WHAT DID THEY DO?
  23. 23. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Die Antwort: Dekomposition. 24
  24. 24. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware • Planning unit • Team assignment unit • Development unit • Integration unit Komponenten entlang des Software-Lebenszyklus 25 DESIGN BUILD RUN Design Components Dev Components Ops Components • Complexity unit • Data integrity unit • Cohesive feature unit • Decoupled unit • Release unit • Deployment unit • Runtime unit • Scaling unit ?:11:1
  25. 25. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware26 System Subsystem Komponenten Services Monolith Macroservices Microservices Nanoservices Good starting point Dev Components Ops Components?:1 Decomposition Trade-Offs + More flexible to scale + Runtime isolation (crash, slow-down, …) + Independent releases, deployments, teams + Higher resources utilisation - Distribution debt: Latency - Increased infrastructure complexity - Increased troubleshooting complexity - Increased integration complexity
  26. 26. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Zwitscher Microservice in 10 Minuten 27 Zwitscher Controller Zwitscher Repository /tweets ZwitscherServiceApp search(…)
  27. 27. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware CONTAINERIZATION 28
  28. 28. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware $ docker build -t zwitscher-service:1.0.1 . $ docker run --name zwitscher-service -d -p 8080:8080 zwitscher-service:1.0.1 $ docker tag zwitscher-service:1.0.1 hitchhikersguide/zwitscher-service:latest $ docker push hitchhikersguide/zwitscher-service Der Containerization Workflow mit Docker 29 3. Tag & Push 2. Run Dockerfile 1. Build
  29. 29. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Beispiel Dockerfile für Zwitscher Service 30 FROM qaware/alpine-k8s-ibmjava8:8.0-3.10
 MAINTAINER QAware GmbH <qaware-oss@qaware.de>
 
 RUN mkdir -p /app
 
 COPY build/libs/zwitscher-service-1.0.1.jar /app/zwitscher-service.jar
 COPY src/main/docker/zwitscher-service.conf /app/
 
 EXPOSE 8080
 CMD /app/zwitscher-service.jar
  30. 30. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Wichtige Tips für den Umgang mit Docker • Kenne dein Base-Image! Auf die Größe kommt es an. • Ein Docker Build muss wiederholbar sein. • Jeder RUN Befehl erzeugt ein Layer. Nutze Mehrfachbefehle! • Entferne temporäre Dateien. • Veröffentliche wichtige Ports mit EXPOSE. • Definiere Umgebungs-Variablen für wichtige Parameter. • Nutze ein Image für alle Umgebungen. • Versioniere deine Images. • Verwende Tools zur QS von Dockerfiles und Images. 31
  31. 31. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware COMPOSITION 32
  32. 32. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware33 Cluster-weite Konfiguration und Konsensus Überwachung und Fehler-Diagnose Geregelter Zugriff 
 auf Service 
 Endpoints von Außen Registrierung und Suche von Service Endpoints Laufzeit-Umgebung für Service Endpoints Resistenter Aufruf von anderen Service Endpoints
  33. 33. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware34 Zwitscher Controller Zwitscher Repository /tweets ZwitscherServiceApp /zwitscher-service/* Discovery Configure Actuator /admin/health Register Read K/V Get Services /prometheus
  34. 34. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Beispiel docker-compose.yml 35 version: '2' services: zwitscher-consul: ... zwitscher-traefik: ... zwitscher-service: image: hitchhikersguide/zwitscher-service:1.0.1 environment: - CONSUL_HOST=zwitscher-consul - CONSUL_PORT=8500 - TWITTER_APP_ID=${TWITTER_APP_ID} - TWITTER_APP_SECRET=${TWITTER_APP_SECRET} depends_on: - zwitscher-consul links: - zwitscher-consul ports: - "8080:8080" networks: - zwitscher-net $ docker-compose -p zwitscher up -d $ docker-compose -p zwitscher ps $ docker-compose -p zwitscher logs -f $ docker-compose -p zwitscher down docker compose
  35. 35. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware ORCHESTRATION 36
  36. 36. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware37 zwitscher-traefik Kubernetes DNS zwitscher-consul zwitscher-service Manage Manage Manage Resolve Ops
  37. 37. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Einfaches K8S Setup in der Cloud oder Lokal 38 echo "- Use Vagrant for local K8s setup" export KUBERNETES_PROVIDER=vagrant export NUM_NODES=1 echo "- The default provider is GCE" export KUBERNETES_PROVIDER=gce export KUBE_GCE_ZONE=europe-west1-d export NUM_NODES=4 echo "- Another possible provider is AWS" export KUBERNETES_PROVIDER=aws export KUBE_AWS_ZONE=eu-central-1a export NODE_SIZE=t2.small curl -sS https://get.k8s.io | bash Minikube
  38. 38. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Die Kubernetes Bausteine im Überblick 39 Master Minion API Server Controller Manager Scheduler etcd kubelet kube-proxy Container Engine
 (Docker / rkt) PodPodPod C1 … Cn Users Admin
  39. 39. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Die wichtigsten K8S Konzepte und Begriffe • Services sind eine Abstraktion für eine logische Sammlung von Pods • Pods sind die kleinste deploybare Compute Einheit in K8S • Deployments dienen der Deklaration von Pods, Volumes und RCs • Replica Sets stellen die geforderte Anzahl an Replicas sicher • Labels sind Key/Value Paare die zur Identifikation verwendet werden 40 Deployment Service Replica Set 
 Pod Container Container DNS Name Labels:<K,V> Port Volume
  40. 40. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Kubernetisierung: Single oder Multi-Container Pod? POD DeploymentPOD Deployment 41 POD Deployment POD Deployment POD Deployment ZWITSCHER-BOARD ZWITSCHER-TRAEFIK ZWITSCHER-CONSUL ZWITSCHER-MONITORZWITSCHER-SERVICE Service Service Service Service Service
  41. 41. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Deployment Definition für Zwitscher Service 42 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: zwitscher-service spec: replicas: 3 template: metadata: labels: zwitscher: service spec: containers: - name: zwitscher-service image: "hitchhikersguide/zwitscher-service:1.0.1" ports: - containerPort: 8080 env: - name: CONSUL_HOST value: zwitscher-consul
  42. 42. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware K8s Service Definition pro Deployment 43 apiVersion: v1 kind: Service metadata: name: zwitscher-service labels: zwitscher: service spec: # use NodePort here to be able to access the port on each node # use LoadBalancer for external load-balanced IP if supported type: NodePort ports: - port: 8080 selector: zwitscher: service
  43. 43. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Vorsicht bei Definition von Resource Constraints 44 resources: # Define resources to help K8S scheduler # CPU is specified in units of cores # Memory is specified in units of bytes # required resources for a Pod to be started requests: memory: "128Mi" cpu: "250m" # the Pod will be restarted if limits are exceeded limits: memory: "192Mi" cpu: "500m"
  44. 44. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Liveness und Readiness Probes über Actuator 45 # container will receive requests if probe succeeds readinessProbe: httpGet: path: /admin/info port: 8080 initialDelaySeconds: 30 timeoutSeconds: 5 # container will be killed if probe fails livenessProbe: httpGet: path: /admin/health port: 8080 initialDelaySeconds: 90 timeoutSeconds: 10
  45. 45. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Aufbau einer K8S-only Deployment Variante. 46 zwitscher-service Manage Manage Ops zwitscher-board Ingress DNS ConfigMap
  46. 46. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Auch der Spaß kommt nicht zu kurz. • Standard MIDI Controller • Visualisiert Deployments und Pods • Skaliert Deployments • Funktioniert auch für DC/OS • http://github.com/qaware/kubepad/ 47
  47. 47. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Keine Magie. Aber komplexe Technologie. • Building Distributed Systems is hard! • Der Cloud Native Stack macht die Komplexität beherrschbar. • Die hohe Abstraktion ist Segen und Fluch zugleich. • Entwickler und Architekten brauchen zusätzliche Skills und Know- How in etlichen neuen Technologien. 49
  48. 48. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware Code und Artikel zum Nachlesen unter … • https://github.com/qaware/hitchhikers-guide-cloudnative • Der Cloud Stack: Mesos, Kubernetes und Spring Cloud 
 https://goo.gl/U5cJAU • Spring Cloud und Netflix OSS: Cloud-native Anwendungen bauen
 https://goo.gl/edNlUK • Cloud-native Anwendungen mit Kubernetes
 https://goo.gl/dVkoyR • Eine Einführung in Apache Mesos: Das Betriebsystem der Cloud
 https://goo.gl/7SnMZA 50
  49. 49. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware51 CompletableFuture<SoftwareArchitektIn> ich = CompletableFuture.supplyAsync(() -> erfindergeist() .handwerksstolz() ); CompletableFuture<Projekthaus> qaware = CompletableFuture.supplyAsync(() -> professionalität() .lässigkeit() ); Erfolg start = qaware.thenCombine(ich, (i, q) -> i.sendeBewerbung(q)) .join(); Weiter Details unter http://www.qaware.de/karriere/#jobs
  50. 50. | OOP 2017 | A Hitchhiker’s Guide to the Cloud Native Stack | @adersberger @LeanderReimer #cloudnativenerd #qaware 42. THE ANSWER TO LIFE, UNIVERSE, THE CLOUD AND EVERYTHING. 52
  51. 51. https://www.qaware.de https://slideshare.net/qaware/ https://github.com/qaware/ &

    Be the first to comment

    Login to see the comments

  • ClaudioAltamura

    Apr. 21, 2017

OOP 2017, München: Vortrag von Mario-Leander Reimer (@LeanderReimer, Cheftechnologe bei QAware). Abstract: Cloud-Größen wie Google und Twitter haben die Kern-Bausteine ihrer Infrastruktur quelloffen verfügbar gemacht. Jeder kann nun selbst cloud-native Anwendungen entwickeln – Anwendungen, die in der Cloud zuverlässig laufen und fast beliebig skalieren. Dafür muss man sich seinen Cloud Native Stack zusammenstellen aus Bausteinen wie Docker, DC/OS, Kubernetes und Spring Cloud. Wir bereisen die wichtigsten Technologien und Architekturmuster rund um den Cloud Native Stack und bringen dabei eine Beispielanwendung schrittweise in der Cloud zum Laufen. Zielpublikum: Architekten, Entwickler, Projektleiter, Entscheider, Cloud Native Nerds Voraussetzungen: Grundkenntnisse in Java Schwierigkeitsgrad: Anfänger Extended Abstract: Jeder spricht über die Cloud, jeder ist in der Cloud. Dennoch scheinen die Akzeptanz und der Wille, die damit verbundenen Technologien im eigenen Unternehmen gewinnbringend einzusetzen, nach wie vor eher zögerlich. Dieser Vortrag soll dazu beitragen, die bestehenden Vorbehalte abzubauen. Wir werden nicht viele Worte zur Theorie von Cloud-nativen Anwendungen verschwenden. Stattdessen werden wir zeigen, dass der Cloud Native Stack reif ist für unternehmenskritische Anwendungen.

Views

Total views

578

On Slideshare

0

From embeds

0

Number of embeds

1

Actions

Downloads

9

Shares

0

Comments

0

Likes

1

×