$30 off During Our Annual Pro Sale. View Details »

Micro Services - Die Verheißungen könnten eintreten.

Micro Services - Die Verheißungen könnten eintreten.

Mit Micro Services wird es möglich, die SOLID Prinzipen auf die Architektur anzuwenden. Anwendungen werden in einzelne, collaborierende Services zerlegt.

Die Konzepte sind leicht zu erfassen und vieles davon ist bereits bekannt.

In der Umsetzungspraxis jedoch entstehen viele Fragen die beantwortet werden wollen:

Welche Technologie bietet sich an?
Wie können insb. IntegrationsTests gestaltet werden?
Was ändert sich an (Continuous) Deployment Pipelines, wenn plötzlich viele, im lifecycle unabhängige Services deployed werden müssen?

In diesem Vortrag werde ich vorstellen, welche Antworten wir auf diese Fragen gefunden haben. Am Ende wirst du in der Lage sein, innerhalb kürzester Zeit, eigene Micro Services Aufzusetzen, zu Testen und zu Deployen.

bed-con 2014
http://bed-con.org/2014/talks/Micro-Services---Die-Verheissungen-koennten-eintreten

Timmo Freudl-Gierke

April 04, 2014
Tweet

More Decks by Timmo Freudl-Gierke

Other Decks in Technology

Transcript

  1. Micro Services
    Die Verheißungen könnten eintreten.
    Timmo Freudl-Gierke
    @timmo_gierke
    !1

    View Slide

  2. © 2011 HYPOPORT AG
    Organisator der 

    MongoDB User Group Berlin
    Head Architekt
    EUROPACE 2 Plattform
    Timmo Freudl-Gierke
    twitter: @timmo_gierke

    View Slide

  3. EUROPACE Classic
    !3

    View Slide

  4. James Lewis Robert C. Martin Stefan Tilkov
    !4

    View Slide

  5. Verheißungen
    Single Responsibility Principle
    Open Closed Principle
    Continuous Deployment
    Transparenz im Betrieb
    Multi-Team Entwicklung
    !5

    View Slide

  6. Verheißungen
    Single Responsibility Principle
    Open Closed Principle
    Continuous Deployment
    Transparenz im Betrieb
    Multi-Team Entwicklung
    !6

    View Slide

  7. !7

    View Slide

  8. !7

    View Slide

  9. !7

    View Slide

  10. Robert C. Martin
    “Für die Änderung einer Klasse sollte
    es nur genau einen Grund geben.”
    !8

    View Slide

  11. Single Responsibility in allen Ebenen der
    Modularität
    !9

    View Slide

  12. Monolithic Application Pattern
    One Big App - One Big Database
    !10

    View Slide

  13. Monolithic Application Pattern
    One Big App - One Big Database
    !10

    View Slide

  14. Monolithic Application Pattern
    One Big App - One Big Database
    !10

    View Slide

  15. Monolithic Application Pattern
    One Big App - One Big Database
    !11

    View Slide

  16. Teile Deine Anwendung in
    vertikale Domänen!
    !12

    View Slide

  17. MicroService
    (Architektur)
    !
    • “Klein”
    • Exklusive Datenbank
    • Optimierter Tech-Stack
    • Unabhängig Deploybar
    • Unabhängig Skallierbar
    • Verantwortung eines Team
    !13

    View Slide

  18. MicroService
    (Architektur)
    !
    • “Klein”
    • Exklusive Datenbank
    • Optimierter Tech-Stack
    • Unabhängig Deploybar
    • Unabhängig Skallierbar
    • Verantwortung eines Team
    !13

    View Slide

  19. Makro Architektur
    !
    • Wenige, übergreifende
    Standards
    • Kommunikationsprotokoll
    • Security
    !14

    View Slide

  20. Verheißungen
    Single Responsibility Principle
    Open Closed Principle
    Continuous Deployment
    Transparenz im Betrieb
    Multi-Team Entwicklung
    !15

    View Slide

  21. – Bertrand Meyer / Robert C. Martin
    “Software Artefakte sollten
    offen für Erweiterungen und
    geschlossen für Änderungen sein.”
    !16

    View Slide

  22. Vorgangs Management
    Übersicht
    Partner Management
    Baufi
    Smart
    Kredit
    Smart
    Bauspar
    Smart
    Reporting
    Dokumenten Verwaltung
    Rechenkern
    80 - 2k Class Files each
    5 - 50 Maven Projects each
    > 5k Class Files
    200 Maven Projects
    !17

    View Slide

  23. Vorgangs Management
    Übersicht
    Partner Management
    Baufi
    Smart
    Kredit
    Smart
    Bauspar
    Smart
    Reporting
    Dokumenten Verwaltung
    Rechenkern
    80 - 2k Class Files each
    5 - 50 Maven Projects each
    > 5k Class Files
    200 Maven Projects
    27 - 200 Class Files each
    1 Maven / Gradle Project each
    !17

    View Slide

  24. Schnell Fahrt
    aufnehmen !
    !18

    View Slide

  25. Spring Boot
    > gradle build

    > java -jar hello.jar &

    > curl http://localhost:8080/
    !19

    View Slide

  26. Infrastructure
    • CI-Server (TeamCity Goals)
    • Database (MongoDB)
    • Host (ESX) / Co-location
    • Puppet template
    • Load balancer config
    • DNS
    • …
    Automate everything !
    !20

    View Slide

  27. Verheißungen
    Single Responsibility Principle
    Open Closed Principle
    Continuous Deployment
    Transparenz im Betrieb
    Multi-Team Entwicklung
    !21

    View Slide

  28. Deployment Pipeline
    !22

    View Slide

  29. Deployment Pipeline
    Vertrauen in Fehlerfreiheit
    !22

    View Slide

  30. Deployment Pipeline
    Vertrauen in Fehlerfreiheit
    Schnelles Feedback
    !22

    View Slide

  31. Deployment Pipeline
    Vertrauen in Fehlerfreiheit
    Schnelles Feedback
    Laufzeit (ca. 5 min)
    !22

    View Slide

  32. Build
    10 second build !
    !23

    View Slide

  33. Test Pyramide
    !24

    View Slide

  34. Test Pyramide
    !24

    View Slide

  35. Test Pyramide
    !24

    View Slide

  36. Testklassen
    EUROPACE 2 Testpyramide (Sept. 2013)
    System-Integration
    Modul-Integration
    Unit
    0,00 500,00 1000,00 1500,00 2000,00
    Test-Klassen
    !25

    View Slide

  37. Unit Tests
    5 sec. TDD cycle
    !26

    View Slide

  38. Integration Tests
    !27

    View Slide

  39. Standalone Mode
    • Mocked Dependencies
    • Golden test data

    (apply on startup)
    • Spring Profiles
    !28

    View Slide

  40. MicroService in Isolation Test
    (Service Integration Test)
    Service
    Integration Test
    Suite
    !29

    View Slide

  41. Continuous Integration Server
    (Random, free Network Port)
    Service
    Integration
    Test Suite
    Service
    Integration
    Test Suite
    Service
    Integration
    Test Suite
    !30

    View Slide

  42. try {
    ServerSocket s = new ServerSocket(0);
    int port = s.getLocalPort();
    s.close();
    return port;
    }
    catch (IOException e) {// …}
    service.properties
    Service
    Integration Test
    Suite
    !31

    View Slide

  43. !32

    View Slide

  44. Interoperability Tests
    !33

    View Slide

  45. Multi-Pipeline Dependencies
    Production
    Rollout
    Service
    Integration T.
    Consumer Driven Tests
    Service Specific
    Pipeline (part)
    Service Specific
    Pipeline (part)
    !34

    View Slide

  46. B
    A C
    Laufzeitabhängigkeiten zwischen 3 Micro Services
    !35

    View Slide

  47. Consumer Driven Test Suites
    B
    A C
    Verantwortungsgrenze
    !36

    View Slide

  48. Consumer Driven Test Suites
    B
    A C
    Verantwortungsgrenze
    Provider
    Consumer
    !36

    View Slide

  49. Consumer Driven Test Suites
    B
    A C
    CDTS!
    A->B
    Verantwortungsgrenze
    Provider
    Consumer
    !36

    View Slide

  50. Consumer Driven Test Suites
    B
    A C
    CDTS!
    A->B
    Verantwortungsgrenze
    Provider
    Consumer
    !36

    View Slide

  51. Consumer Driven Test Suites
    B
    A C
    CDTS!
    A->B
    Verantwortungsgrenze
    Provider
    Consumer
    !36

    View Slide

  52. Consumer Driven Test Suites
    B
    A C
    CDTS!
    A->B
    Verantwortungsgrenze
    Provider
    Consumer
    Provider
    Consumer
    !36

    View Slide

  53. Consumer Driven Test Suites
    B
    A C
    CDTS!
    A->B
    CDTS!
    B->C
    Verantwortungsgrenze
    Provider
    Consumer
    Provider
    Consumer
    !36

    View Slide

  54. Consumer Driven Test Suites
    B
    A C
    CDTS!
    A->B
    CDTS!
    B->C
    Verantwortungsgrenze
    Provider
    Consumer
    Provider
    Consumer
    !36

    View Slide

  55. Production Deployment
    !37

    View Slide

  56. Rolling Update
    For each Host do
    1. Remove from load balancer
    2. Shutdown service
    3. Copy new service artefact(s)
    4. (Install new artefact)
    5. Start service
    6. Add to load balancer
    !38

    View Slide

  57. !39

    View Slide

  58. Incident Manager Interface
    • service.sh restart
    • /etc/init.d/yourService
    (symlink)
    !40

    View Slide

  59. Wichtiger Baustein
    Starte so schlank wie
    möglich
    !41

    View Slide

  60. Verheißungen
    Single Responsibility Principle
    Open Closed Principle
    Continuous Deployment
    Transparenz im Betrieb
    Multi-Team Entwicklung
    !42

    View Slide

  61. Allgemeine Betriebsstrategie: !
    Stabilität & Nachvollziehbarkeit
    !43

    View Slide

  62. Logging
    Log
    Aggregator
    • Logstash & Kibana
    • (Splunk)
    log statement:
    • tracingId
    • service
    • user
    • use-case
    • entity
    !44

    View Slide

  63. Monitoring
    • Self monitoring
    • Mem
    • Cpu
    • DB Connection
    • Business Metrics
    • Metrics + Graphite
    • Aalarming
    • pushover.net
    GET /health
    !45

    View Slide

  64. Resilience
    n-tier headache
    Circuit Breaker
    Fail fast
    Fail silent
    Hysterix
    Load Shedder
    Totmannschalter
    Cache
    Fallback Strategy
    !46

    View Slide

  65. Verheißungen
    Single Responsibility Principle
    Open Closed Principle
    Continuous Deployment
    Transparenz im Betrieb
    Multi-Team Entwicklung
    !47

    View Slide

  66. Multi-Team Entwicklung
    Cross functional teams
    • GWT
    • Spring
    • Mongo
    • Maven
    • AngularJS
    • SpringBoot
    • Gradle
    !48

    View Slide

  67. Multi-Team Entwicklung
    Cross functional teams
    • GWT
    • Spring
    • Mongo
    • Maven
    • AngularJS
    • SpringBoot
    • Gradle
    Share tools, !
    don’t enforce standards
    !48

    View Slide

  68. Multi-Team Entwicklung
    Cross functional teams
    • GWT
    • Spring
    • Mongo
    • Maven
    • AngularJS
    • SpringBoot
    • Gradle
    Know-How Transfer
    Share tools, !
    don’t enforce standards
    !48

    View Slide

  69. Verheißungen
    Single Responsibility Principle
    Open Closed Principle
    Continuous Deployment
    Transparenz im Betrieb
    Multi-Team Entwicklung
    !49

    View Slide

  70. View Slide

  71. Gute Ideen sind unter
    einem Dach vereint.

    View Slide

  72. Gute Ideen sind unter
    einem Dach vereint.
    Der erste Praxistest
    ist bestanden.

    View Slide

  73. Gute Ideen sind unter
    einem Dach vereint.
    Der erste Praxistest
    ist bestanden.
    Probiert es aus !

    View Slide

  74. Micro Services
    Die Verheißungen sind eingetreten ;-)
    Timmo Freudl-Gierke
    @timmo_gierke
    !51

    View Slide