Slide 1

Slide 1 text

Micro Frontends Mastering Microservices ● Heise Onlinekonferenz ● März 2020 Oberflächen schneiden & kleben Michael Geers

Slide 2

Slide 2 text

Monolithen zerlegen

Slide 3

Slide 3 text

in Microservices

Slide 4

Slide 4 text

Der Frontend Monolith wird präsentiert von

Slide 5

Slide 5 text

unabhängige Micro Frontends

Slide 6

Slide 6 text

Michael Geers Frontend Entwickler naltatis auf Twitter & GitHub Autor des Buches Micro Frontends in Action und der Webseite micro-frontends.org Bremer Software Manufaktur mit Fokus auf E-Commerce

Slide 7

Slide 7 text

Was ist das? Wieso macht man das? Wie geht das? Die Agenda Wichtige andere Dinge an die man auch noch denken muss …

Slide 8

Slide 8 text

1.Was sind Micro Frontends?

Slide 9

Slide 9 text

kurze Rückblende ….

Slide 10

Slide 10 text

Der Monolith Backend Frontend Zeitalter des Fullstack Entwicklers

Slide 11

Slide 11 text

Backend Frontend Backend Frontend bye bye Fullstack

Slide 12

Slide 12 text

Team Inspire Team Search Team Decide Team Checkout Frontend Teaser Service Product Service Price Service Availability Service Payment Service Basket Service Customer Service API Gateway (Rest, BFF, GraphQL) Microservice Architektur Backend Frontend Spezialisten

Slide 13

Slide 13 text

Frontend Frontend Der Monolith Front- & Backend Microservices Frontend Monolithen Backend Frontend Frontend

Slide 14

Slide 14 text

Micro Frontends Team Entdecken Team Suchen Team Entscheiden Team Kaufen Backend Frontend

Slide 15

Slide 15 text

Micro Frontends Definition ThoughtWorks Technology Radar https://www.thoughtworks.com/de/radar/techniques/micro-frontends Our preferred (and proven) approach is to split the browser-based code into micro frontends. In this approach, the web application is broken down into its features, and each feature is owned, frontend to backend, by a different team. This ensures that every feature is developed, tested and deployed independently from other features. … Stages: Access (2016) > Trial (2017) > Adopt ⭐ (2019)

Slide 16

Slide 16 text

Anatomie eines Teams Team Entdecken Team Entscheiden Team Kaufen hat eigenen Tech-Stack kann jederzeit deployen ist unabhängig von anderen Teams Self-contained System

Slide 17

Slide 17 text

Team Mission „Hilft beim Entdecken passender Produkte.“ „Unterstützt bei der Kaufentscheidung.“ „Führt den Kunden zum Bestellabschluss.“ Team Entdecken Team Entscheiden Team Kaufen

Slide 18

Slide 18 text

Unsere Erfahrungen mit Micro Frontends

Slide 19

Slide 19 text

2 Teams 5-7 Entwickler/Team 5 Teams 6-10 Entwickler/Team Neue E-Commerce Plattformen 5 Teams 6-8 Entwickler/Team hochwertige Manufakturprodukte Katalog & 14 Warenhäuser Premium Mode 12 Warenhäuser Warenhauskette heute Galeria Karstadt Kaufhof 2014 2016 2016

Slide 20

Slide 20 text

Projekt: Next Level Commerce 5 Teams 7-10 Entwickler/Team von 4 Softwarefirmen Primär Mode für Best Ager 15 Marken in bis zu 12 Ländern ~ 65 Online Shops Neuentwicklung Erster Livegang nach 2 Monaten Entwicklung mit fiktiver neuer Marke taschenherz.com 6 Monate später Migration der ersten echten Marke mona.de 2018

Slide 21

Slide 21 text

Wer macht das noch? … und viele mehr.

Slide 22

Slide 22 text

2.Wieso macht man das?

Slide 23

Slide 23 text

schnellere Entwicklung

Slide 24

Slide 24 text

Frontend Payment Service Content Service Operations Platform Business Attributes Service Specialist Teams Team Inspire Team Decide Team Checkout Cross Functional Teams grouped around a use case or customer need grouped around a skill or technology Entwicklung eines Features Meetings viel Wartezeit ⏳

Slide 25

Slide 25 text

Kundenfokus direktes Feedback keine reinen API Teams

Slide 26

Slide 26 text

Reduzierter Scope Man kann den Überblick über das ganze System haben. ❤

Slide 27

Slide 27 text

Frontend Renovierung ohne alles neu zu schreiben

Slide 28

Slide 28 text

2005 2010 2015 ® Polymer hyperapp ? Frontend Tools sind schnelllebig

Slide 29

Slide 29 text

Wann sind Micro Frontends keine gute Idee? Native Apps?! Integration ist einfacher im Web AppStore Review vs. Continuous Delivery kleine Projekte Hauptvorteil ist Skalierung Schnitte bringen Overhead Unbekannte Domäne Schnitte sind schwer zu ändern ‎ maybe Monolith-first

Slide 30

Slide 30 text

3.Wie macht man das?

Slide 31

Slide 31 text

Zwei zentrale Konzepte: Seiten & Fragmente

Slide 32

Slide 32 text

Ein Team verantwortet mehrere Seiten 2 33 $ 66 $ 99 $ buy 2 1 66 $ 1 1 list home detail basket payment confirm $ $ %% Team Inspire Team Decide Team Checkout Customer Journey Team Kaufen Team Entscheiden Team Entdecken

Slide 33

Slide 33 text

Teams können Fragmente* anbieten Team Decide Team Inspire Team Checkout Fragment Fragment Page Team Kaufen Team Entdecken Team Entscheiden Seite * aka Includable Micro Frontend, Podlet, Parcel, Pilet, …

Slide 34

Slide 34 text

schneiden

Slide 35

Slide 35 text

Teams sind entkoppelt Integration findet zur Laufzeit statt

Slide 36

Slide 36 text

& kleben

Slide 37

Slide 37 text

3 Formen von Integration Komposition Seitenübergänge B A C B A A A B A C Kommunikation

Slide 38

Slide 38 text

2 33 $ 66 $ 99 $ buy 2 1 66 $ 1 1 list home detail basket payment confirm $ $ %% Team Inspire Team Decide Team Checkout Customer Journey Seitenübergänge mit Links

Slide 39

Slide 39 text

Komposition mit iframes O RLY? - schlecht für SEO - schlechte Performance - schränkt Layout ein - keine Barrierefreiheit Nachteile - Starke Isolation - Einfach & funktioniert Vorteile

Slide 40

Slide 40 text

Spotify web player (bis Anfang 2019) & Desktop App https://labs.spotify.com/2019/03/25/building-spotifys-new-web-player/ Komposition mit iframes

Slide 41

Slide 41 text

client side server side rendering

Slide 42

Slide 42 text

Team Entscheiden Team Entdecken Team Kaufen

Slide 43

Slide 43 text

buy for 66 € 0 items 0 items

Tractor

buy for 66 € Server Team Entscheiden nginx Server Team Kaufen /red-tractor

Tractor

/kaufen/basket /kaufen/buy /red-tractor Komposition mit SSI oder ESI Server Side Includes

Slide 44

Slide 44 text

Team Entscheiden Team Entdecken Team Kaufen Interaktivität

Slide 45

Slide 45 text

Jedes Fragment ist eine Mini-Applikation Team Decide Team Inspire Team Checkout Fragment Fragment Page * Technologie-Serviervorschlag würde man „in echt“ nie so machen * * *

Slide 46

Slide 46 text

Web Components Custom Elements https://developers.google.com/web/fundamentals/getting-started/primers/customelements

Slide 47

Slide 47 text

class KaufenBasket extends HTMLElement { connectedCallback() { this.innerHTML = 'mini basket ...'; } } customElements.define('kaufen-basket', KaufenBasket); Custom Elements

Slide 48

Slide 48 text

Element Lifecycle class KaufenBasket extends HTMLElement { constructor() {...} connectedCallback() {...} attributeChangedCallback(attr, oldVal, newVal) {...} disconnectedCallback() {...} } is created attached to DOM removed from DOM, cleanup! someone changed an attribute

Slide 49

Slide 49 text

Custom Elements Spec v1 native Unterstützung in allen aktuellen Browsern Polyfill für alte Browser verfügbar ✓ Browser Support

Slide 50

Slide 50 text

Komposition via Custom Elements

Slide 51

Slide 51 text

Seite zu Fragment: Attribute Fragment zu Seite: Events (Bubbling) Fragment zu Fragment: Events (Broadcast) Kommunikation zwischen Micro Frontends props down, events up Standard DOM anstatt seLbStGebAuTEr Js APis Seite zu Seite: URL

Slide 52

Slide 52 text

t_green t_green Kommunikation Beispiel: Seite zu Fragment Seite aktualisiert sku-Attribut der Fragmente

Slide 53

Slide 53 text

Seitenübergänge zwischen SPAs hard soft soft SPA SPA Shared Application Shell (Meta Framework) soft soft soft SPA SPA Verlinkte Single Page Apps Unified Single Page App

Slide 54

Slide 54 text

Libraries & Meta Frameworks https://github.com/CanopyTax/single-spa https://github.com/zalando/tailor https://github.com/opencomponents/oc Podium https://podium-lib.io meta-spa-router https://github.com/manfredsteyer/meta-router https://github.com/onerzafer/microfe-client Piral https://piral.io Ara https://github.com/ara-framework puzzle.js https://github.com/puzzle-js https://github.com/SAP/luigi Luigi

Slide 55

Slide 55 text

4.Wichtige andere Dinge an die man auch noch denken muss

Slide 56

Slide 56 text

wie tief ist dein team?

Slide 57

Slide 57 text

Wie tief reicht ein vertikales Team? Frontend Backend Operations Data Science Experten & Business Nur Frontend ✔ Skalierung ✔ Technologische Freiheit Full-Stack Team ✔ Schnellere Entwicklung ✔ Weniger Warten Komplett Autonom ✔ Erprobung von Ideen ✔ Schnelle Reaktion auf Markt

Slide 58

Slide 58 text

konsistentes design

Slide 59

Slide 59 text

gemeinsame Pattern Library design design dev dev dev ux

Slide 60

Slide 60 text

1 66 $ Runtime Integration aka Bootstrap Model Versioned Package Pattern Library Product Team Product Team Product Team CSS & JS production 1 66 $ Pattern Library Product Team Product Team Product Team v2.0 v2.1 v2.1 v2.1 v2.0 JS CSS Template HTML JS CSS HTML 1 66 $ Runtime Integration aka Bootstrap Model Versioned Package Pattern Library Product Team Product Team Product Team CSS & JS production 1 66 $ Pattern Library Product Team Product Team Product Team v2.0 v2.1 v2.1 v2.1 v2.0 JS CSS Template HTML JS CSS HTML zur Laufzeit Integration als versioniertes Paket

Slide 61

Slide 61 text

Leseempfehlung https://medium.com/@nathanacurtis Artikelserie zu Design Systems von Nathan Curtis

Slide 62

Slide 62 text

Podcast Empfehlung https://uiengineering.de/

Slide 63

Slide 63 text

web performance

Slide 64

Slide 64 text

Performance Kultur erst messen dann optimieren Welches Team ist verantwortlich? gemeinsame Metriken definieren

Slide 65

Slide 65 text

Wähle deine Waffen mit Bedacht! große Framework Runtime hyperapp k(l)eine Runtime

Slide 66

Slide 66 text

Universal Rendering weitere emen … Testen & Qualität Entwicklung & Debugging Teams & Kultur Gemeinsame Infrastruktur? Ausliefern statischer Assets Legacy & Migration

Slide 67

Slide 67 text

Ich schreibe ein Buch … jetzt verfügbar in MEAP Manning Early Access Program 40% Rabatt mit Code ctwmaster20 auf alle Bücher bei manning.com M A N N I N G Michael Geers

Slide 68

Slide 68 text

Abhängigkeiten machen langsam

Slide 69

Slide 69 text

Danke fürs Zuhören Michael Geers / @naltatis neuland Büro für Informatik, Bremen micro-frontends.org

Slide 70

Slide 70 text

Flower Origami Faris Mohammed https://unsplash.com/photos/z0UfETjRl0g High-rise Building Tomas Robertson https://unsplash.com/photos/DUwuJaKE3FI Containers Frank Mckenna https://unsplash.com/photos/tjX_sniNzgQ Gray Tiles Osman Rana https://unsplash.com/photos/JcSsu-NF3qo Buildings Juhasz Imre https://www.pexels.com/photo/apartment-architecture-buildings- business-425047/ Action Bicycling Roman Pohorecki https://www.pexels.com/photo/action-bicycling-bike-biking-287398/ People Icons freak https://www.flaticon.com/family/special/lineal-color The Tool Guy Tirachard Kumtanom https://unsplash.com/photos/UuW4psOb388 Wooden Counter David Siglin https://www.pexels.com/photo/blur-blurry-bokeh-close-up-347139/ Woodshop Igor Ovsyannykov https://unsplash.com/photos/iXV0i4Wo4yc Traffic Lights Harshal Desai https://unsplash.com/photos/0hCIrw8dVfE Scissors Matt Artz https://unsplash.com/photos/SmocKx2oDZc Flinke Flasche (ich) HP C7000 BladeSystem pchow98 https://flic.kr/p/7AVF23 Close up Susanne Nilsson https://flic.kr/p/nppBcE Lego Benny Cheezburger http://gph.is/1BCRCKh Browser Logos Cătălin Mariș https://github.com/alrra/browser-logos Rotary Telephone Mike Meyers https://unsplash.com/photos/-haAxbjiHds Schuhbänder (ich) Tractors Manufactum https://www.manufactum.com/tin-toys-c193667/ Bildquellen mit Micro Frontends gebaut