Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Modularität 4.0 - Kritik der modularen Unvernunft

Modularität 4.0 - Kritik der modularen Unvernunft

Microservices, Self-Contained-Systems und modulare Systeme basieren sämtlich auf identischen Grundprinzipien, nämlich:

Modularisierung,
Information-Hiding,
Separation of Concern,
hohe Kohäsion,
geringe Kopplung und
(vor allem) niedrige Komplexität

Ich wettere gegen zu viel „Micro“, und gegen zu wenig Verständnis der grundlegenden Prinzipien.

Dabei treffen Sie auf einige typische Missverständnisse sowie praktische Hinweise, wie Siediese fundamentalen Prinzipien in eigener Architektur- und Entwicklungsarbeit einsetzen können.

Dr. Gernot Starke

May 21, 2019
Tweet

More Decks by Dr. Gernot Starke

Other Decks in Programming

Transcript

  1. Modularisierung 4.0
    Kritik der modularen
    Unvernunft
    Gernot Starke
    INNOQ Fellow

    View full-size slide

  2. Gernot Starke
    INNOQ Fellow,
    Architektur-Verbesserer,
    Coach, Trainer
    arc42
    aim42
    iSAQB

    View full-size slide

  3. Kritik im positiven Sinn
    (von Analyse)
    „Was kann ich wissen?“

    View full-size slide

  4. „Habe Mut, dich deines eigenen
    Verstandes zu bedienen.“

    View full-size slide

  5. Kant
    • ARD Mediathek: Kant für Anfänger
    Quelle: Wikipedia

    View full-size slide

  6. Stand der
    Praxis
    • Technische Schulden
    • Schlechte
    time to market
    • Klotz-am-Bein

    View full-size slide

  7. Ursache: Komplexität

    View full-size slide

  8. Komplexität
    Ursache (fast) aller Übel

    View full-size slide

  9. Symptome von Komplexität
    • Kleine Änderungen haben
    gravierende Konsequenzen
    change amplification
    • Sie müssen viele Details wissen
    cognitive load
    • Kein Offensichtlichkeit
    unknown unknowns
    https://disenthrall.co/complexity-is-easy/

    View full-size slide

  10. Komplexität
    als Summe
    = #

    Teile:
    • Software-Komponenten
    • Abhängigkeiten
    • Notwendige Aktivitäten

    View full-size slide

  11. • Änderungen aufwändig
    • Instabilität
    • Hohes Fehlerrisiko
    • und...
    Photo by NeONBRAND on Unsplash
    Konsequenz:

    View full-size slide

  12. Abwärtsspirale
    Konsequenz:

    View full-size slide

  13. Wie
    kommt‘s
    dazu?
    ...es ist doch ganz
    einfach...

    View full-size slide

  14. Input Output
    Architektur
    Entwicklung
    Anforderungen
    Software

    View full-size slide

  15. Input Output

    View full-size slide

  16. Input Output
    ?
    Photo by John Cameron on Unsplash

    View full-size slide

  17. Anforderungen

    View full-size slide

  18. Unterschiedliche und
    widersprüchliche Anforderungen...
    • Fachbereich: Leichte Änderbarkeit
    • Management (1): Geringe Entwicklungskosten
    • Management (2): Geringe Betriebskosten
    • Juristen: Höchste Datensicherheit
    • User: Einfache Benutzbarkeit

    View full-size slide

  19. Unterschiedliche und
    widersprüchliche Anforderungen...
    Anforderungen stehen in Konflikt zueinander:
    • Performance und Verständlichkeit
    • Performance und Änderbarkeit
    • Sicherheit und Benutzbarkeit
    • Robustheit und (Laufzeit-)Flexibilität

    View full-size slide

  20. Wie
    kommt‘s
    dazu?
    ...es ist doch ganz
    einfach (Teil 2) ...

    View full-size slide

  21. Wie
    kommt‘s
    dazu?
    ...es ist doch ganz
    einfach...

    View full-size slide

  22. Software entwerfen =
    Verantwortung verteilen
    Feature neu
    K1
    Kn
    Kneu

    View full-size slide

  23. Der tägliche Entscheidungs-Horror...
    Feature neu
    K1
    Kn
    Kneu
    Besser für
    Performance
    Besser für
    Security
    Einfacher für
    das Team

    View full-size slide

  24. Abhilfe:
    Kleiner
    Micro

    View full-size slide

  25. Modernes Prinzip:
    „Small is beautiful (SIB)“

    SIB reduziert:
    • (lokale) Mengenkomplexität
    • Entwicklungsaufwand

    View full-size slide

  26. Modernes Prinzip:
    „Small is beautiful (SIB)“

    SIB steigert (!):
    • Laufzeit-Komplexität
    • Infrastruktur-Komplexität

    View full-size slide

  27. Groß Klein
    Micro

    View full-size slide

  28. Monolithisch Services
    Microservices,
    Self Contained Systems

    View full-size slide

  29. • Unabhängig(er)
    entwickelbar
    • Geringere (lokale)
    Komplexität
    • Austauschbarkeit
    • Skalierbarkeit

    Vorteile von
    Services

    View full-size slide

  30. Monolithisch Services
    • Betriebssystem
    • Datenbank
    • App-Server
    • Monitoring
    • (Lokale) Security
    • Cloud-Provider Details
    • Cloud-Services
    • Datenbank
    • (Distributed) Security
    • Docker
    • Service Broker
    • Event Store
    • Kubernetes
    • Istio Service Mesh
    • Terraform
    • Verteiltes Monitoring
    • Log-Aggregation
    Erforderliches
    Know-How für Betrieb

    View full-size slide

  31. Monolithisch Services
    Laufzeit
    nano, micro, milli, Sek, Min

    View full-size slide

  32. Zeit
    Taktfrequenz 1 GHz ->
    Taktdauer 1 Nanosekunde
    1 Sekunde = 1.000.000.000 Nanosekunden
    Licht:
    pro Nanosekunde 20cm

    View full-size slide

  33. Zeit...
    1 x klatschen entspricht
    1 Nanosekunde
    Photo by Austin Ban on Unsplash

    View full-size slide

  34. Main Memory Access (100nSec)
    Zähne putzen
    Photo: M. Zomer, https://www.pexels.com/photo/adorable-animal-animal-portrait-blur-422212/

    View full-size slide

  35. Methodenaufruf (~5 Sec)
    Episode 1 / Staffel 1
    https://www.amc.com/shows/breaking-bad

    View full-size slide

  36. 2kB via 1 Gbps Netzwerk senden
    (20Sec)

    View full-size slide

  37. SSD Random Read
    (150 Sec)
    5 Staffeln
    „Breaking Bad“
    (ca. 36h)
    Photo by Alex Plesovskich on Unsplash

    View full-size slide

  38. IP Roundtrip: EU – California - EU
    (150 mSec)
    https://www.hkdm.de/news-detail/news/bachelor-abschlussveranstaltung-der-hkdm-am-6-juli-2017/
    Bachelor-Studium...
    (ca. 4.8 Jahre)

    View full-size slide

  39. Zeit (Quellen)
    • L1 cache reference ......................... 0.5 ns
    • Compress 1K bytes with Zippy ............. 3,000 ns = 3 µs
    • Send 2K bytes over 1 Gbps network ....... 20,000 ns = 20 µs
    • SSD random read ........................ 150,000 ns = 150 µs
    • Read 1 MB sequentially from memory ..... 250,000 ns = 250 µs
    • Round trip within same datacenter ...... 500,000 ns = 0.5 ms
    • Read 1 MB sequentially from SSD ..... 1,000,000 ns = 1 ms
    • Disk seek ........................... 10,000,000 ns = 10 ms
    • Read 1 MB sequentially from disk .... 20,000,000 ns = 20 ms
    • Send packet CA->Netherlands->CA .... 150,000,000 ns = 150 ms
    https://gist.github.com/jboner/2841832
    https://dzone.com/articles/every-programmer-should-know

    View full-size slide

  40. remote ist NICHT
    das neue local

    View full-size slide

  41. Modul?
    Photo by Robin Glauser on Unsplash

    View full-size slide

  42. Modul:
    • Abgeschlossene
    funktionale Einheit
    https://unsplash.com/photos/pKIsW0JS0o8

    View full-size slide

  43. Modul:
    • Explizite Angabe von
    • Angebot (provided)
    • Bedarf (required)
    https://www.thomann.de/de/harley_benton_ultimate_drive.htm

    View full-size slide

  44. Modul:
    • Trennt Schnittstelle
    von Implementierung

    View full-size slide

  45. Prinzipien...
    Quelle: https://www.amazon.com/Peter-Principle-Things-Always-Wrong/dp/0062092065

    View full-size slide

  46. Gelten:
    immer
    fast

    View full-size slide

  47. • Lose Kopplung
    • Hohe Kohäsion
    • Geheimnisprinzip
    • Separation of Concerns
    • KISS
    • SOLID, DRY, YAGNI
    • Pfadfinder-Regel

    Geltungsbereich:
    Kommt
    Drauf
    An
    KDA
    Prinzipien im Software-Engineering

    View full-size slide

  48. KDA: Schwer!

    View full-size slide

  49. Kopplung
    + Kohäsion

    View full-size slide

  50. Kopplung und
    Kohäsion
    • Hohe Kohäsion führt zu loser
    Kopplung nach außen.
    -./
    = 2
    X
    Z
    Y
    -
    = 5 .
    = 6
    /
    = 3

    View full-size slide

  51. Lose Kopplung
    Hohe Kohäsion
    Versicherte
    Person
    Name, Vorname etc.
    Krankenversicherungs-Nr
    +
    Rentenversicherungs-Nr
    Versicherte
    Person
    Name, Vorname etc.
    Krankenversicherungs-Nr
    Rentenversicherungs-Nr

    View full-size slide

  52. Lose Kopplung
    Hohe Kohäsion
    Security
    Versicherte
    Person
    Name, Vorname etc.
    Krankenversicherungs-Nr
    Rentenversicherte
    Person
    Rentenversicherungs-Nr

    View full-size slide

  53. Kohäsion
    Welche Dinge gehören zusammen?

    View full-size slide

  54. Welche Dinge gehören zusammen?
    AB
    X
    AB
    X
    CD
    AB
    CD
    AB CD
    X
    B
    X
    A
    X

    View full-size slide

  55. ... kommt drauf an
    Form...
    AB
    X
    AB
    X
    CD
    AB
    CD
    AB
    CD
    X
    B
    X
    A
    X
    AB
    X
    AB
    X
    CD
    AB
    CD
    AB
    CD
    X
    B
    X
    A
    X
    Farbe... Text... Größe...
    AB X
    AB
    X
    CD AB
    CD
    AB CD
    X
    B
    X A
    X
    AB
    X
    AB
    X
    CD
    AB
    CD
    AB
    CD
    X
    B
    X
    A
    X

    View full-size slide

  56. Kohäsions-
    Anti-Pattern
    UDS
    (User Data Service)
    Order &
    Fullfillment
    Vouchers
    &
    Rebates
    Sales &
    Contracts
    Archive
    Price
    Management
    Marketing &
    Sales
    Campaigns
    Atlas
    Customs &
    Logistics
    Pricing
    Engine
    Sales
    Backend
    Private+Corp
    Sales
    Backend
    eGovernment
    Middleware
    (Message-Queue)
    fachliche
    Module
    Fachliche Berechnungen
    finden in
    Middleware
    statt...

    View full-size slide

  57. Kohäsion: Anti-Pattern
    Module/Package Größe (KLOC) %
    org.foo.views 24.9 19%
    org.foo.controller 15.4 12%
    org.foo.services 3.2 2%
    org.foo.dto 2.2 2%
    org.foo.util 84.0 65%
    Gesamt 129.755 LoC 100%

    View full-size slide

  58. Prinzipien
    anwenden

    View full-size slide

  59. Trenne innen & außen
    private / public
    öffentlich
    sichtbar
    innere Details
    (Geheimnisse)

    View full-size slide

  60. Trenne innen & außen
    private / public
    Java
    public class FXMod extends Application {
    public void start(Stage primaryStage) throws Exception {
    ...
    }
    privat Boolean validateStageBeforeDisplay(Stage stage) {
    ...
    }
    Go
    package timer
    type StopWatch struct {
    start time.Time
    total time.Duration
    running bool }
    func (s *StopWatch) Start() {
    if !s.running {
    s.start = time.Now()
    s.running = true }
    }
    func main() {
    clock := new(timer.StopWatch)
    clock.Start()
    if clock.running { // ILLEGAL
    https://yourbasic.org/golang/public-private/

    View full-size slide

  61. Trenne innen & außen
    private / public
    Python
    >>> class Foo(object):
    ... __bar = 99
    ... def PrintBar(self):
    ... print(self.__bar)
    >>> myFoo = Foo()
    >>> myFoo.__bar #does not work
    >>> myFoo._Foo__bar
    „Wäre nett, wenn...“
    Python macht Einhaltung von
    „private“ (double-underscore)
    „dunders“ optional!

    View full-size slide

  62. private / public
    genügt nicht...
    Java
    • CLASSPATH & jar Hölle
    • Reflection
    • API = alle public
    • import sample.*;
    • private: schlecht testbar
    https://www.funnybits.mobi/2014/08/nice-try-mom.html

    View full-size slide

  63. Anti-Pattern
    in C++
    #define private public

    View full-size slide

  64. Sondern:
    expliziter Export
    öffentlich
    nutzbar
    innere Details
    (Geheimnisse)

    View full-size slide

  65. Sondern (genauer):
    expliziter Export
    öffentlich
    nutzbar
    innere Details
    (Geheimnisse)
    innere Details
    (Geheimnisse)
    C1
    C4
    C2 C3
    C5
    C6
    C7

    View full-size slide

  66. Reliable Configuration:
    vermeidet
    classpath Probleme
    Strong Encapsulation:
    Modul definiert API
    Scalable Runtime:
    Ermöglicht schlankere
    Runtime-Images
    Module mit Java Jigsaw...
    informatik-aktuell.de/entwicklung/programmiersprachen/java-9-das-neue-modulsystem-jigsaw-tutorial.html

    View full-size slide

  67. Deep, not shallow
    interface
    functionality
    interface
    functionality
    J.Ousterhout
    Niedrige „Kosten“ an
    Schnittstelle
    (kleiner == besser)
    Funktionalität
    (mehr == besser)

    View full-size slide

  68. Simple interfaces
    •Einfach zu verstehen
    •Ohne Zusatzwissen nutzbar
    •Verbirgt innere Details
    •„klein“
    •Verhindert Missbrauch
    Beispiel: Unix File I/O
    int open(...)
    size read(...)
    size write(...)
    int lseek(...)
    int close(...)

    View full-size slide

  69. (not so) simple interface
    Apache PDFBox
    • ~ 50 Packages,
    • >500 Klassen,
    • >> 1000 public Methoden

    View full-size slide

  70. Fazit (1)...
    Bessere
    Anforderungen
    Bessere
    Software
    www.innoq.com
    REQ DEV

    View full-size slide

  71. Fazit (2)...
    Kohäsion als
    Schlüssel...
    ... zu guter
    Modularität
    www.innoq.com

    View full-size slide

  72. Wägen Sie ab...
    Komplexität der
    Entwicklung
    Komplexität in
    Betrieb und
    Administration
    www.innoq.com
    DEV OPS

    View full-size slide

  73. Danke! Fragen?
    Dr. Gernot Starke
    [email protected]
    +49 177 728 2570
    Krischerstr. 100
    40789 Monheim am Rhein
    Germany
    +49 2173 3366-0
    Ohlauer Str. 43
    10999 Berlin
    Germany
    +49 2173 3366-0
    Ludwigstr. 180E
    63067 Offenbach
    Germany
    +49 2173 3366-0
    Kreuzstr. 16
    80331 München
    Germany
    +49 2173 3366-0
    Hermannstrasse 13
    20095 Hamburg
    Germany
    +49 2173 3366-0
    Gewerbestr. 11
    CH-6330 Cham
    Switzerland
    +41 41 743 0116
    innoQ Deutschland GmbH innoQ Schweiz GmbH
    www.innoq.com

    View full-size slide