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

Wie zerschlage ich einen Monolithen

Wie zerschlage ich einen Monolithen

Möchte man aus einem Monolithen Microservices oder Teilanwendungen extrahieren, stellen sich Fragen wie: Sollte man bei Null oder mit einem Klon des Monolithen anfangen? Wie findet man ungenutzten Anwendungscode, ungenutzte Pakete, Datenbanktabellen und andere ungenutzte Assets? Welche Ressourcen möchte man gemeinsam mit dem Monolithen nutzen, welche aufteilen und wie?

In diesem Vortrag teile ich meine Erfahrungen zur Extraktion von Microservices und Standalone-Anwendungen und stelle eine auf kurze Entwicklungszyklen fokussierte Strategie und das Open Source Tool vor, das ich zur Unterstützung des Aufteilungsprozesses entwickle.

---

Ohne die mündlichen Ausführungen werden die Folien von sehr begrenztem Nutzen sein! Ich empfehle stattdessen einen Blick ins github-Repo zum Zauberlehrling: https://github.com/webfactory/zauberlehrling

Der Zauberlehrling ist eine Sammlung von Konsolen-Kommandos, Fragen, Tipps und sonstiger Ideen, um die Extraktion von Microservices aus einem Monolithen zu unterstützen.

Avatar for Malte Wunsch

Malte Wunsch

March 29, 2017

Other Decks in Programming

Transcript

  1. Blackbox-Tests • Startseite eines Bereichs • Login • CRUD •

    Suchmaske & Ergebnisse • Zugriffsgeschützte Requests • …
  2. Grüne Wiese oder Klon Wiederverwendung von Code Grüne Wiese Klon

    wenig viel Technologische Einschränkungen Übergangs-Fluss
  3. Tests geschrieben Unbenutzte Ressourcen löschen Fixen Weiter • Nächste Ressourcen

    • Geteilte Ressourcen • Refactoring • … Tests ausführen Commiten Kurze Iterationen Unbenutzte Ressourcen löschen
  4. Unbenutzte Ressourcen? Alle Ressourcen listen Coverage loggen Tests ausführen Benutzte


    Ressourcen ermitteln Differenz bilden - Alle Ressourcen Unbenutzte Ressourcen Benutzte Ressourcen = Zauber- lehrling Coverage loggen Benutzte
 Ressourcen ermitteln Alle Ressourcen listen Differenz bilden
  5. <?php // web/app_dev.php $kernel = new AppKernel('dev', true); // Kernel

    handles request... $kernel->terminate($request, $response); xdebug_start_code_coverage(); $filePointer = fopen($outputFile, 'a'); fwrite(
 $filePointer,
 implode(PHP_EOL, array_keys(xdebug_get_code_coverage()))
 ); fclose($filePointer); Coverage bei PHP-Dateien - Alle PHP- Dateien Unbenutzte PHP-Dateien Benutzte PHP-Dateien =
  6. Unbenutzte PHP-Dateien - Alle PHP- Dateien Unbenutzte PHP-Dateien Benutzte PHP-Dateien

    = Zauberlehrling: bin/console show-unused-php-files
 pathToInspect pathToIgnore usedFiles
  7. bin/console show-unused-composer-packages
 composerJson usedFiles Unbenutzte Composer-Pakete - Alle Pakete Unbenutzte

    Pakete Benutzte Pakete = • mindestens 1 PHP-Datei benutzt • Bundle-Datei ignoriert ⚡ nur PHP-Dateien berücksichtigt
  8. bin/console show-unused-mysql-tables Query-Logging SET global general_log = 1; SET global

    log_output = 'table'; Unbenutzte MySQL-Tabellen - Alle Tabellen Unbenutzte Tabellen Benutzte Tabellen =
  9. ⚡Assets-Download ⚡Kompilate • Download: Selenium/Browserstack • Kompilierung verhindern • Coverage:

    • JS: Istanbul, JSCover, Blanket.js, … • CSS: Dust-Me Selectors • Sonstige Assets: Webserver-Access-Logs Unbenutzte Frontend-Assets
  10. Abwägung: Ersparnis / Entkopplung Geteilte Ressourcen Shared Host Shared Code

    Shared Database Server Schema Shared Host Basale Infrastruktur Domain Model Server Schema
  11. Geteilte Tabellen Statische Daten • Kopieren • Tabelle • Code/Konfiguration

    • Paket? Veränderliche Daten • Neues Konzept entdeckt? • Service zur Kapselung Fremdschlüssel & Views • Nicht direkt sichtbare
 Abhängigkeiten • Mini-Service • Löschen
  12. Idee: Mini-LayoutService • Rahmenlayout des Monolithen nutzen • „Leere“ View

    mit Platzhaltern • Ggf. Parameter für aktiven Menüpunkt etc. • Microservice fragt ab, cacht und ersetzt Platzhalter Rahmen-Layout ⚡Zentrale Assets