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. 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/
  2. Komplexität als Summe = # ∗ Teile: • Software-Komponenten •

    Abhängigkeiten • Notwendige Aktivitäten
  3. Unterschiedliche und widersprüchliche Anforderungen... • Fachbereich: Leichte Änderbarkeit • Management

    (1): Geringe Entwicklungskosten • Management (2): Geringe Betriebskosten • Juristen: Höchste Datensicherheit • User: Einfache Benutzbarkeit
  4. 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
  5. Der tägliche Entscheidungs-Horror... Feature neu K1 Kn Kneu Besser für

    Performance Besser für Security Einfacher für das Team
  6. Modernes Prinzip: „Small is beautiful (SIB)“ SIB steigert (!): •

    Laufzeit-Komplexität • Infrastruktur-Komplexität
  7. 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
  8. Zeit Taktfrequenz 1 GHz -> Taktdauer 1 Nanosekunde 1 Sekunde

    = 1.000.000.000 Nanosekunden Licht: pro Nanosekunde 20cm
  9. SSD Random Read (150 Sec) 5 Staffeln „Breaking Bad“ (ca.

    36h) Photo by Alex Plesovskich on Unsplash
  10. 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
  11. Modul: • Explizite Angabe von • Angebot (provided) • Bedarf

    (required) https://www.thomann.de/de/harley_benton_ultimate_drive.htm
  12. • Lose Kopplung • Hohe Kohäsion • Geheimnisprinzip • Separation

    of Concerns • KISS • SOLID, DRY, YAGNI • Pfadfinder-Regel • <u.s.w.> Geltungsbereich: Kommt Drauf An KDA Prinzipien im Software-Engineering
  13. Kopplung und Kohäsion • Hohe Kohäsion führt zu loser Kopplung

    nach außen. -./ = 2 X Z Y - = 5 . = 6 / = 3
  14. Lose Kopplung Hohe Kohäsion Versicherte Person Name, Vorname etc. Krankenversicherungs-Nr

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

    Krankenversicherungs-Nr Rentenversicherte Person Rentenversicherungs-Nr
  16. ... 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
  17. 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...
  18. 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%
  19. 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/
  20. 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!
  21. private / public genügt nicht... Java • CLASSPATH & jar

    Hölle • Reflection • API = alle public <x> • import sample.*; • private: schlecht testbar https://www.funnybits.mobi/2014/08/nice-try-mom.html
  22. 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
  23. Deep, not shallow interface functionality interface functionality J.Ousterhout Niedrige „Kosten“

    an Schnittstelle (kleiner == besser) Funktionalität (mehr == besser)
  24. 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(...)
  25. (not so) simple interface Apache PDFBox • ~ 50 Packages,

    • >500 Klassen, • >> 1000 public Methoden
  26. 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